Files
loongoffice/cui/source/inc/selector.hxx
Stephan Bergmann 57b1bac23b loplugin:saloverride
Change-Id: Ie85ffc561de858eedafa062a89e0a9983aa20182
2014-05-23 23:47:07 +02:00

226 lines
7.1 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_CUI_SOURCE_INC_SELECTOR_HXX
#define INCLUDED_CUI_SOURCE_INC_SELECTOR_HXX
#include <vcl/lstbox.hxx>
#include <vcl/fixed.hxx>
#include <vcl/group.hxx>
#include <vcl/menubtn.hxx>
#include <svtools/treelistbox.hxx>
#include <com/sun/star/uno/XComponentContext.hpp>
#include <com/sun/star/frame/XFrame.hpp>
#include <com/sun/star/container/XNameAccess.hpp>
#include <com/sun/star/script/browse/XBrowseNode.hpp>
#include <boost/ptr_container/ptr_vector.hpp>
#define SVX_CFGGROUP_FUNCTION 1
#define SVX_CFGFUNCTION_SLOT 2
#define SVX_CFGGROUP_SCRIPTCONTAINER 3
#define SVX_CFGFUNCTION_SCRIPT 4
struct SvxGroupInfo_Impl
{
sal_uInt16 nKind;
sal_uInt16 nOrd;
::com::sun::star::uno::Reference< ::com::sun::star::script::browse::XBrowseNode >
xBrowseNode;
OUString sURL;
OUString sHelpText;
bool bWasOpened;
SvxGroupInfo_Impl( sal_uInt16 n, sal_uInt16 nr )
:nKind( n )
,nOrd( nr )
,xBrowseNode()
,sURL()
,sHelpText()
,bWasOpened(false)
{
}
SvxGroupInfo_Impl( sal_uInt16 n, sal_uInt16 nr, const ::com::sun::star::uno::Reference< ::com::sun::star::script::browse::XBrowseNode >& _rxNode )
:nKind( n )
,nOrd( nr )
,xBrowseNode( _rxNode )
,sURL()
,sHelpText()
,bWasOpened(false)
{
}
SvxGroupInfo_Impl( sal_uInt16 n, sal_uInt16 nr, const OUString& _rURL, const OUString& _rHelpText )
:nKind( n )
,nOrd( nr )
,xBrowseNode()
,sURL( _rURL )
,sHelpText( _rHelpText )
,bWasOpened(false)
{
}
};
typedef boost::ptr_vector<SvxGroupInfo_Impl> SvxGroupInfoArr_Impl;
class ImageProvider
{
public:
virtual ~ImageProvider() {}
virtual Image GetImage( const OUString& rCommandURL ) = 0;
};
class SvxConfigFunctionListBox : public SvTreeListBox
{
friend class SvxConfigGroupListBox;
Timer aTimer;
SvTreeListEntry* pCurEntry;
SvxGroupInfoArr_Impl aArr;
SvTreeListEntry* m_pDraggingEntry;
DECL_LINK(TimerHdl, void *);
virtual void MouseMove( const MouseEvent& rMEvt ) SAL_OVERRIDE;
public:
SvxConfigFunctionListBox(Window* pParent, WinBits nStyle);
virtual ~SvxConfigFunctionListBox();
void ClearAll();
OUString GetHelpText( SvTreeListEntry *pEntry );
using Window::GetHelpText;
SvTreeListEntry* GetLastSelectedEntry();
void FunctionSelected();
// drag n drop methods
virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt ) SAL_OVERRIDE;
virtual DragDropMode NotifyStartDrag(
TransferDataContainer&, SvTreeListEntry* ) SAL_OVERRIDE;
virtual void DragFinished( sal_Int8 ) SAL_OVERRIDE;
};
class SvxConfigGroupListBox : public SvTreeListBox
{
SvxGroupInfoArr_Impl aArr;
bool m_bShowSlots;
SvxConfigFunctionListBox* pFunctionListBox;
ImageProvider* m_pImageProvider;
::com::sun::star::uno::Reference
< ::com::sun::star::frame::XFrame > m_xFrame;
::com::sun::star::uno::Reference
< ::com::sun::star::container::XNameAccess > m_xModuleCommands;
Image m_hdImage;
Image m_libImage;
Image m_macImage;
Image m_docImage;
OUString m_sMyMacros;
OUString m_sProdMacros;
Image GetImage(
::com::sun::star::uno::Reference< ::com::sun::star::script::browse::XBrowseNode > node,
::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > xCtx,
bool bIsRootNode
);
::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > getDocumentModel(
::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& xCtx,
OUString& docName
);
private:
void fillScriptList(
const ::com::sun::star::uno::Reference< ::com::sun::star::script::browse::XBrowseNode >& _rxRootNode,
SvTreeListEntry* _pParentEntry,
bool _bCheapChildrenOnDemand
);
protected:
virtual void RequestingChildren( SvTreeListEntry *pEntry) SAL_OVERRIDE;
virtual bool Expand( SvTreeListEntry* pParent ) SAL_OVERRIDE;
public:
SvxConfigGroupListBox(Window* pParent, WinBits nStyle);
virtual ~SvxConfigGroupListBox();
void Init(bool bShowSlots, const ::com::sun::star::uno::Reference
< ::com::sun::star::frame::XFrame >& xFrame);
void Open( SvTreeListEntry*, bool );
void ClearAll();
void GroupSelected();
void SetFunctionListBox( SvxConfigFunctionListBox *pBox )
{ pFunctionListBox = pBox; }
void SetImageProvider( ImageProvider* provider )
{ m_pImageProvider = provider; }
};
class SvxScriptSelectorDialog : public ModelessDialog
{
FixedText* m_pDialogDescription;
SvxConfigGroupListBox* m_pCategories;
SvxConfigFunctionListBox* m_pCommands;
PushButton* m_pOKButton;
PushButton* m_pCancelButton;
VclMultiLineEdit* m_pDescriptionText;
OUString m_sDefaultDesc;
bool m_bShowSlots;
Link m_aAddHdl;
DECL_LINK( ClickHdl, Button * );
DECL_LINK( SelectHdl, Control* );
DECL_LINK( FunctionDoubleClickHdl, Control* );
void UpdateUI();
public:
SvxScriptSelectorDialog (
Window* pParent = NULL,
bool bShowSlots = false,
const ::com::sun::star::uno::Reference
< ::com::sun::star::frame::XFrame >& xFrame = 0
);
virtual ~SvxScriptSelectorDialog ( );
void SetAddHdl( const Link& rLink ) { m_aAddHdl = rLink; }
const Link& GetAddHdl() const { return m_aAddHdl; }
void SetImageProvider(ImageProvider* provider)
{
m_pCategories->SetImageProvider(provider);
}
OUString GetScriptURL() const;
OUString GetSelectedDisplayName();
void SetRunLabel();
void SetDialogDescription(const OUString& rDescription);
};
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */