diff options
Diffstat (limited to 'cui/source/inc/selector.hxx')
-rw-r--r-- | cui/source/inc/selector.hxx | 249 |
1 files changed, 249 insertions, 0 deletions
diff --git a/cui/source/inc/selector.hxx b/cui/source/inc/selector.hxx new file mode 100644 index 000000000000..3e21a3812835 --- /dev/null +++ b/cui/source/inc/selector.hxx @@ -0,0 +1,249 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: selector.hxx,v $ + * $Revision: 1.15 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +#ifndef _SVXSELECTOR_HXX +#define _SVXSELECTOR_HXX + +#include <vcl/lstbox.hxx> +#include <vcl/fixed.hxx> +#include <vcl/group.hxx> +#include <vcl/menubtn.hxx> +#include <svtools/svtreebx.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> + +#define _SVSTDARR_USHORTS +#define _SVSTDARR_STRINGSDTOR +#include <svl/svstdarr.hxx> // SvUShorts +#include <sfx2/minarray.hxx> + +#define SVX_CFGGROUP_FUNCTION 1 +#define SVX_CFGFUNCTION_SLOT 2 +#define SVX_CFGGROUP_SCRIPTCONTAINER 3 +#define SVX_CFGFUNCTION_SCRIPT 4 + +struct SvxGroupInfo_Impl +{ + USHORT nKind; + USHORT nOrd; + ::com::sun::star::uno::Reference< ::com::sun::star::script::browse::XBrowseNode > + xBrowseNode; + ::rtl::OUString sURL; + ::rtl::OUString sHelpText; + BOOL bWasOpened; + + SvxGroupInfo_Impl( USHORT n, USHORT nr ) + :nKind( n ) + ,nOrd( nr ) + ,xBrowseNode() + ,sURL() + ,sHelpText() + ,bWasOpened(FALSE) + { + } + + SvxGroupInfo_Impl( USHORT n, USHORT 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( USHORT n, USHORT nr, const ::rtl::OUString& _rURL, const ::rtl::OUString& _rHelpText ) + :nKind( n ) + ,nOrd( nr ) + ,xBrowseNode() + ,sURL( _rURL ) + ,sHelpText( _rHelpText ) + ,bWasOpened(FALSE) + { + } +}; + +typedef SvxGroupInfo_Impl* SvxGroupInfoPtr; +SV_DECL_PTRARR_DEL(SvxGroupInfoArr_Impl, SvxGroupInfoPtr, 5, 5) + +class ImageProvider +{ +public: + virtual ~ImageProvider() {} + + virtual Image GetImage( const rtl::OUString& rCommandURL ) = 0; +}; + +class SvxConfigFunctionListBox_Impl : public SvTreeListBox +{ +friend class SvxConfigGroupListBox_Impl; + Timer aTimer; + SvLBoxEntry* pCurEntry; + SvxGroupInfoArr_Impl aArr; + SvLBoxEntry* m_pDraggingEntry; + + DECL_LINK( TimerHdl, Timer* ); + virtual void MouseMove( const MouseEvent& rMEvt ); + +public: + SvxConfigFunctionListBox_Impl( Window*, const ResId& ); + ~SvxConfigFunctionListBox_Impl(); + void ClearAll(); + SvLBoxEntry* GetEntry_Impl( USHORT nId ); + SvLBoxEntry* GetEntry_Impl( const String& ); + USHORT GetId( SvLBoxEntry *pEntry ); + String GetHelpText( SvLBoxEntry *pEntry ); + using Window::GetHelpText; + USHORT GetCurId() + { return GetId( FirstSelected() ); } + SvLBoxEntry* GetLastSelectedEntry(); + void FunctionSelected(); + + // drag n drop methods + virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt ); + + virtual DragDropMode NotifyStartDrag( + TransferDataContainer&, SvLBoxEntry* ); + + virtual void DragFinished( sal_Int8 ); +}; + +class SvxConfigGroupListBox_Impl : public SvTreeListBox +{ + SvxGroupInfoArr_Impl aArr; + bool m_bShowSlots; + + SvxConfigFunctionListBox_Impl* 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_hdImage_hc; + Image m_libImage; + Image m_libImage_hc; + Image m_macImage; + Image m_macImage_hc; + Image m_docImage; + Image m_docImage_hc; + ::rtl::OUString m_sMyMacros; + ::rtl::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, bool bHighContrast ); + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > getDocumentModel( ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& xCtx, ::rtl::OUString& docName ); + +private: + void fillScriptList( + const ::com::sun::star::uno::Reference< ::com::sun::star::script::browse::XBrowseNode >& _rxRootNode, + SvLBoxEntry* _pParentEntry, + bool _bCheapChildsOnDemand + ); + +protected: + virtual void RequestingChilds( SvLBoxEntry *pEntry); + virtual BOOL Expand( SvLBoxEntry* pParent ); + using SvListView::Expand; + +public: + SvxConfigGroupListBox_Impl ( + Window* pParent, const ResId&, + bool _bShowSlots, + const ::com::sun::star::uno::Reference + < ::com::sun::star::frame::XFrame >& xFrame + ); + + ~SvxConfigGroupListBox_Impl(); + + void Init(); + void Open( SvLBoxEntry*, BOOL ); + void ClearAll(); + void GroupSelected(); + + void SetFunctionListBox( SvxConfigFunctionListBox_Impl *pBox ) + { pFunctionListBox = pBox; } + + void SetImageProvider( ImageProvider* provider ) + { m_pImageProvider = provider; } +}; + +class SvxScriptSelectorDialog : public ModelessDialog +{ + FixedText aDialogDescription; + FixedText aGroupText; + SvxConfigGroupListBox_Impl aCategories; + FixedText aFunctionText; + SvxConfigFunctionListBox_Impl aCommands; + OKButton aOKButton; + CancelButton aCancelButton; + HelpButton aHelpButton; + FixedLine aDescription; + FixedText aDescriptionText; + + BOOL m_bShowSlots; + Link m_aAddHdl; + + DECL_LINK( ClickHdl, Button * ); + DECL_LINK( SelectHdl, Control* ); + DECL_LINK( FunctionDoubleClickHdl, Control* ); + + void UpdateUI(); + void ResizeControls(); + +public: + + SvxScriptSelectorDialog ( + Window* pParent = NULL, + BOOL bShowSlots = FALSE, + const ::com::sun::star::uno::Reference + < ::com::sun::star::frame::XFrame >& xFrame = 0 + ); + + ~SvxScriptSelectorDialog ( ); + + void SetAddHdl( const Link& rLink ) { m_aAddHdl = rLink; } + const Link& GetAddHdl() const { return m_aAddHdl; } + + void SetImageProvider( ImageProvider* provider ) + { aCategories.SetImageProvider( provider ); } + + USHORT GetSelectedId(); + String GetScriptURL() const; + String GetSelectedDisplayName(); + String GetSelectedHelpText(); + void SetRunLabel(); + void SetDialogDescription(const String& rDescription); +}; + +#endif |