update credits
[LibreOffice.git] / svx / source / inc / fmexpl.hxx
blob67e4adf6ca2442235dd2b4cd61d806268174169f
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
19 #ifndef _SVX_FMEXPL_HXX
20 #define _SVX_FMEXPL_HXX
22 #include <svl/lstner.hxx>
23 #include <svl/brdcst.hxx>
24 #include <vcl/window.hxx>
25 #include <sfx2/childwin.hxx>
26 #include <svl/poolitem.hxx>
27 #include <sfx2/bindings.hxx>
28 #include <sfx2/dockwin.hxx>
29 #include <sfx2/ctrlitem.hxx>
30 #include <vcl/image.hxx>
32 #include <com/sun/star/container/XNameContainer.hpp>
33 #include <com/sun/star/form/XForm.hpp>
34 #include <com/sun/star/form/XFormComponent.hpp>
35 #include <com/sun/star/beans/PropertyChangeEvent.hpp>
36 #include <com/sun/star/container/XContainerListener.hpp>
37 #include <com/sun/star/container/XContainer.hpp>
38 #include <com/sun/star/beans/XPropertyChangeListener.hpp>
39 #include <com/sun/star/container/XIndexContainer.hpp>
41 #include <svtools/treelistbox.hxx>
43 #include <vcl/dialog.hxx>
44 #include <vcl/group.hxx>
45 #include <vcl/button.hxx>
46 #include <vcl/fixed.hxx>
47 #include <vcl/edit.hxx>
48 #include <vcl/dockwin.hxx>
49 #include <svx/fmview.hxx>
51 #include "fmexch.hxx"
52 #include <vector>
53 #include <set>
55 class SdrObjListIter;
56 class FmFormShell;
57 class SdrObject;
58 class FmFormModel;
59 class FmFormView;
60 class SdrMarkList;
62 //========================================================================
63 class FmEntryData;
64 class FmNavInsertedHint : public SfxHint
66 FmEntryData* pEntryData;
67 sal_uInt32 nPos;
69 public:
70 TYPEINFO();
71 FmNavInsertedHint( FmEntryData* pInsertedEntryData, sal_uInt32 nRelPos );
72 virtual ~FmNavInsertedHint();
74 FmEntryData* GetEntryData() const { return pEntryData; }
75 sal_uInt32 GetRelPos() const { return nPos; }
78 //========================================================================
79 class FmNavModelReplacedHint : public SfxHint
81 FmEntryData* pEntryData; // die Daten des Eintrages, der ein neues Model bekommen hat
83 public:
84 TYPEINFO();
85 FmNavModelReplacedHint( FmEntryData* pAffectedEntryData );
86 virtual ~FmNavModelReplacedHint();
88 FmEntryData* GetEntryData() const { return pEntryData; }
91 //========================================================================
92 class FmNavRemovedHint : public SfxHint
94 FmEntryData* pEntryData;
96 public:
97 TYPEINFO();
98 FmNavRemovedHint( FmEntryData* pInsertedEntryData );
99 virtual ~FmNavRemovedHint();
101 FmEntryData* GetEntryData() const { return pEntryData; }
104 //========================================================================
105 class FmNavNameChangedHint : public SfxHint
107 FmEntryData* pEntryData;
108 OUString aNewName;
110 public:
111 TYPEINFO();
112 FmNavNameChangedHint( FmEntryData* pData, const OUString& rNewName );
113 virtual ~FmNavNameChangedHint();
115 FmEntryData* GetEntryData() const { return pEntryData; }
116 OUString GetNewName() const { return aNewName; }
119 //========================================================================
120 class FmNavClearedHint : public SfxHint
122 public:
123 TYPEINFO();
124 FmNavClearedHint();
125 virtual ~FmNavClearedHint();
128 //========================================================================
129 class FmNavViewMarksChanged : public SfxHint
131 FmFormView* pView;
132 public:
133 TYPEINFO();
134 FmNavViewMarksChanged(FmFormView* pWhichView) { pView = pWhichView; }
135 virtual ~FmNavViewMarksChanged() {}
137 FmFormView* GetAffectedView() { return pView; }
140 //========================================================================
141 class FmEntryDataList;
142 class FmEntryData
144 private:
145 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > m_xNormalizedIFace;
146 ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > m_xProperties;
147 ::com::sun::star::uno::Reference< ::com::sun::star::container::XChild > m_xChild;
149 protected:
150 Image m_aNormalImage;
151 OUString aText;
153 FmEntryDataList* pChildList;
154 FmEntryData* pParent;
156 protected:
157 void newObject( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxIFace );
159 public:
160 TYPEINFO();
162 FmEntryData( FmEntryData* pParentData, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rIFace );
163 FmEntryData( const FmEntryData& rEntryData );
164 virtual ~FmEntryData();
166 void Clear();
167 void SetText( const OUString& rText ){ aText = rText; }
168 void SetParent( FmEntryData* pParentData ){ pParent = pParentData; }
170 const Image& GetNormalImage() const { return m_aNormalImage; }
172 OUString GetText() const { return aText; }
173 FmEntryData* GetParent() const { return pParent; }
174 FmEntryDataList* GetChildList() const { return pChildList; }
176 virtual sal_Bool IsEqualWithoutChildren( FmEntryData* pEntryData );
177 virtual FmEntryData* Clone() = 0;
179 // note that the interface returned is normalized, i.e. querying the given XInterface of the object
180 // for XInterface must return the interface itself.
181 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& GetElement() const
183 return m_xNormalizedIFace;
186 const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& GetPropertySet() const
188 return m_xProperties;
191 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XChild >& GetChildIFace() const
193 return m_xChild;
197 //========================================================================
198 typedef ::std::vector< FmEntryData* > FmEntryDataBaseList;
200 class FmEntryDataList
202 private:
203 FmEntryDataBaseList maEntryDataList;
205 public:
206 FmEntryDataList();
207 virtual ~FmEntryDataList();
209 FmEntryData* at( size_t Index )
210 { return ( Index < maEntryDataList.size() ) ? maEntryDataList[ Index ] : NULL; }
212 size_t size() const { return maEntryDataList.size(); }
213 FmEntryData* remove( FmEntryData* pItem );
214 void insert( FmEntryData* pItem, size_t Index );
215 void clear();
218 //========================================================================
219 // FmNavRequestSelectHint - jemand teilt dem NavigatorTree mit, dass er bestimmte Eintraege selektieren soll
221 typedef std::set<FmEntryData*> FmEntryDataArray;
223 class FmNavRequestSelectHint : public SfxHint
225 FmEntryDataArray m_arredToSelect;
226 sal_Bool m_bMixedSelection;
227 public:
228 TYPEINFO();
229 FmNavRequestSelectHint() { }
230 virtual ~FmNavRequestSelectHint() {}
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.clear(); }
236 FmEntryDataArray& GetItems() { return m_arredToSelect; }
239 //========================================================================
240 class FmFormData : public FmEntryData
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;
245 public:
246 TYPEINFO();
248 FmFormData(
249 const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& _rxForm,
250 const ImageList& _rNormalImages,
251 FmFormData* _pParent = NULL
254 FmFormData( const FmFormData& rFormData );
255 virtual ~FmFormData();
257 void SetForm( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& xForm )
259 m_xForm = xForm;
260 m_xContainer = m_xContainer.query( m_xForm );
261 newObject( m_xForm );
264 const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& GetFormIface() const { return m_xForm; }
265 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainer >& GetContainer() const { return m_xContainer; }
267 virtual sal_Bool IsEqualWithoutChildren( FmEntryData* pEntryData );
268 virtual FmEntryData* Clone();
272 //========================================================================
273 class FmControlData : public FmEntryData
275 ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent > m_xFormComponent;
277 Image GetImage(const ImageList& ilNavigatorImages) const;
279 public:
280 TYPEINFO();
282 FmControlData(
283 const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent >& _rxComponent,
284 const ImageList& _rNormalImages,
285 FmFormData* _pParent
287 FmControlData( const FmControlData& rControlData );
288 virtual ~FmControlData();
290 const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent >& GetFormComponent() const { return m_xFormComponent; }
291 virtual sal_Bool IsEqualWithoutChildren( FmEntryData* pEntryData );
292 virtual FmEntryData* Clone();
294 void ModelReplaced(
295 const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent >& _rxNew,
296 const ImageList& _rNormalImages
301 //========================================================================
302 //............................................................................
303 namespace svxform
305 //............................................................................
307 class NavigatorTreeModel;
308 //========================================================================
309 // class OFormComponentObserver
310 //========================================================================
311 class OFormComponentObserver
312 :public ::cppu::WeakImplHelper2 < ::com::sun::star::beans::XPropertyChangeListener
313 , ::com::sun::star::container::XContainerListener
316 ::svxform::NavigatorTreeModel* m_pNavModel;
317 sal_uInt32 m_nLocks;
318 sal_Bool m_bCanUndo;
320 public:
321 OFormComponentObserver( ::svxform::NavigatorTreeModel* pModel );
323 // XEventListenerListener
324 virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw(::com::sun::star::uno::RuntimeException);
326 // ::com::sun::star::beans::XPropertyChangeListener
327 virtual void SAL_CALL propertyChange(const ::com::sun::star::beans::PropertyChangeEvent& evt) throw(::com::sun::star::uno::RuntimeException);
329 // ::com::sun::star::container::XContainerListener
331 virtual void SAL_CALL elementInserted(const ::com::sun::star::container::ContainerEvent& rEvent) throw(::com::sun::star::uno::RuntimeException);
332 virtual void SAL_CALL elementReplaced(const ::com::sun::star::container::ContainerEvent& rEvent) throw(::com::sun::star::uno::RuntimeException);
333 virtual void SAL_CALL elementRemoved(const ::com::sun::star::container::ContainerEvent& rEvent) throw(::com::sun::star::uno::RuntimeException);
335 void Lock() { m_nLocks++; }
336 void UnLock() { m_nLocks--; }
337 sal_Bool IsLocked() const { return m_nLocks != 0; }
338 sal_Bool CanUndo() const { return m_bCanUndo; }
339 void ReleaseModel() { m_pNavModel = NULL; }
340 protected:
341 void Insert(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xIface, sal_Int32 nIndex);
342 void Remove( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxElement );
345 //========================================================================
346 //= NavigatorTreeModel
347 //========================================================================
348 class NavigatorTreeModel : public SfxBroadcaster
349 ,public SfxListener
351 friend class NavigatorTree;
352 friend class OFormComponentObserver;
354 FmEntryDataList* m_pRootList;
355 FmFormShell* m_pFormShell;
356 FmFormPage* m_pFormPage;
357 FmFormModel* m_pFormModel;
358 OFormComponentObserver* m_pPropChangeList;
360 ImageList m_aNormalImages;
362 void UpdateContent( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForms >& xForms );
363 FmControlData* CreateControlData( ::com::sun::star::form::XFormComponent* pFormComponent );
365 void InsertForm(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& xForm, sal_uInt32 nRelPos);
366 void RemoveForm(FmFormData* pFormData);
368 void InsertFormComponent(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent >& xComp, sal_uInt32 nRelPos);
369 void RemoveFormComponent(FmControlData* pControlData);
370 void InsertSdrObj(const SdrObject* pSdrObj);
371 void RemoveSdrObj(const SdrObject* pSdrObj);
373 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);
375 void BroadcastMarkedObjects(const SdrMarkList& mlMarked);
376 // einen RequestSelectHint mit den aktuell markierten Objekten broadcasten
377 sal_Bool InsertFormComponent(FmNavRequestSelectHint& rHint, SdrObject* pObject);
378 // ist ein Helper fuer vorherige, managet das Abteigen in SdrObjGroups
379 // Rueckgabe sal_True, wenn das Objekt eine FormComponent ist (oder rekursiv nur aus solchen besteht)
381 public:
382 NavigatorTreeModel( const ImageList& _rNormalImages );
383 virtual ~NavigatorTreeModel();
385 void FillBranch( FmFormData* pParentData );
386 void ClearBranch( FmFormData* pParentData );
387 void UpdateContent( FmFormShell* pNewShell );
389 void Insert( FmEntryData* pEntryData, sal_uLong nRelPos = LIST_APPEND,
390 sal_Bool bAlterModel = sal_False );
391 void Remove( FmEntryData* pEntryData, sal_Bool bAlterModel = sal_False );
393 sal_Bool Rename( FmEntryData* pEntryData, const OUString& rNewText );
395 void Clear();
396 void SetModified( sal_Bool bMod=sal_True );
398 ::com::sun::star::uno::Reference< ::com::sun::star::form::XForms > GetForms() const;
399 FmFormShell* GetFormShell() const { return m_pFormShell; }
400 FmFormPage* GetFormPage() const { return m_pFormPage; }
401 FmEntryData* FindData( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xElement, FmEntryDataList* pDataList, sal_Bool bRecurs=sal_True );
402 FmEntryData* FindData( const OUString& rText, FmFormData* pParentData, sal_Bool bRecurs=sal_True );
403 FmEntryDataList* GetRootList() const { return m_pRootList; }
404 ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > GetFormComponents( FmFormData* pParentFormData );
405 SdrObject* Search(SdrObjListIter& rIter, const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent >& xComp);
407 virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
410 //========================================================================
411 typedef std::set<SvTreeListEntry*> SvLBoxEntrySortedArray;
413 class NavigatorTree : public SvTreeListBox, public SfxListener
415 enum DROP_ACTION { DA_SCROLLUP, DA_SCROLLDOWN, DA_EXPANDNODE };
416 enum SELDATA_ITEMS { SDI_DIRTY, SDI_ALL, SDI_NORMALIZED, SDI_NORMALIZED_FORMARK };
418 // beim Droppen will ich scrollen und Folder aufklappen koennen, dafuer :
419 AutoTimer m_aDropActionTimer;
420 Timer m_aSynchronizeTimer;
421 // die Meta-Daten ueber meine aktuelle Selektion
422 SvLBoxEntrySortedArray m_arrCurrentSelection;
423 // the entries which, in the view, are currently marked as "cut" (painted semi-transparent)
424 ListBoxEntrySet m_aCutEntries;
425 // die Images, die ich brauche (und an FormDatas und EntryDatas weiterreiche)
426 ImageList m_aNavigatorImages;
428 ::svxform::OControlExchangeHelper m_aControlExchange;
430 ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > m_xORB;
431 NavigatorTreeModel* m_pNavModel;
432 SvTreeListEntry* m_pRootEntry;
433 SvTreeListEntry* m_pEditEntry;
435 sal_uLong nEditEvent;
437 SELDATA_ITEMS m_sdiState;
438 Point m_aTimerTriggered; // die Position, an der der DropTimer angeschaltet wurde
439 DROP_ACTION m_aDropActionType;
441 sal_uInt16 m_nSelectLock;
442 sal_uInt16 m_nFormsSelected;
443 sal_uInt16 m_nControlsSelected;
444 sal_uInt16 m_nHiddenControls; // (die Zahl geht in m_nControlsSelected mit ein)
446 unsigned short m_aTimerCounter;
448 sal_Bool m_bDragDataDirty : 1; // dito
449 sal_Bool m_bPrevSelectionMixed : 1;
450 sal_Bool m_bMarkingObjects : 1; // wenn das sal_True ist, brauche ich auf die RequestSelectHints nicht reagieren
451 sal_Bool m_bRootSelected : 1;
452 sal_Bool m_bInitialUpdate : 1; // bin ich das erste Mal im UpdateContent ?
453 sal_Bool m_bKeyboardCut : 1;
456 void UpdateContent();
457 FmControlData* NewControl( const OUString& rServiceName, SvTreeListEntry* pParentEntry, sal_Bool bEditName = sal_True );
458 void NewForm( SvTreeListEntry* pParentEntry );
459 SvTreeListEntry* Insert( FmEntryData* pEntryData, sal_uLong nRelPos=LIST_APPEND );
460 void Remove( FmEntryData* pEntryData );
463 void CollectSelectionData(SELDATA_ITEMS sdiHow);
464 // sammelt in m_arrCurrentSelection die aktuell selektierten Eintraege, normalisiert die Liste wenn verlangt
465 // SDI_NORMALIZED bedeutet einfach, dass alle Eintraege, die schon einen selektierten Vorfahren haben, nicht mit gesammelt
466 // werden.
467 // SDI_NORMALIZED_FORMARK bedeutet, dass wie bei SDI_NORMALIZED verfahren wird, aber Eintraege, deren direktes Elter nicht
468 // selektiert ist, aufgenommen werden (unabhaengig vom Status weiterer Vorfahren), desgleichen Formulare, die selektiert sind,
469 // unabhaengig vom Status irgendwelcher Vorfahren
470 // Bei beiden Normalized-Modi enthalten die m_nFormsSelected, ... die richtige Anzahl, auch wenn nicht alle dieser Eintraege
471 // in m_arrCurrentSelection landen.
472 // SDI_DIRTY ist natuerlich nicht erlaubt als Parameter
474 // ein einziges Interface fuer alle selektierten Eintraege zusammensetzen
475 void ShowSelectionProperties(sal_Bool bForce = sal_False);
476 // alle selektierten Elemnte loeschen
477 void DeleteSelection();
479 void SynchronizeSelection(FmEntryDataArray& arredToSelect);
480 // nach dem Aufruf dieser Methode sind genau die Eintraege selektiert, die in dem Array bezeichnet sind
481 void SynchronizeSelection();
482 // macht das selbe, nimmt die MarkList der ::com::sun::star::sdbcx::View
483 void SynchronizeMarkList();
484 // umgekehrte Richtung von SynchronizeMarkList : markiert in der ::com::sun::star::sdbcx::View alle der aktuellen Selektion entsprechenden Controls
486 void CollectObjects(FmFormData* pFormData, sal_Bool bDeep, ::std::set< ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent > >& _rObjects);
488 // im Select aktualisiere ich normalerweise die Marklist der zugehoerigen ::com::sun::star::sdbcx::View, mit folgenden Funktionen
489 // kann ich das Locking dieses Verhaltens steuern
490 void LockSelectionHandling() { ++m_nSelectLock; }
491 void UnlockSelectionHandling() { --m_nSelectLock; }
492 sal_Bool IsSelectionHandlingLocked() const { return m_nSelectLock>0; }
494 sal_Bool IsHiddenControl(FmEntryData* pEntryData);
496 DECL_LINK( OnEdit, void* );
497 DECL_LINK( OnDropActionTimer, void* );
499 DECL_LINK(OnEntrySelDesel, NavigatorTree*);
500 DECL_LINK(OnSynchronizeTimer, void*);
502 DECL_LINK( OnClipboardAction, void* );
504 protected:
505 virtual void Command( const CommandEvent& rEvt );
507 virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt );
508 virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt );
509 virtual void StartDrag( sal_Int8 nAction, const Point& rPosPixel );
511 public:
512 NavigatorTree(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _xORB, Window* pParent );
513 virtual ~NavigatorTree();
515 void Clear();
516 void UpdateContent( FmFormShell* pFormShell );
517 void MarkViewObj( FmFormData* pFormData, sal_Bool bMark, sal_Bool bDeep = sal_False );
518 void MarkViewObj( FmControlData* pControlData, sal_Bool bMarkHandles, sal_Bool bMark );
519 void UnmarkAllViewObj();
521 sal_Bool IsFormEntry( SvTreeListEntry* pEntry );
522 sal_Bool IsFormComponentEntry( SvTreeListEntry* pEntry );
524 OUString GenerateName( FmEntryData* pEntryData );
526 NavigatorTreeModel* GetNavModel() const { return m_pNavModel; }
527 SvTreeListEntry* FindEntry( FmEntryData* pEntryData );
529 virtual sal_Bool EditedEntry( SvTreeListEntry* pEntry, const OUString& rNewText );
530 virtual sal_Bool Select( SvTreeListEntry* pEntry, sal_Bool bSelect=sal_True );
531 virtual sal_Bool EditingEntry( SvTreeListEntry* pEntry, Selection& );
532 virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
533 virtual void KeyInput( const KeyEvent& rKEvt );
535 virtual void ModelHasRemoved( SvTreeListEntry* _pEntry );
537 using SvTreeListBox::Insert;
538 using SvTreeListBox::ExecuteDrop;
539 using SvTreeListBox::Select;
540 using SvTreeListBox::Notify;
542 private:
543 sal_Int8 implAcceptDataTransfer( const DataFlavorExVector& _rFlavors, sal_Int8 _nAction, const Point& _rDropPos, sal_Bool _bDnD );
544 sal_Int8 implAcceptDataTransfer( const DataFlavorExVector& _rFlavors, sal_Int8 _nAction, SvTreeListEntry* _pTargetEntry, sal_Bool _bDnD );
546 sal_Int8 implExecuteDataTransfer( const OControlTransferData& _rData, sal_Int8 _nAction, const Point& _rDropPos, sal_Bool _bDnD );
547 sal_Int8 implExecuteDataTransfer( const OControlTransferData& _rData, sal_Int8 _nAction, SvTreeListEntry* _pTargetEntry, sal_Bool _bDnD );
549 // check if a cut, copy, or drag operation can be started in the current situation
550 sal_Bool implAllowExchange( sal_Int8 _nAction, sal_Bool* _pHasNonHidden = NULL );
551 // check if a paste with the current clipboard content can be accepted
552 sal_Bool implAcceptPaste( );
554 // fills m_aControlExchange in preparation of a DnD or clipboard operation
555 sal_Bool implPrepareExchange( sal_Int8 _nAction );
557 void doPaste();
558 void doCopy();
559 void doCut();
561 sal_Bool doingKeyboardCut( ) const { return m_bKeyboardCut; }
564 //========================================================================
565 class NavigatorFrame : public SfxDockingWindow, public SfxControllerItem
567 private:
568 ::svxform::NavigatorTree* m_pNavigatorTree;
570 protected:
571 virtual void Resize();
572 virtual sal_Bool Close();
573 virtual void GetFocus();
574 virtual Size CalcDockingSize( SfxChildAlignment );
575 virtual SfxChildAlignment CheckAlignment( SfxChildAlignment, SfxChildAlignment );
577 using SfxDockingWindow::StateChanged;
579 public:
580 NavigatorFrame( SfxBindings *pBindings, SfxChildWindow *pMgr,
581 Window* pParent );
582 virtual ~NavigatorFrame();
584 void UpdateContent( FmFormShell* pFormShell );
585 void StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState );
586 void FillInfo( SfxChildWinInfo& rInfo ) const;
589 //========================================================================
590 class SVX_DLLPUBLIC NavigatorFrameManager : public SfxChildWindow
592 public:
593 SVX_DLLPRIVATE NavigatorFrameManager( Window *pParent, sal_uInt16 nId, SfxBindings *pBindings,
594 SfxChildWinInfo *pInfo );
595 SFX_DECL_CHILDWINDOW( NavigatorFrameManager );
598 //............................................................................
599 } // namespace svxform
600 //............................................................................
602 #endif // _SVX_FMEXPL_HXX
604 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */