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 DBAUI_APPDETAILPAGEHELPER_HXX 24 #define DBAUI_APPDETAILPAGEHELPER_HXX 25 26 #include <vector> 27 28 #ifndef _RTL_USTRING_HXX_ 29 #include <rtl/ustring.hxx> 30 #endif 31 #ifndef _COM_SUN_STAR_SDBC_XDATABASEMETADATA_HPP_ 32 #include <com/sun/star/sdbc/XDatabaseMetaData.hpp> 33 #endif 34 #ifndef _COM_SUN_STAR_SDB_APPLICATION_NAMEDDATABASEOBJECT_HPP_ 35 #include <com/sun/star/sdb/application/NamedDatabaseObject.hpp> 36 #endif 37 #ifndef _COM_SUN_STAR_UCB_XCONTENT_HPP_ 38 #include <com/sun/star/ucb/XContent.hpp> 39 #endif 40 #ifndef DBAUI_APPELEMENTTYPE_HXX 41 #include "AppElementType.hxx" 42 #endif 43 #ifndef _SVTREEBOX_HXX 44 #include <svtools/svtreebx.hxx> 45 #endif 46 #ifndef SVTOOLS_DOCUMENTINFOPREVIEW_HXX 47 #include <svtools/DocumentInfoPreview.hxx> 48 #endif 49 #ifndef _SV_FIXED_HXX 50 #include <vcl/fixed.hxx> 51 #endif 52 #ifndef _SV_TOOLBOX_HXX 53 #include <vcl/toolbox.hxx> 54 #endif 55 #ifndef _SV_CVTGRF_HXX 56 #include <vcl/cvtgrf.hxx> 57 #endif 58 #ifndef _SV_GRAPH_HXX 59 #include <vcl/graph.hxx> 60 #endif 61 #ifndef _GRFMGR_HXX 62 #include <svtools/grfmgr.hxx> 63 #endif 64 #include "callbacks.hxx" 65 #include <memory> 66 67 namespace com{ namespace sun { namespace star { namespace awt { class XWindow; } } } } 68 namespace com{ namespace sun { namespace star { namespace frame { class XFrame; } } } } 69 namespace com{ namespace sun { namespace star { namespace io { class XPersist; } } } } 70 71 #define ELEMENT_COUNT size_t(E_ELEMENT_TYPE_COUNT) 72 73 namespace dbaui 74 { 75 class OAppBorderWindow; 76 class DBTreeListBox; 77 78 class OPreviewWindow : public Window 79 { 80 GraphicObject m_aGraphicObj; 81 Rectangle m_aPreviewRect; 82 83 /** gets the graphic cnter rect 84 @param rGraphic 85 the graphic 86 @param rResultRect 87 the resulting rectangle 88 89 @return 90 <TRUE/> when successfull 91 */ 92 sal_Bool ImplGetGraphicCenterRect( const Graphic& rGraphic, Rectangle& rResultRect ) const; 93 void ImplInitSettings( sal_Bool bFont, sal_Bool bForeground, sal_Bool bBackground ); 94 protected: 95 virtual void DataChanged(const DataChangedEvent& rDCEvt); 96 public: 97 OPreviewWindow(Window* _pParent); 98 99 // window overloads 100 virtual void Paint(const Rectangle& rRect); 101 setGraphic(const Graphic & _rGraphic)102 void setGraphic(const Graphic& _rGraphic ) { m_aGraphicObj.SetGraphic(_rGraphic); } 103 }; 104 //================================================================== 105 // A helper class for the controls in the detail page. 106 // Combines general functionality. 107 //================================================================== 108 class OAppDetailPageHelper : public Window 109 { 110 DBTreeListBox* m_pLists[ELEMENT_COUNT]; 111 OAppBorderWindow& m_rBorderWin; 112 FixedLine m_aFL; 113 ToolBox m_aTBPreview; 114 Window m_aBorder; 115 OPreviewWindow m_aPreview; 116 ::svtools::ODocumentInfoPreview 117 m_aDocumentInfo; 118 Window* m_pTablePreview; 119 ::std::auto_ptr<PopupMenu> m_aMenu; 120 PreviewMode m_ePreviewMode; 121 ::com::sun::star::uno::Reference < ::com::sun::star::frame::XFrame > 122 m_xFrame; 123 ::com::sun::star::uno::Reference < ::com::sun::star::io::XPersist > 124 m_xDocInfo; 125 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > 126 m_xWindow; 127 128 /// returns the index of the visible control 129 int getVisibleControlIndex() const; 130 131 /** sorts the entries in the tree list box. 132 @param _nPos 133 Which list should be sorted. 134 @param _eSortMode 135 How should be sorted. 136 */ 137 void sort(int _nPos,SvSortMode _eSortMode ); 138 139 /** retrieves the resource ids of the images representing elements of the given type 140 */ 141 void getElementIcons( ElementType _eType, sal_uInt16& _rImageId, sal_uInt16& _rHighContrastImageId ); 142 143 /** fills the names in the listbox 144 @param _xContainer 145 This can either be the queries, forms or report names. 146 @param _eType 147 the type of elements which are being filled 148 @param _nImageId 149 the resource id of the image to use for non-container entries 150 @param _nHighContrastImageId 151 the resource id of the high contrast image to use for non-container entries 152 @param _pParent 153 The parent of the entries to be inserted. 154 */ 155 void fillNames( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& _xContainer, 156 const ElementType _eType, 157 const sal_uInt16 _nImageId, 158 const sal_uInt16 _nHighContrastImageId, 159 SvLBoxEntry* _pParent ); 160 161 /** sets the detail page 162 @param _pWindow 163 The control which should be visible. 164 */ 165 void setDetailPage(Window* _pWindow); 166 167 /** sets all HandleCallbacks 168 @param _pTreeView 169 The newly created DBTreeListBox 170 @param _rImage 171 the resource id of the default icon 172 @param _rImageHC 173 the resource id of the default icon (HC version) 174 @return 175 The new tree. 176 */ 177 DBTreeListBox* createTree( DBTreeListBox* _pTreeView, const Image& _rImage, const Image& _rImageHC ); 178 179 /** creates the tree and sets all HandleCallbacks 180 @param _nHelpId 181 The help id of the control 182 @param _nCollapsedBitmap 183 The image to use for tree entries. 184 @param _rImageHC 185 The image to use in high contrast mode. 186 @return 187 The new tree. 188 */ 189 DBTreeListBox* createSimpleTree( const rtl::OString& _sHelpId, const Image& _rImage, const Image& _rImageHC ); 190 191 DECL_LINK( OnEntryDoubleClick, SvTreeListBox* ); 192 DECL_LINK( OnEntrySelChange, void* ); 193 194 DECL_LINK( OnCutEntry, void* ); 195 DECL_LINK( OnCopyEntry, void* ); 196 DECL_LINK( OnPasteEntry, void* ); 197 DECL_LINK( OnDeleteEntry, void* ); 198 199 DECL_LINK(PreviewChangeHdl, void*); 200 // click a TB slot 201 DECL_LINK(OnDropdownClickHdl, ToolBox*); 202 getBorderWin() const203 inline OAppBorderWindow& getBorderWin() const { return m_rBorderWin; } 204 void ImplInitSettings(); 205 206 public: 207 OAppDetailPageHelper(Window* _pParent,OAppBorderWindow& _rBorderWin,PreviewMode _ePreviewMode); 208 virtual ~OAppDetailPageHelper(); 209 210 // window overloads 211 virtual void Resize(); 212 virtual void KeyInput( const KeyEvent& rKEvt ); 213 214 sal_Bool isCutAllowed(); 215 sal_Bool isCopyAllowed(); 216 sal_Bool isPasteAllowed(); 217 void copy(); 218 void cut(); 219 void paste(); 220 221 /** creates the tables page 222 @param _xConnection 223 The connection to get the table names 224 */ 225 void createTablesPage(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _xConnection); 226 227 /** creates the page for the specific type. 228 @param _eType 229 The type which should be created. E_TABLE isn't allowed. 230 @param _xContainer 231 The container of the elements to be inserted. 232 */ 233 void createPage(ElementType _eType,const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& _xContainer); 234 235 /** returns the current visible tree list box 236 */ getCurrentView() const237 inline DBTreeListBox* getCurrentView() const 238 { 239 ElementType eType = getElementType(); 240 return (eType != E_NONE ) ? m_pLists[static_cast<sal_Int32>(eType)] : NULL; 241 } 242 243 /// select all entries in the visible control 244 void selectAll(); 245 246 /// returns <TRUE/> if it sorts ascending 247 sal_Bool isSortUp() const; 248 249 /// sorts all entries ascending 250 void sortDown(); 251 252 /// sorts all entries descending 253 void sortUp(); 254 255 /** returns the element names which are selected 256 @param _rNames 257 The list will be filled. 258 */ 259 void getSelectionElementNames( ::std::vector< ::rtl::OUString>& _rNames ) const; 260 261 /** describes the current selection for the given control 262 */ 263 void describeCurrentSelectionForControl( 264 const Control& _rControl, 265 ::com::sun::star::uno::Sequence< ::com::sun::star::sdb::application::NamedDatabaseObject >& _out_rSelectedObjects 266 ); 267 268 /** describes the current selection for the given ElementType 269 */ 270 void describeCurrentSelectionForType( 271 const ElementType _eType, 272 ::com::sun::star::uno::Sequence< ::com::sun::star::sdb::application::NamedDatabaseObject >& _out_rSelectedObjects 273 ); 274 275 /** select all names on the currently selected container. Non existence names where ignored. 276 * 277 * \param _aNames the element names 278 */ 279 void selectElements(const ::com::sun::star::uno::Sequence< ::rtl::OUString>& _aNames); 280 281 /** return the qualified name. 282 @param _pEntry 283 The entry of a table, or query, form, report to get the qualified name. 284 If the entry is <NULL/>, the first selected is chosen. 285 @return 286 the qualified name 287 */ 288 ::rtl::OUString getQualifiedName( SvLBoxEntry* _pEntry ) const; 289 290 /// return the element of currently select entry 291 ElementType getElementType() const; 292 293 /// returns the count of selected entries 294 sal_Int32 getSelectionCount(); 295 296 /// returns the count of entries 297 sal_Int32 getElementCount(); 298 299 /** returns if an entry is a leaf 300 @param _pEntry 301 The entry to check 302 @return 303 <TRUE/> if the entry is a leaf, otherwise <FALSE/> 304 */ 305 bool isLeaf(SvLBoxEntry* _pEntry) const; 306 307 /** returns if one of the selected entries is a leaf 308 @return 309 <TRUE/> if the entry is a leaf, otherwise <FALSE/> 310 */ 311 sal_Bool isALeafSelected() const; 312 313 SvLBoxEntry* getEntry( const Point& _aPosPixel ) const; 314 315 /// clears the detail pages 316 void clearPages(); 317 318 /// returns <TRUE/> when a detail page was filled 319 sal_Bool isFilled() const; 320 321 /** adds a new object to the detail page. 322 @param _eType 323 The type where the entry shold be appended. 324 @param _rName 325 The name of the object to be inserted 326 @param _rObject 327 The object to add. 328 @param _rxConn 329 If we insert a table, the connection must be set. 330 */ 331 SvLBoxEntry* elementAdded(ElementType eType 332 ,const ::rtl::OUString& _rName 333 ,const ::com::sun::star::uno::Any& _rObject ); 334 335 /** replaces a objects name with a new one 336 @param _eType 337 The type where the entry shold be appended. 338 @param _rOldName 339 The old name of the object to be replaced 340 @param _rNewName 341 The new name of the object to be replaced 342 @param _rxConn 343 If we insert a table, the connection must be set. 344 */ 345 void elementReplaced(ElementType eType 346 ,const ::rtl::OUString& _rOldName 347 ,const ::rtl::OUString& _rNewName ); 348 349 /** removes an element from the detail page. 350 @param _eType 351 The type where the entry shold be appended. 352 @param _rName 353 The name of the element to be removed. 354 @param _rxConn 355 If we remove a table, the connection must be set. 356 */ 357 void elementRemoved(ElementType _eType 358 ,const ::rtl::OUString& _rName ); 359 360 361 /// returns the preview mode 362 PreviewMode getPreviewMode(); 363 364 /// <TRUE/> if the preview is enabled 365 sal_Bool isPreviewEnabled(); 366 367 /** switches to the given preview mode 368 @param _eMode 369 the mode to set for the preview 370 @param _bForce 371 Force the preview to be resetted 372 */ 373 void switchPreview(PreviewMode _eMode,sal_Bool _bForce = sal_False); 374 375 /** shows the Preview of the content when it is enabled. 376 @param _xContent 377 The content which must support the "preview" command. 378 */ 379 void showPreview(const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XContent >& _xContent); 380 381 /** shows the Preview of a table or query 382 @param _sDataSourceName 383 the name of the data source 384 @param _sName 385 the name of table or query 386 @param _bTable 387 <TRUE/> if it is a table, otherwise <FALSE/> 388 @return void 389 */ 390 void showPreview( const ::rtl::OUString& _sDataSourceName, 391 const ::rtl::OUString& _sName, 392 sal_Bool _bTable); 393 394 protected: 395 void DataChanged( const DataChangedEvent& rDCEvt ); 396 }; 397 } 398 #endif // DBAUI_APPDETAILPAGEHELPER_HXX 399 400