1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 #ifndef _SVXSELECTOR_HXX 24 #define _SVXSELECTOR_HXX 25 26 #include <vcl/lstbox.hxx> 27 #include <vcl/fixed.hxx> 28 #include <vcl/group.hxx> 29 #include <vcl/menubtn.hxx> 30 #include <svtools/svtreebx.hxx> 31 32 #include <com/sun/star/uno/XComponentContext.hpp> 33 #include <com/sun/star/frame/XFrame.hpp> 34 #include <com/sun/star/container/XNameAccess.hpp> 35 #include <com/sun/star/script/browse/XBrowseNode.hpp> 36 37 #define _SVSTDARR_USHORTS 38 #define _SVSTDARR_STRINGSDTOR 39 #include <svl/svstdarr.hxx> // SvUShorts 40 #include <sfx2/minarray.hxx> 41 42 #define SVX_CFGGROUP_FUNCTION 1 43 #define SVX_CFGFUNCTION_SLOT 2 44 #define SVX_CFGGROUP_SCRIPTCONTAINER 3 45 #define SVX_CFGFUNCTION_SCRIPT 4 46 47 struct SvxGroupInfo_Impl 48 { 49 sal_uInt16 nKind; 50 sal_uInt16 nOrd; 51 ::com::sun::star::uno::Reference< ::com::sun::star::script::browse::XBrowseNode > 52 xBrowseNode; 53 ::rtl::OUString sURL; 54 ::rtl::OUString sHelpText; 55 sal_Bool bWasOpened; 56 SvxGroupInfo_ImplSvxGroupInfo_Impl57 SvxGroupInfo_Impl( sal_uInt16 n, sal_uInt16 nr ) 58 :nKind( n ) 59 ,nOrd( nr ) 60 ,xBrowseNode() 61 ,sURL() 62 ,sHelpText() 63 ,bWasOpened(sal_False) 64 { 65 } 66 SvxGroupInfo_ImplSvxGroupInfo_Impl67 SvxGroupInfo_Impl( sal_uInt16 n, sal_uInt16 nr, const ::com::sun::star::uno::Reference< ::com::sun::star::script::browse::XBrowseNode >& _rxNode ) 68 :nKind( n ) 69 ,nOrd( nr ) 70 ,xBrowseNode( _rxNode ) 71 ,sURL() 72 ,sHelpText() 73 ,bWasOpened(sal_False) 74 { 75 } 76 SvxGroupInfo_ImplSvxGroupInfo_Impl77 SvxGroupInfo_Impl( sal_uInt16 n, sal_uInt16 nr, const ::rtl::OUString& _rURL, const ::rtl::OUString& _rHelpText ) 78 :nKind( n ) 79 ,nOrd( nr ) 80 ,xBrowseNode() 81 ,sURL( _rURL ) 82 ,sHelpText( _rHelpText ) 83 ,bWasOpened(sal_False) 84 { 85 } 86 }; 87 88 typedef SvxGroupInfo_Impl* SvxGroupInfoPtr; 89 SV_DECL_PTRARR_DEL(SvxGroupInfoArr_Impl, SvxGroupInfoPtr, 5, 5) 90 91 class ImageProvider 92 { 93 public: ~ImageProvider()94 virtual ~ImageProvider() {} 95 96 virtual Image GetImage( const rtl::OUString& rCommandURL ) = 0; 97 }; 98 99 class SvxConfigFunctionListBox_Impl : public SvTreeListBox 100 { 101 friend class SvxConfigGroupListBox_Impl; 102 Timer aTimer; 103 SvLBoxEntry* pCurEntry; 104 SvxGroupInfoArr_Impl aArr; 105 SvLBoxEntry* m_pDraggingEntry; 106 107 DECL_LINK( TimerHdl, Timer* ); 108 virtual void MouseMove( const MouseEvent& rMEvt ); 109 110 public: 111 SvxConfigFunctionListBox_Impl( Window*, const ResId& ); 112 ~SvxConfigFunctionListBox_Impl(); 113 void ClearAll(); 114 String GetHelpText( SvLBoxEntry *pEntry ); 115 using Window::GetHelpText; 116 SvLBoxEntry* GetLastSelectedEntry(); 117 void FunctionSelected(); 118 119 // drag n drop methods 120 virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt ); 121 122 virtual DragDropMode NotifyStartDrag( 123 TransferDataContainer&, SvLBoxEntry* ); 124 125 virtual void DragFinished( sal_Int8 ); 126 }; 127 128 class SvxConfigGroupListBox_Impl : public SvTreeListBox 129 { 130 SvxGroupInfoArr_Impl aArr; 131 bool m_bShowSlots; 132 133 SvxConfigFunctionListBox_Impl* pFunctionListBox; 134 ImageProvider* m_pImageProvider; 135 136 ::com::sun::star::uno::Reference 137 < ::com::sun::star::frame::XFrame > m_xFrame; 138 139 ::com::sun::star::uno::Reference 140 < ::com::sun::star::container::XNameAccess > m_xModuleCommands; 141 142 Image m_hdImage; 143 Image m_hdImage_hc; 144 Image m_libImage; 145 Image m_libImage_hc; 146 Image m_macImage; 147 Image m_macImage_hc; 148 Image m_docImage; 149 Image m_docImage_hc; 150 ::rtl::OUString m_sMyMacros; 151 ::rtl::OUString m_sProdMacros; 152 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 ); 153 ::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 ); 154 155 private: 156 void fillScriptList( 157 const ::com::sun::star::uno::Reference< ::com::sun::star::script::browse::XBrowseNode >& _rxRootNode, 158 SvLBoxEntry* _pParentEntry, 159 bool _bCheapChildsOnDemand 160 ); 161 162 protected: 163 virtual void RequestingChilds( SvLBoxEntry *pEntry); 164 virtual sal_Bool Expand( SvLBoxEntry* pParent ); 165 using SvListView::Expand; 166 167 public: 168 SvxConfigGroupListBox_Impl ( 169 Window* pParent, const ResId&, 170 bool _bShowSlots, 171 const ::com::sun::star::uno::Reference 172 < ::com::sun::star::frame::XFrame >& xFrame 173 ); 174 175 ~SvxConfigGroupListBox_Impl(); 176 177 void Init(); 178 void Open( SvLBoxEntry*, sal_Bool ); 179 void ClearAll(); 180 void GroupSelected(); 181 SetFunctionListBox(SvxConfigFunctionListBox_Impl * pBox)182 void SetFunctionListBox( SvxConfigFunctionListBox_Impl *pBox ) 183 { pFunctionListBox = pBox; } 184 SetImageProvider(ImageProvider * provider)185 void SetImageProvider( ImageProvider* provider ) 186 { m_pImageProvider = provider; } 187 }; 188 189 class SvxScriptSelectorDialog : public ModelessDialog 190 { 191 FixedText aDialogDescription; 192 FixedText aGroupText; 193 SvxConfigGroupListBox_Impl aCategories; 194 FixedText aFunctionText; 195 SvxConfigFunctionListBox_Impl aCommands; 196 OKButton aOKButton; 197 CancelButton aCancelButton; 198 HelpButton aHelpButton; 199 FixedLine aDescription; 200 FixedText aDescriptionText; 201 202 sal_Bool m_bShowSlots; 203 Link m_aAddHdl; 204 205 DECL_LINK( ClickHdl, Button * ); 206 DECL_LINK( SelectHdl, Control* ); 207 DECL_LINK( FunctionDoubleClickHdl, Control* ); 208 209 void UpdateUI(); 210 void ResizeControls(); 211 212 public: 213 214 SvxScriptSelectorDialog ( 215 Window* pParent = NULL, 216 sal_Bool bShowSlots = sal_False, 217 const ::com::sun::star::uno::Reference 218 < ::com::sun::star::frame::XFrame >& xFrame = 0 219 ); 220 221 ~SvxScriptSelectorDialog ( ); 222 SetAddHdl(const Link & rLink)223 void SetAddHdl( const Link& rLink ) { m_aAddHdl = rLink; } GetAddHdl() const224 const Link& GetAddHdl() const { return m_aAddHdl; } 225 SetImageProvider(ImageProvider * provider)226 void SetImageProvider( ImageProvider* provider ) 227 { aCategories.SetImageProvider( provider ); } 228 229 String GetScriptURL() const; 230 String GetSelectedDisplayName(); 231 String GetSelectedHelpText(); 232 void SetRunLabel(); 233 void SetDialogDescription(const String& rDescription); 234 }; 235 236 #endif 237