1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 #ifndef _SVX_FMEXPL_HXX 28 #define _SVX_FMEXPL_HXX 29 30 #include <svl/lstner.hxx> 31 #include <svl/brdcst.hxx> 32 #include <vcl/window.hxx> 33 #include <sfx2/childwin.hxx> 34 #include <svl/poolitem.hxx> 35 #include <sfx2/bindings.hxx> 36 #include <sfx2/dockwin.hxx> 37 #include <sfx2/ctrlitem.hxx> 38 #include <vcl/image.hxx> 39 40 /** === begin UNO includes === **/ 41 #include <com/sun/star/container/XNameContainer.hpp> 42 #include <com/sun/star/form/XForm.hpp> 43 #include <com/sun/star/form/XFormComponent.hpp> 44 #include <com/sun/star/beans/PropertyChangeEvent.hpp> 45 #include <com/sun/star/container/XContainerListener.hpp> 46 #include <com/sun/star/container/XContainer.hpp> 47 #include <com/sun/star/beans/XPropertyChangeListener.hpp> 48 #include <com/sun/star/container/XIndexContainer.hpp> 49 /** === end UNO includes === **/ 50 51 #include <svtools/svtreebx.hxx> 52 53 #include <vcl/dialog.hxx> 54 #include <vcl/group.hxx> 55 #include <vcl/button.hxx> 56 #include <vcl/fixed.hxx> 57 #include <vcl/edit.hxx> 58 #include <vcl/dockwin.hxx> 59 #include <svx/fmview.hxx> 60 61 #include "fmexch.hxx" 62 63 class SdrObjListIter; 64 class FmFormShell; 65 class SdrObject; 66 class FmFormModel; 67 class FmFormView; 68 class SdrMarkList; 69 70 //======================================================================== 71 class FmEntryData; 72 class FmNavInsertedHint : public SfxHint 73 { 74 FmEntryData* pEntryData; 75 sal_uInt32 nPos; 76 77 public: 78 TYPEINFO(); 79 FmNavInsertedHint( FmEntryData* pInsertedEntryData, sal_uInt32 nRelPos ); 80 virtual ~FmNavInsertedHint(); 81 82 FmEntryData* GetEntryData() const { return pEntryData; } 83 sal_uInt32 GetRelPos() const { return nPos; } 84 }; 85 86 //======================================================================== 87 class FmNavModelReplacedHint : public SfxHint 88 { 89 FmEntryData* pEntryData; // die Daten des Eintrages, der ein neues Model bekommen hat 90 91 public: 92 TYPEINFO(); 93 FmNavModelReplacedHint( FmEntryData* pAffectedEntryData ); 94 virtual ~FmNavModelReplacedHint(); 95 96 FmEntryData* GetEntryData() const { return pEntryData; } 97 }; 98 99 //======================================================================== 100 class FmNavRemovedHint : public SfxHint 101 { 102 FmEntryData* pEntryData; 103 104 public: 105 TYPEINFO(); 106 FmNavRemovedHint( FmEntryData* pInsertedEntryData ); 107 virtual ~FmNavRemovedHint(); 108 109 FmEntryData* GetEntryData() const { return pEntryData; } 110 }; 111 112 //======================================================================== 113 class FmNavNameChangedHint : public SfxHint 114 { 115 FmEntryData* pEntryData; 116 ::rtl::OUString aNewName; 117 118 public: 119 TYPEINFO(); 120 FmNavNameChangedHint( FmEntryData* pData, const ::rtl::OUString& rNewName ); 121 virtual ~FmNavNameChangedHint(); 122 123 FmEntryData* GetEntryData() const { return pEntryData; } 124 ::rtl::OUString GetNewName() const { return aNewName; } 125 }; 126 127 //======================================================================== 128 class FmNavClearedHint : public SfxHint 129 { 130 public: 131 TYPEINFO(); 132 FmNavClearedHint(); 133 virtual ~FmNavClearedHint(); 134 }; 135 136 //======================================================================== 137 class FmNavViewMarksChanged : public SfxHint 138 { 139 FmFormView* pView; 140 public: 141 TYPEINFO(); 142 FmNavViewMarksChanged(FmFormView* pWhichView) { pView = pWhichView; } 143 virtual ~FmNavViewMarksChanged() {} 144 145 FmFormView* GetAffectedView() { return pView; } 146 }; 147 148 //======================================================================== 149 class FmEntryDataList; 150 class FmEntryData 151 { 152 private: 153 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > m_xNormalizedIFace; 154 ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > m_xProperties; 155 ::com::sun::star::uno::Reference< ::com::sun::star::container::XChild > m_xChild; 156 157 protected: 158 Image m_aNormalImage; 159 Image m_aHCImage; 160 ::rtl::OUString aText; 161 162 FmEntryDataList* pChildList; 163 FmEntryData* pParent; 164 165 protected: 166 void newObject( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxIFace ); 167 168 public: 169 TYPEINFO(); 170 171 FmEntryData( FmEntryData* pParentData, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rIFace ); 172 FmEntryData( const FmEntryData& rEntryData ); 173 virtual ~FmEntryData(); 174 175 void Clear(); 176 void SetText( const ::rtl::OUString& rText ){ aText = rText; } 177 void SetParent( FmEntryData* pParentData ){ pParent = pParentData; } 178 179 const Image& GetNormalImage() const { return m_aNormalImage; } 180 const Image& GetHCImage() const { return m_aHCImage; } 181 182 ::rtl::OUString GetText() const { return aText; } 183 FmEntryData* GetParent() const { return pParent; } 184 FmEntryDataList* GetChildList() const { return pChildList; } 185 186 virtual sal_Bool IsEqualWithoutChilds( FmEntryData* pEntryData ); 187 virtual FmEntryData* Clone() = 0; 188 189 // note that the interface returned is normalized, i.e. querying the given XInterface of the object 190 // for XInterface must return the interface itself. 191 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& GetElement() const 192 { 193 return m_xNormalizedIFace; 194 } 195 196 const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& GetPropertySet() const 197 { 198 return m_xProperties; 199 } 200 201 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XChild >& GetChildIFace() const 202 { 203 return m_xChild; 204 } 205 }; 206 207 //======================================================================== 208 DECLARE_LIST( FmEntryDataBaseList, FmEntryData* ) 209 210 class FmEntryDataList : public FmEntryDataBaseList 211 { 212 public: 213 FmEntryDataList(); 214 virtual ~FmEntryDataList(); 215 }; 216 217 //======================================================================== 218 // FmNavRequestSelectHint - jemand teilt dem NavigatorTree mit, dass er bestimmte Eintraege selektieren soll 219 220 typedef FmEntryData* FmEntryDataPtr; 221 SV_DECL_PTRARR_SORT( FmEntryDataArray, FmEntryDataPtr, 16, 16 ) 222 223 class FmNavRequestSelectHint : public SfxHint 224 { 225 FmEntryDataArray m_arredToSelect; 226 sal_Bool m_bMixedSelection; 227 public: 228 TYPEINFO(); 229 FmNavRequestSelectHint() { } 230 virtual ~FmNavRequestSelectHint() {} 231 232 void SetMixedSelection(sal_Bool bMixedSelection) { m_bMixedSelection = bMixedSelection; } 233 sal_Bool IsMixedSelection() { return m_bMixedSelection; } 234 void AddItem(FmEntryData* pEntry) { m_arredToSelect.Insert(pEntry); } 235 void ClearItems() { m_arredToSelect.Remove(sal_uInt16(0), m_arredToSelect.Count()); } 236 FmEntryDataArray& GetItems() { return m_arredToSelect; } 237 }; 238 239 //======================================================================== 240 class FmFormData : public FmEntryData 241 { 242 ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm > m_xForm; 243 ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainer > m_xContainer; 244 245 public: 246 TYPEINFO(); 247 248 FmFormData( 249 const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& _rxForm, 250 const ImageList& _rNormalImages, 251 const ImageList& _rHCImages, 252 FmFormData* _pParent = NULL 253 ); 254 255 FmFormData( const FmFormData& rFormData ); 256 virtual ~FmFormData(); 257 258 void SetForm( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& xForm ) 259 { 260 m_xForm = xForm; 261 m_xContainer = m_xContainer.query( m_xForm ); 262 newObject( m_xForm ); 263 } 264 265 const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& GetFormIface() const { return m_xForm; } 266 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainer >& GetContainer() const { return m_xContainer; } 267 268 virtual sal_Bool IsEqualWithoutChilds( FmEntryData* pEntryData ); 269 virtual FmEntryData* Clone(); 270 }; 271 272 273 //======================================================================== 274 class FmControlData : public FmEntryData 275 { 276 ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent > m_xFormComponent; 277 278 Image GetImage(const ImageList& ilNavigatorImages) const; 279 280 public: 281 TYPEINFO(); 282 283 FmControlData( 284 const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent >& _rxComponent, 285 const ImageList& _rNormalImages, 286 const ImageList& _rHCImages, 287 FmFormData* _pParent 288 ); 289 FmControlData( const FmControlData& rControlData ); 290 virtual ~FmControlData(); 291 292 const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent >& GetFormComponent() const { return m_xFormComponent; } 293 virtual sal_Bool IsEqualWithoutChilds( FmEntryData* pEntryData ); 294 virtual FmEntryData* Clone(); 295 296 void ModelReplaced( 297 const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent >& _rxNew, 298 const ImageList& _rNormalImages, 299 const ImageList& _rHCImages 300 ); 301 }; 302 303 304 //======================================================================== 305 //............................................................................ 306 namespace svxform 307 { 308 //............................................................................ 309 310 class NavigatorTreeModel; 311 //======================================================================== 312 // class OFormComponentObserver 313 //======================================================================== 314 class OFormComponentObserver 315 :public ::cppu::WeakImplHelper2 < ::com::sun::star::beans::XPropertyChangeListener 316 , ::com::sun::star::container::XContainerListener 317 > 318 { 319 ::svxform::NavigatorTreeModel* m_pNavModel; 320 sal_uInt32 m_nLocks; 321 sal_Bool m_bCanUndo; 322 323 public: 324 OFormComponentObserver( ::svxform::NavigatorTreeModel* pModel ); 325 326 // XEventListenerListener 327 virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw(::com::sun::star::uno::RuntimeException); 328 329 // ::com::sun::star::beans::XPropertyChangeListener 330 virtual void SAL_CALL propertyChange(const ::com::sun::star::beans::PropertyChangeEvent& evt) throw(::com::sun::star::uno::RuntimeException); 331 332 // ::com::sun::star::container::XContainerListener 333 334 virtual void SAL_CALL elementInserted(const ::com::sun::star::container::ContainerEvent& rEvent) throw(::com::sun::star::uno::RuntimeException); 335 virtual void SAL_CALL elementReplaced(const ::com::sun::star::container::ContainerEvent& rEvent) throw(::com::sun::star::uno::RuntimeException); 336 virtual void SAL_CALL elementRemoved(const ::com::sun::star::container::ContainerEvent& rEvent) throw(::com::sun::star::uno::RuntimeException); 337 338 void Lock() { m_nLocks++; } 339 void UnLock() { m_nLocks--; } 340 sal_Bool IsLocked() const { return m_nLocks != 0; } 341 sal_Bool CanUndo() const { return m_bCanUndo; } 342 void ReleaseModel() { m_pNavModel = NULL; } 343 protected: 344 void Insert(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xIface, sal_Int32 nIndex); 345 void Remove( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxElement ); 346 }; 347 348 //======================================================================== 349 //= NavigatorTreeModel 350 //======================================================================== 351 class NavigatorTreeModel : public SfxBroadcaster 352 ,public SfxListener 353 { 354 friend class NavigatorTree; 355 friend class OFormComponentObserver; 356 357 FmEntryDataList* m_pRootList; 358 FmFormShell* m_pFormShell; 359 FmFormPage* m_pFormPage; 360 FmFormModel* m_pFormModel; 361 OFormComponentObserver* m_pPropChangeList; 362 363 ImageList m_aNormalImages; 364 ImageList m_aHCImages; 365 366 void UpdateContent( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& xForms ); 367 FmControlData* CreateControlData( ::com::sun::star::form::XFormComponent* pFormComponent ); 368 369 void InsertForm(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& xForm, sal_uInt32 nRelPos); 370 void RemoveForm(FmFormData* pFormData); 371 372 void InsertFormComponent(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent >& xComp, sal_uInt32 nRelPos); 373 void RemoveFormComponent(FmControlData* pControlData); 374 void InsertSdrObj(const SdrObject* pSdrObj); 375 void RemoveSdrObj(const SdrObject* pSdrObj); 376 377 void ReplaceFormComponent(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent >& xOld, const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent >& xNew); 378 379 void BroadcastMarkedObjects(const SdrMarkList& mlMarked); 380 // einen RequestSelectHint mit den aktuell markierten Objekten broadcasten 381 sal_Bool InsertFormComponent(FmNavRequestSelectHint& rHint, SdrObject* pObject); 382 // ist ein Helper fuer vorherige, managet das Abteigen in SdrObjGroups 383 // Rueckgabe sal_True, wenn das Objekt eine FormComponent ist (oder rekursiv nur aus solchen besteht) 384 385 public: 386 NavigatorTreeModel( const ImageList& _rNormalImages, const ImageList& _rHCImages ); 387 virtual ~NavigatorTreeModel(); 388 389 void FillBranch( FmFormData* pParentData ); 390 void ClearBranch( FmFormData* pParentData ); 391 void UpdateContent( FmFormShell* pNewShell ); 392 393 void Insert( FmEntryData* pEntryData, sal_uLong nRelPos = LIST_APPEND, 394 sal_Bool bAlterModel = sal_False ); 395 void Remove( FmEntryData* pEntryData, sal_Bool bAlterModel = sal_False ); 396 397 sal_Bool Rename( FmEntryData* pEntryData, const ::rtl::OUString& rNewText ); 398 sal_Bool IsNameAlreadyDefined( const ::rtl::OUString& rName, FmFormData* pParentData ); 399 void Clear(); 400 sal_Bool CheckEntry( FmEntryData* pEntryData ); 401 void SetModified( sal_Bool bMod=sal_True ); 402 403 ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > GetForms() const; 404 FmFormShell* GetFormShell() const { return m_pFormShell; } 405 FmFormPage* GetFormPage() const { return m_pFormPage; } 406 FmEntryData* FindData( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xElement, FmEntryDataList* pDataList, sal_Bool bRecurs=sal_True ); 407 FmEntryData* FindData( const ::rtl::OUString& rText, FmFormData* pParentData, sal_Bool bRecurs=sal_True ); 408 FmEntryDataList* GetRootList() const { return m_pRootList; } 409 ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > GetFormComponents( FmFormData* pParentFormData ); 410 SdrObject* GetSdrObj( FmControlData* pControlData ); 411 SdrObject* Search(SdrObjListIter& rIter, const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent >& xComp); 412 413 virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); 414 }; 415 416 //======================================================================== 417 typedef SvLBoxEntry* SvLBoxEntryPtr; 418 SV_DECL_PTRARR_SORT( SvLBoxEntrySortedArray, SvLBoxEntryPtr, 16, 16 ) 419 420 class NavigatorTree : public SvTreeListBox, public SfxListener 421 { 422 enum DROP_ACTION { DA_SCROLLUP, DA_SCROLLDOWN, DA_EXPANDNODE }; 423 enum SELDATA_ITEMS { SDI_DIRTY, SDI_ALL, SDI_NORMALIZED, SDI_NORMALIZED_FORMARK }; 424 425 // beim Droppen will ich scrollen und Folder aufklappen koennen, dafuer : 426 AutoTimer m_aDropActionTimer; 427 Timer m_aSynchronizeTimer; 428 // die Meta-Daten ueber meine aktuelle Selektion 429 SvLBoxEntrySortedArray m_arrCurrentSelection; 430 // the entries which, in the view, are currently marked as "cut" (painted semi-transparent) 431 ListBoxEntrySet m_aCutEntries; 432 // die Images, die ich brauche (und an FormDatas und EntryDatas weiterreiche) 433 ImageList m_aNavigatorImages; 434 ImageList m_aNavigatorImagesHC; 435 436 ::svxform::OControlExchangeHelper m_aControlExchange; 437 438 ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > m_xORB; 439 NavigatorTreeModel* m_pNavModel; 440 SvLBoxEntry* m_pRootEntry; 441 SvLBoxEntry* m_pEditEntry; 442 443 sal_uLong nEditEvent; 444 445 SELDATA_ITEMS m_sdiState; 446 Point m_aTimerTriggered; // die Position, an der der DropTimer angeschaltet wurde 447 DROP_ACTION m_aDropActionType; 448 449 sal_uInt16 m_nSelectLock; 450 sal_uInt16 m_nFormsSelected; 451 sal_uInt16 m_nControlsSelected; 452 sal_uInt16 m_nHiddenControls; // (die Zahl geht in m_nControlsSelected mit ein) 453 454 unsigned short m_aTimerCounter; 455 456 sal_Bool m_bDragDataDirty : 1; // dito 457 sal_Bool m_bPrevSelectionMixed : 1; 458 sal_Bool m_bMarkingObjects : 1; // wenn das sal_True ist, brauche ich auf die RequestSelectHints nicht reagieren 459 sal_Bool m_bRootSelected : 1; 460 sal_Bool m_bInitialUpdate : 1; // bin ich das erste Mal im UpdateContent ? 461 sal_Bool m_bKeyboardCut : 1; 462 463 464 void UpdateContent(); 465 sal_Bool IsDeleteAllowed(); 466 FmControlData* NewControl( const ::rtl::OUString& rServiceName, SvLBoxEntry* pParentEntry, sal_Bool bEditName = sal_True ); 467 void NewForm( SvLBoxEntry* pParentEntry ); 468 SvLBoxEntry* Insert( FmEntryData* pEntryData, sal_uLong nRelPos=LIST_APPEND ); 469 void Remove( FmEntryData* pEntryData ); 470 471 472 void CollectSelectionData(SELDATA_ITEMS sdiHow); 473 // sammelt in m_arrCurrentSelection die aktuell selektierten Eintraege, normalisiert die Liste wenn verlangt 474 // SDI_NORMALIZED bedeutet einfach, dass alle Eintraege, die schon einen selektierten Vorfahren haben, nicht mit gesammelt 475 // werden. 476 // SDI_NORMALIZED_FORMARK bedeutet, dass wie bei SDI_NORMALIZED verfahren wird, aber Eintraege, deren direktes Elter nicht 477 // selektiert ist, aufgenommen werden (unabhaengig vom Status weiterer Vorfahren), desgleichen Formulare, die selektiert sind, 478 // unabhaengig vom Status irgendwelcher Vorfahren 479 // Bei beiden Normalized-Modi enthalten die m_nFormsSelected, ... die richtige Anzahl, auch wenn nicht alle dieser Eintraege 480 // in m_arrCurrentSelection landen. 481 // SDI_DIRTY ist natuerlich nicht erlaubt als Parameter 482 483 // ein einziges Interface fuer alle selektierten Eintraege zusammensetzen 484 void ShowSelectionProperties(sal_Bool bForce = sal_False); 485 // alle selektierten Elemnte loeschen 486 void DeleteSelection(); 487 488 void SynchronizeSelection(FmEntryDataArray& arredToSelect); 489 // nach dem Aufruf dieser Methode sind genau die Eintraege selektiert, die in dem Array bezeichnet sind 490 void SynchronizeSelection(); 491 // macht das selbe, nimmt die MarkList der ::com::sun::star::sdbcx::View 492 void SynchronizeMarkList(); 493 // umgekehrte Richtung von SynchronizeMarkList : markiert in der ::com::sun::star::sdbcx::View alle der aktuellen Selektion entsprechenden Controls 494 495 void CollectObjects(FmFormData* pFormData, sal_Bool bDeep, ::std::set< ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent > >& _rObjects); 496 497 // im Select aktualisiere ich normalerweise die Marklist der zugehoerigen ::com::sun::star::sdbcx::View, mit folgenden Funktionen 498 // kann ich das Locking dieses Verhaltens steuern 499 void LockSelectionHandling() { ++m_nSelectLock; } 500 void UnlockSelectionHandling() { --m_nSelectLock; } 501 sal_Bool IsSelectionHandlingLocked() const { return m_nSelectLock>0; } 502 503 sal_Bool IsHiddenControl(FmEntryData* pEntryData); 504 505 DECL_LINK( OnEdit, void* ); 506 DECL_LINK( OnDropActionTimer, void* ); 507 508 DECL_LINK(OnEntrySelDesel, NavigatorTree*); 509 DECL_LINK(OnSynchronizeTimer, void*); 510 511 DECL_LINK( OnClipboardAction, void* ); 512 513 protected: 514 virtual void Command( const CommandEvent& rEvt ); 515 516 virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt ); 517 virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt ); 518 virtual void StartDrag( sal_Int8 nAction, const Point& rPosPixel ); 519 520 public: 521 NavigatorTree(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _xORB, Window* pParent ); 522 virtual ~NavigatorTree(); 523 524 void Clear(); 525 void UpdateContent( FmFormShell* pFormShell ); 526 void MarkViewObj( FmFormData* pFormData, sal_Bool bMark, sal_Bool bDeep = sal_False ); 527 void MarkViewObj( FmControlData* pControlData, sal_Bool bMarkHandles, sal_Bool bMark ); 528 void UnmarkAllViewObj(); 529 530 sal_Bool IsFormEntry( SvLBoxEntry* pEntry ); 531 sal_Bool IsFormComponentEntry( SvLBoxEntry* pEntry ); 532 533 ::rtl::OUString GenerateName( FmEntryData* pEntryData ); 534 535 NavigatorTreeModel* GetNavModel() const { return m_pNavModel; } 536 SvLBoxEntry* FindEntry( FmEntryData* pEntryData ); 537 538 virtual sal_Bool EditedEntry( SvLBoxEntry* pEntry, const XubString& rNewText ); 539 virtual sal_Bool Select( SvLBoxEntry* pEntry, sal_Bool bSelect=sal_True ); 540 virtual sal_Bool EditingEntry( SvLBoxEntry* pEntry, Selection& ); 541 virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); 542 virtual void KeyInput( const KeyEvent& rKEvt ); 543 544 virtual void ModelHasRemoved( SvListEntry* _pEntry ); 545 546 using SvTreeListBox::Insert; 547 using SvTreeListBox::ExecuteDrop; 548 using SvTreeListBox::Select; 549 using SvTreeListBox::Notify; 550 551 private: 552 sal_Int8 implAcceptDataTransfer( const DataFlavorExVector& _rFlavors, sal_Int8 _nAction, const Point& _rDropPos, sal_Bool _bDnD ); 553 sal_Int8 implAcceptDataTransfer( const DataFlavorExVector& _rFlavors, sal_Int8 _nAction, SvLBoxEntry* _pTargetEntry, sal_Bool _bDnD ); 554 555 sal_Int8 implExecuteDataTransfer( const OControlTransferData& _rData, sal_Int8 _nAction, const Point& _rDropPos, sal_Bool _bDnD ); 556 sal_Int8 implExecuteDataTransfer( const OControlTransferData& _rData, sal_Int8 _nAction, SvLBoxEntry* _pTargetEntry, sal_Bool _bDnD ); 557 558 // check if a cut, copy, or drag operation can be started in the current situation 559 sal_Bool implAllowExchange( sal_Int8 _nAction, sal_Bool* _pHasNonHidden = NULL ); 560 // check if a paste with the current clipboard content can be accepted 561 sal_Bool implAcceptPaste( ); 562 563 // fills m_aControlExchange in preparation of a DnD or clipboard operation 564 sal_Bool implPrepareExchange( sal_Int8 _nAction ); 565 566 void doPaste(); 567 void doCopy(); 568 void doCut(); 569 570 sal_Bool doingKeyboardCut( ) const { return m_bKeyboardCut; } 571 }; 572 573 //======================================================================== 574 class NavigatorFrame : public SfxDockingWindow, public SfxControllerItem 575 { 576 private: 577 ::svxform::NavigatorTree* m_pNavigatorTree; 578 579 protected: 580 virtual void Resize(); 581 virtual sal_Bool Close(); 582 virtual void GetFocus(); 583 virtual Size CalcDockingSize( SfxChildAlignment ); 584 virtual SfxChildAlignment CheckAlignment( SfxChildAlignment, SfxChildAlignment ); 585 586 using SfxDockingWindow::StateChanged; 587 588 public: 589 NavigatorFrame( SfxBindings *pBindings, SfxChildWindow *pMgr, 590 Window* pParent ); 591 virtual ~NavigatorFrame(); 592 593 void UpdateContent( FmFormShell* pFormShell ); 594 void StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ); 595 void FillInfo( SfxChildWinInfo& rInfo ) const; 596 }; 597 598 //======================================================================== 599 class SVX_DLLPUBLIC NavigatorFrameManager : public SfxChildWindow 600 { 601 public: 602 SVX_DLLPRIVATE NavigatorFrameManager( Window *pParent, sal_uInt16 nId, SfxBindings *pBindings, 603 SfxChildWinInfo *pInfo ); 604 SFX_DECL_CHILDWINDOW( NavigatorFrameManager ); 605 }; 606 607 //............................................................................ 608 } // namespace svxform 609 //............................................................................ 610 611 #endif // _SVX_FMEXPL_HXX 612 613