summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Schönheit <fs@openoffice.org>2002-05-08 05:49:47 +0000
committerFrank Schönheit <fs@openoffice.org>2002-05-08 05:49:47 +0000
commitcd9a09aedc54729d7f1f0d5a495438b0b602e4e9 (patch)
tree234450306a2da7e6c99d36238c917516be02f96b
parentad7b7796eac59bef972cbea815692e009f83de0b (diff)
in preparation of #98725#: outsourced the tree and the tree model to separate files
-rw-r--r--svx/source/inc/fmexpl.hxx540
1 files changed, 276 insertions, 264 deletions
diff --git a/svx/source/inc/fmexpl.hxx b/svx/source/inc/fmexpl.hxx
index 4c07d7c52901..08b919691acb 100644
--- a/svx/source/inc/fmexpl.hxx
+++ b/svx/source/inc/fmexpl.hxx
@@ -2,9 +2,9 @@
*
* $RCSfile: fmexpl.hxx,v $
*
- * $Revision: 1.6 $
+ * $Revision: 1.7 $
*
- * last change: $Author: fs $ $Date: 2002-04-15 15:47:45 $
+ * last change: $Author: fs $ $Date: 2002-05-08 06:49:47 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -100,13 +100,18 @@
#ifndef _COM_SUN_STAR_CONTAINER_XNAMECONTAINER_HPP_
#include <com/sun/star/container/XNameContainer.hpp>
#endif
-
+#ifndef _COM_SUN_STAR_FORM_XFORM_HPP_
+#include <com/sun/star/form/XForm.hpp>
+#endif
#ifndef _COM_SUN_STAR_FORM_XFORMCOMPONENT_HPP_
#include <com/sun/star/form/XFormComponent.hpp>
#endif
#ifndef _COM_SUN_STAR_BEANS_PROPERTYCHANGEEVENT_HPP_
#include <com/sun/star/beans/PropertyChangeEvent.hpp>
#endif
+#ifndef _COM_SUN_STAR_CONTAINER_XCONTAINERLISTENER_HPP_
+#include <com/sun/star/container/XContainerListener.hpp>
+#endif
#ifndef _SVTREEBOX_HXX //autogen
@@ -148,80 +153,84 @@
#endif
class SdrObjListIter;
+class FmFormShell;
+class SdrObject;
+class FmFormModel;
+
//========================================================================
class FmEntryData;
-class FmExplInsertedHint : public SfxHint
+class FmNavInsertedHint : public SfxHint
{
FmEntryData* pEntryData;
sal_uInt32 nPos;
public:
TYPEINFO();
- FmExplInsertedHint( FmEntryData* pInsertedEntryData, sal_uInt32 nRelPos );
- virtual ~FmExplInsertedHint();
+ FmNavInsertedHint( FmEntryData* pInsertedEntryData, sal_uInt32 nRelPos );
+ virtual ~FmNavInsertedHint();
FmEntryData* GetEntryData() const { return pEntryData; }
sal_uInt32 GetRelPos() const { return nPos; }
};
//========================================================================
-class FmExplModelReplacedHint : public SfxHint
+class FmNavModelReplacedHint : public SfxHint
{
FmEntryData* pEntryData; // die Daten des Eintrages, der ein neues Model bekommen hat
public:
TYPEINFO();
- FmExplModelReplacedHint( FmEntryData* pAffectedEntryData );
- virtual ~FmExplModelReplacedHint();
+ FmNavModelReplacedHint( FmEntryData* pAffectedEntryData );
+ virtual ~FmNavModelReplacedHint();
FmEntryData* GetEntryData() const { return pEntryData; }
};
//========================================================================
-class FmExplRemovedHint : public SfxHint
+class FmNavRemovedHint : public SfxHint
{
FmEntryData* pEntryData;
public:
TYPEINFO();
- FmExplRemovedHint( FmEntryData* pInsertedEntryData );
- virtual ~FmExplRemovedHint();
+ FmNavRemovedHint( FmEntryData* pInsertedEntryData );
+ virtual ~FmNavRemovedHint();
FmEntryData* GetEntryData() const { return pEntryData; }
};
//========================================================================
-class FmExplNameChangedHint : public SfxHint
+class FmNavNameChangedHint : public SfxHint
{
FmEntryData* pEntryData;
::rtl::OUString aNewName;
public:
TYPEINFO();
- FmExplNameChangedHint( FmEntryData* pData, const ::rtl::OUString& rNewName );
- virtual ~FmExplNameChangedHint();
+ FmNavNameChangedHint( FmEntryData* pData, const ::rtl::OUString& rNewName );
+ virtual ~FmNavNameChangedHint();
FmEntryData* GetEntryData() const { return pEntryData; }
::rtl::OUString GetNewName() const { return aNewName; }
};
//========================================================================
-class FmExplClearedHint : public SfxHint
+class FmNavClearedHint : public SfxHint
{
public:
TYPEINFO();
- FmExplClearedHint();
- virtual ~FmExplClearedHint();
+ FmNavClearedHint();
+ virtual ~FmNavClearedHint();
};
//========================================================================
-class FmExplViewMarksChanged : public SfxHint
+class FmNavViewMarksChanged : public SfxHint
{
FmFormView* pView;
public:
TYPEINFO();
- FmExplViewMarksChanged(FmFormView* pWhichView) { pView = pWhichView; }
- virtual ~FmExplViewMarksChanged() {}
+ FmNavViewMarksChanged(FmFormView* pWhichView) { pView = pWhichView; }
+ virtual ~FmNavViewMarksChanged() {}
FmFormView* GetAffectedView() { return pView; }
};
@@ -272,19 +281,19 @@ public:
};
//========================================================================
-// FmExplRequestSelectHint - jemand teilt dem FmExplorer mit, dass er bestimmte Eintraege selektieren soll
+// FmNavRequestSelectHint - jemand teilt dem NavigatorTree mit, dass er bestimmte Eintraege selektieren soll
typedef FmEntryData* FmEntryDataPtr;
SV_DECL_PTRARR_SORT( FmEntryDataArray, FmEntryDataPtr, 16, 16 )
-class FmExplRequestSelectHint : public SfxHint
+class FmNavRequestSelectHint : public SfxHint
{
FmEntryDataArray m_arredToSelect;
sal_Bool m_bMixedSelection;
public:
TYPEINFO();
- FmExplRequestSelectHint() { }
- virtual ~FmExplRequestSelectHint() {}
+ FmNavRequestSelectHint() { }
+ virtual ~FmNavRequestSelectHint() {}
void SetMixedSelection(sal_Bool bMixedSelection) { m_bMixedSelection = bMixedSelection; }
sal_Bool IsMixedSelection() { return m_bMixedSelection; }
@@ -337,21 +346,18 @@ public:
void ModelReplaced(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent >& xNew, const ImageList& ilNavigatorImages);
};
+
//========================================================================
-class FmExplorerModel;
-class FmXExplPropertyChangeList : public ::cppu::WeakImplHelper2< ::com::sun::star::beans::XPropertyChangeListener,
+namespace svxform { class NavigatorTreeModel; };
+class FmXNavPropertyObserver : public ::cppu::WeakImplHelper2< ::com::sun::star::beans::XPropertyChangeListener,
::com::sun::star::container::XContainerListener>
{
- FmExplorerModel* m_pExplModel;
+ ::svxform::NavigatorTreeModel* m_pNavModel;
sal_uInt32 m_nLocks;
sal_Bool m_bCanUndo;
public:
- FmXExplPropertyChangeList(FmExplorerModel* pModel);
-
- // UNO-Anbindung
- // DECLARE_UNO3_AGG_DEFAULTS( FmXExplPropertyChangeList, UsrObject );
- // virtual sal_Bool queryInterface(::com::sun::star::uno::Uik aUik, ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rOut);
+ FmXNavPropertyObserver( ::svxform::NavigatorTreeModel* pModel );
// XEventListenerListener
virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw(::com::sun::star::uno::RuntimeException);
@@ -369,242 +375,248 @@ public:
void UnLock() { m_nLocks--; }
sal_Bool IsLocked() const { return m_nLocks != 0; }
sal_Bool CanUndo() const { return m_bCanUndo; }
- void ReleaseModel() { m_pExplModel = NULL; }
+ void ReleaseModel() { m_pNavModel = NULL; }
protected:
void Insert(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xIface, sal_Int32 nIndex);
};
-//========================================================================
-class FmFormShell;
-class SdrObject;
-class FmFormModel;
-class FmExplorerModel : public SfxBroadcaster
- ,public SfxListener
-{
- friend class FmExplorer;
- friend class FmXExplPropertyChangeList;
-
- FmEntryDataList* m_pRootList;
- FmFormShell* m_pFormShell;
- FmFormPage* m_pFormPage;
- FmFormModel* m_pFormModel;
- FmXExplPropertyChangeList* m_pPropChangeList;
-
- const ImageList m_ilNavigatorImages;
-
- void Update( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& xForms );
- FmControlData* CreateControlData( ::com::sun::star::form::XFormComponent* pFormComponent );
-
- void InsertForm(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& xForm, sal_uInt32 nRelPos);
- void RemoveForm(FmFormData* pFormData);
-
- void InsertFormComponent(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent >& xComp, sal_uInt32 nRelPos);
- void RemoveFormComponent(FmControlData* pControlData);
- void InsertSdrObj(const SdrObject* pSdrObj);
- void RemoveSdrObj(const SdrObject* pSdrObj);
-
- 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);
-
- void BroadcastMarkedObjects(const SdrMarkList& mlMarked);
- // einen RequestSelectHint mit den aktuell markierten Objekten broadcasten
- sal_Bool InsertFormComponent(FmExplRequestSelectHint& rHint, SdrObject* pObject);
- // ist ein Helper fuer vorherige, managet das Abteigen in SdrObjGroups
- // Rueckgabe sal_True, wenn das Objekt eine FormComponent ist (oder rekursiv nur aus solchen besteht)
-
-public:
- FmExplorerModel(const ImageList& ilNavigatorImages);
- virtual ~FmExplorerModel();
-
- void FillBranch( FmFormData* pParentData );
- void ClearBranch( FmFormData* pParentData );
- void Update( FmFormShell* pNewShell );
-
- void Insert( FmEntryData* pEntryData, sal_uInt32 nRelPos = LIST_APPEND,
- sal_Bool bAlterModel = sal_False );
- void Remove( FmEntryData* pEntryData, sal_Bool bAlterModel = sal_False );
-
- sal_Bool Rename( FmEntryData* pEntryData, const ::rtl::OUString& rNewText );
- sal_Bool IsNameAlreadyDefined( const ::rtl::OUString& rName, FmFormData* pParentData );
- void Clear();
- sal_Bool CheckEntry( FmEntryData* pEntryData );
- void SetModified( sal_Bool bMod=sal_True );
-
- ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > GetForms() const;
- FmFormShell* GetFormShell() const { return m_pFormShell; }
- FmFormPage* GetFormPage() const { return m_pFormPage; }
- FmEntryData* FindData( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xElement, FmEntryDataList* pDataList, sal_Bool bRecurs=sal_True );
- FmEntryData* FindData( const ::rtl::OUString& rText, FmFormData* pParentData, sal_Bool bRecurs=sal_True );
- FmEntryDataList* GetRootList() const { return m_pRootList; }
- ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > GetFormComponents( FmFormData* pParentFormData );
- SdrObject* GetSdrObj( FmControlData* pControlData );
- SdrObject* Search(SdrObjListIter& rIter, const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent >& xComp);
-
- virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
-};
-
-
-//========================================================================
-typedef SvLBoxEntry* SvLBoxEntryPtr;
-SV_DECL_PTRARR_SORT( SvLBoxEntrySortedArray, SvLBoxEntryPtr, 16, 16 )
-
-class FmExplorer : public SvTreeListBox, public SfxListener
-{
- enum DROP_ACTION { DA_SCROLLUP, DA_SCROLLDOWN, DA_EXPANDNODE };
- enum SELDATA_ITEMS { SDI_DIRTY, SDI_ALL, SDI_NORMALIZED, SDI_NORMALIZED_FORMARK };
-
- // beim Droppen will ich scrollen und Folder aufklappen koennen, dafuer :
- AutoTimer m_aDropActionTimer;
- Timer m_aSynchronizeTimer;
- // die Meta-Daten ueber meine aktuelle Selektion
- SvLBoxEntrySortedArray m_arrCurrentSelection;
- // die Images, die ich brauche (und an FormDatas und EntryDatas weiterreiche)
- ImageList m_ilNavigatorImages;
-
- ::svxform::OControlExchangeHelper m_aControlExchange;
-
- ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > m_xORB;
- FmExplorerModel* m_pExplModel;
- SvLBoxEntry* m_pRootEntry;
- SvLBoxEntry* m_pEditEntry;
-
- sal_uInt32 nEditEvent;
-
- Image m_aCollapsedNodeImg;
- Image m_aExpandedNodeImg;
- Image m_aRootImg;
-
- SELDATA_ITEMS m_sdiState;
- Point m_aTimerTriggered; // die Position, an der der DropTimer angeschaltet wurde
- DROP_ACTION m_aDropActionType;
-
- sal_uInt16 m_nSelectLock;
- sal_uInt16 m_nFormsSelected;
- sal_uInt16 m_nControlsSelected;
- sal_uInt16 m_nHiddenControls; // (die Zahl geht in m_nControlsSelected mit ein)
-
- unsigned short m_aTimerCounter;
-
- sal_Bool m_bShellOrPageChanged:1; // wird in jedem Update(FmFormShell*) auf sal_True gesetzt
- sal_Bool m_bDragDataDirty:1; // dito
- sal_Bool m_bPrevSelectionMixed:1;
- sal_Bool m_bMarkingObjects:1; // wenn das sal_True ist, brauche ich auf die RequestSelectHints nicht reagieren
- sal_Bool m_bRootSelected:1;
- sal_Bool m_bInitialUpdate:1; // bin ich das erste Mal im Update ?
-
-
- void Update();
- sal_Bool IsDeleteAllowed();
- FmControlData* NewControl( const ::rtl::OUString& rServiceName, SvLBoxEntry* pParentEntry, sal_Bool bEditName = sal_True );
- void NewForm( SvLBoxEntry* pParentEntry );
- SvLBoxEntry* Insert( FmEntryData* pEntryData, sal_uInt32 nRelPos=LIST_APPEND );
- void Remove( FmEntryData* pEntryData );
-
-
- void CollectSelectionData(SELDATA_ITEMS sdiHow);
- // sammelt in m_arrCurrentSelection die aktuell selektierten Eintraege, normalisiert die Liste wenn verlangt
- // SDI_NORMALIZED bedeutet einfach, dass alle Eintraege, die schon einen selektierten Vorfahren haben, nicht mit gesammelt
- // werden.
- // SDI_NORMALIZED_FORMARK bedeutet, dass wie bei SDI_NORMALIZED verfahren wird, aber Eintraege, deren direktes Elter nicht
- // selektiert ist, aufgenommen werden (unabhaengig vom Status weiterer Vorfahren), desgleichen Formulare, die selektiert sind,
- // unabhaengig vom Status irgendwelcher Vorfahren
- // Bei beiden Normalized-Modi enthalten die m_nFormsSelected, ... die richtige Anzahl, auch wenn nicht alle dieser Eintraege
- // in m_arrCurrentSelection landen.
- // SDI_DIRTY ist natuerlich nicht erlaubt als Parameter
-
- // ein einziges Interface fuer alle selektierten Eintraege zusammensetzen
- void ShowSelectionProperties(sal_Bool bForce = sal_False);
- // alle selektierten Elemnte loeschen
- void DeleteSelection();
-
- void SynchronizeSelection(FmEntryDataArray& arredToSelect);
- // nach dem Aufruf dieser Methode sind genau die Eintraege selektiert, die in dem Array bezeichnet sind
- void SynchronizeSelection();
- // macht das selbe, nimmt die MarkList der ::com::sun::star::sdbcx::View
- void SynchronizeMarkList();
- // umgekehrte Richtung von SynchronizeMarkList : markiert in der ::com::sun::star::sdbcx::View alle der aktuellen Selektion entsprechenden Controls
-
- // im Select aktualisiere ich normalerweise die Marklist der zugehoerigen ::com::sun::star::sdbcx::View, mit folgenden Funktionen
- // kann ich das Locking dieses Verhaltens steuern
- void LockSelectionHandling() { ++m_nSelectLock; }
- void UnlockSelectionHandling() { --m_nSelectLock; }
- sal_Bool IsSelectionHandlingLocked() const { return m_nSelectLock>0; }
-
- sal_Bool IsHiddenControl(FmEntryData* pEntryData);
-
- DECL_LINK( OnEdit, void* );
- DECL_LINK( OnDropActionTimer, void* );
-
- DECL_LINK(OnEntrySelDesel, FmExplorer*);
- DECL_LINK(OnSynchronizeTimer, void*);
-
-protected:
- virtual void Command( const CommandEvent& rEvt );
-
- virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt );
- virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt );
- virtual void StartDrag( sal_Int8 nAction, const Point& rPosPixel );
-
- sal_Int8 implAcceptDrop( sal_Int8 _nAction, const Point& _rDropPos );
-
-public:
- FmExplorer(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _xORB, Window* pParent );
- virtual ~FmExplorer();
-
- void Clear();
- void Update( FmFormShell* pFormShell );
- void MarkViewObj( FmFormData* pFormData, sal_Bool bMark, sal_Bool bDeep = sal_False );
- void MarkViewObj( FmControlData* pControlData, sal_Bool bMarkHandles, sal_Bool bMark );
- void UnmarkAllViewObj();
-
- sal_Bool IsFormEntry( SvLBoxEntry* pEntry );
- sal_Bool IsFormComponentEntry( SvLBoxEntry* pEntry );
-
- ::rtl::OUString GenerateName( FmEntryData* pEntryData );
-
- FmExplorerModel* GetExplModel() const { return m_pExplModel; }
- SvLBoxEntry* FindEntry( FmEntryData* pEntryData );
-
- virtual sal_Bool EditedEntry( SvLBoxEntry* pEntry, const XubString& rNewText );
- virtual sal_Bool Select( SvLBoxEntry* pEntry, sal_Bool bSelect=sal_True );
- virtual sal_Bool EditingEntry( SvLBoxEntry* pEntry, Selection& );
- virtual void MouseButtonUp( const MouseEvent& rMEvt );
- virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
- virtual void KeyInput( const KeyEvent& rKEvt );
-};
-
-
-//========================================================================
-class FmFormShell;
-class FmExplorerWin : public SfxDockingWindow, public SfxControllerItem
-{
-private:
- FmExplorer* m_pFmExplorer;
-
-protected:
- virtual void Resize();
- virtual sal_Bool Close();
- virtual void GetFocus();
- virtual Size CalcDockingSize( SfxChildAlignment );
- virtual SfxChildAlignment CheckAlignment( SfxChildAlignment, SfxChildAlignment );
-
-public:
- FmExplorerWin( SfxBindings *pBindings, SfxChildWindow *pMgr,
- Window* pParent );
- virtual ~FmExplorerWin();
-
- void Update( FmFormShell* pFormShell );
- void StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState );
- void FillInfo( SfxChildWinInfo& rInfo ) const;
-};
-
-//========================================================================
-class FmExplorerWinMgr : public SfxChildWindow
+//............................................................................
+namespace svxform
{
-public:
- FmExplorerWinMgr( Window *pParent, sal_uInt16 nId, SfxBindings *pBindings,
- SfxChildWinInfo *pInfo );
- SFX_DECL_CHILDWINDOW( FmExplorerWinMgr );
-};
+//............................................................................
+
+ //========================================================================
+ class NavigatorTreeModel : public SfxBroadcaster
+ ,public SfxListener
+ {
+ friend class NavigatorTree;
+ friend class FmXNavPropertyObserver;
+
+ FmEntryDataList* m_pRootList;
+ FmFormShell* m_pFormShell;
+ FmFormPage* m_pFormPage;
+ FmFormModel* m_pFormModel;
+ FmXNavPropertyObserver* m_pPropChangeList;
+
+ const ImageList m_ilNavigatorImages;
+
+ void Update( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& xForms );
+ FmControlData* CreateControlData( ::com::sun::star::form::XFormComponent* pFormComponent );
+
+ void InsertForm(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& xForm, sal_uInt32 nRelPos);
+ void RemoveForm(FmFormData* pFormData);
+
+ void InsertFormComponent(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent >& xComp, sal_uInt32 nRelPos);
+ void RemoveFormComponent(FmControlData* pControlData);
+ void InsertSdrObj(const SdrObject* pSdrObj);
+ void RemoveSdrObj(const SdrObject* pSdrObj);
+
+ 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);
+
+ void BroadcastMarkedObjects(const SdrMarkList& mlMarked);
+ // einen RequestSelectHint mit den aktuell markierten Objekten broadcasten
+ sal_Bool InsertFormComponent(FmNavRequestSelectHint& rHint, SdrObject* pObject);
+ // ist ein Helper fuer vorherige, managet das Abteigen in SdrObjGroups
+ // Rueckgabe sal_True, wenn das Objekt eine FormComponent ist (oder rekursiv nur aus solchen besteht)
+
+ public:
+ NavigatorTreeModel(const ImageList& ilNavigatorImages);
+ virtual ~NavigatorTreeModel();
+
+ void FillBranch( FmFormData* pParentData );
+ void ClearBranch( FmFormData* pParentData );
+ void Update( FmFormShell* pNewShell );
+
+ void Insert( FmEntryData* pEntryData, sal_uInt32 nRelPos = LIST_APPEND,
+ sal_Bool bAlterModel = sal_False );
+ void Remove( FmEntryData* pEntryData, sal_Bool bAlterModel = sal_False );
+
+ sal_Bool Rename( FmEntryData* pEntryData, const ::rtl::OUString& rNewText );
+ sal_Bool IsNameAlreadyDefined( const ::rtl::OUString& rName, FmFormData* pParentData );
+ void Clear();
+ sal_Bool CheckEntry( FmEntryData* pEntryData );
+ void SetModified( sal_Bool bMod=sal_True );
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > GetForms() const;
+ FmFormShell* GetFormShell() const { return m_pFormShell; }
+ FmFormPage* GetFormPage() const { return m_pFormPage; }
+ FmEntryData* FindData( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xElement, FmEntryDataList* pDataList, sal_Bool bRecurs=sal_True );
+ FmEntryData* FindData( const ::rtl::OUString& rText, FmFormData* pParentData, sal_Bool bRecurs=sal_True );
+ FmEntryDataList* GetRootList() const { return m_pRootList; }
+ ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > GetFormComponents( FmFormData* pParentFormData );
+ SdrObject* GetSdrObj( FmControlData* pControlData );
+ SdrObject* Search(SdrObjListIter& rIter, const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent >& xComp);
+
+ virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
+ };
+
+ //========================================================================
+ typedef SvLBoxEntry* SvLBoxEntryPtr;
+ SV_DECL_PTRARR_SORT( SvLBoxEntrySortedArray, SvLBoxEntryPtr, 16, 16 )
+
+ class NavigatorTree : public SvTreeListBox, public SfxListener
+ {
+ enum DROP_ACTION { DA_SCROLLUP, DA_SCROLLDOWN, DA_EXPANDNODE };
+ enum SELDATA_ITEMS { SDI_DIRTY, SDI_ALL, SDI_NORMALIZED, SDI_NORMALIZED_FORMARK };
+
+ // beim Droppen will ich scrollen und Folder aufklappen koennen, dafuer :
+ AutoTimer m_aDropActionTimer;
+ Timer m_aSynchronizeTimer;
+ // die Meta-Daten ueber meine aktuelle Selektion
+ SvLBoxEntrySortedArray m_arrCurrentSelection;
+ // die Images, die ich brauche (und an FormDatas und EntryDatas weiterreiche)
+ ImageList m_ilNavigatorImages;
+
+ ::svxform::OControlExchangeHelper m_aControlExchange;
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > m_xORB;
+ NavigatorTreeModel* m_pNavModel;
+ SvLBoxEntry* m_pRootEntry;
+ SvLBoxEntry* m_pEditEntry;
+
+ sal_uInt32 nEditEvent;
+
+ Image m_aCollapsedNodeImg;
+ Image m_aExpandedNodeImg;
+ Image m_aRootImg;
+
+ SELDATA_ITEMS m_sdiState;
+ Point m_aTimerTriggered; // die Position, an der der DropTimer angeschaltet wurde
+ DROP_ACTION m_aDropActionType;
+
+ sal_uInt16 m_nSelectLock;
+ sal_uInt16 m_nFormsSelected;
+ sal_uInt16 m_nControlsSelected;
+ sal_uInt16 m_nHiddenControls; // (die Zahl geht in m_nControlsSelected mit ein)
+
+ unsigned short m_aTimerCounter;
+
+ sal_Bool m_bShellOrPageChanged:1; // wird in jedem Update(FmFormShell*) auf sal_True gesetzt
+ sal_Bool m_bDragDataDirty:1; // dito
+ sal_Bool m_bPrevSelectionMixed:1;
+ sal_Bool m_bMarkingObjects:1; // wenn das sal_True ist, brauche ich auf die RequestSelectHints nicht reagieren
+ sal_Bool m_bRootSelected:1;
+ sal_Bool m_bInitialUpdate:1; // bin ich das erste Mal im Update ?
+
+
+ void Update();
+ sal_Bool IsDeleteAllowed();
+ FmControlData* NewControl( const ::rtl::OUString& rServiceName, SvLBoxEntry* pParentEntry, sal_Bool bEditName = sal_True );
+ void NewForm( SvLBoxEntry* pParentEntry );
+ SvLBoxEntry* Insert( FmEntryData* pEntryData, sal_uInt32 nRelPos=LIST_APPEND );
+ void Remove( FmEntryData* pEntryData );
+
+
+ void CollectSelectionData(SELDATA_ITEMS sdiHow);
+ // sammelt in m_arrCurrentSelection die aktuell selektierten Eintraege, normalisiert die Liste wenn verlangt
+ // SDI_NORMALIZED bedeutet einfach, dass alle Eintraege, die schon einen selektierten Vorfahren haben, nicht mit gesammelt
+ // werden.
+ // SDI_NORMALIZED_FORMARK bedeutet, dass wie bei SDI_NORMALIZED verfahren wird, aber Eintraege, deren direktes Elter nicht
+ // selektiert ist, aufgenommen werden (unabhaengig vom Status weiterer Vorfahren), desgleichen Formulare, die selektiert sind,
+ // unabhaengig vom Status irgendwelcher Vorfahren
+ // Bei beiden Normalized-Modi enthalten die m_nFormsSelected, ... die richtige Anzahl, auch wenn nicht alle dieser Eintraege
+ // in m_arrCurrentSelection landen.
+ // SDI_DIRTY ist natuerlich nicht erlaubt als Parameter
+
+ // ein einziges Interface fuer alle selektierten Eintraege zusammensetzen
+ void ShowSelectionProperties(sal_Bool bForce = sal_False);
+ // alle selektierten Elemnte loeschen
+ void DeleteSelection();
+
+ void SynchronizeSelection(FmEntryDataArray& arredToSelect);
+ // nach dem Aufruf dieser Methode sind genau die Eintraege selektiert, die in dem Array bezeichnet sind
+ void SynchronizeSelection();
+ // macht das selbe, nimmt die MarkList der ::com::sun::star::sdbcx::View
+ void SynchronizeMarkList();
+ // umgekehrte Richtung von SynchronizeMarkList : markiert in der ::com::sun::star::sdbcx::View alle der aktuellen Selektion entsprechenden Controls
+
+ // im Select aktualisiere ich normalerweise die Marklist der zugehoerigen ::com::sun::star::sdbcx::View, mit folgenden Funktionen
+ // kann ich das Locking dieses Verhaltens steuern
+ void LockSelectionHandling() { ++m_nSelectLock; }
+ void UnlockSelectionHandling() { --m_nSelectLock; }
+ sal_Bool IsSelectionHandlingLocked() const { return m_nSelectLock>0; }
+
+ sal_Bool IsHiddenControl(FmEntryData* pEntryData);
+
+ DECL_LINK( OnEdit, void* );
+ DECL_LINK( OnDropActionTimer, void* );
+
+ DECL_LINK(OnEntrySelDesel, NavigatorTree*);
+ DECL_LINK(OnSynchronizeTimer, void*);
+
+ protected:
+ virtual void Command( const CommandEvent& rEvt );
+
+ virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt );
+ virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt );
+ virtual void StartDrag( sal_Int8 nAction, const Point& rPosPixel );
+
+ public:
+ NavigatorTree(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _xORB, Window* pParent );
+ virtual ~NavigatorTree();
+
+ void Clear();
+ void Update( FmFormShell* pFormShell );
+ void MarkViewObj( FmFormData* pFormData, sal_Bool bMark, sal_Bool bDeep = sal_False );
+ void MarkViewObj( FmControlData* pControlData, sal_Bool bMarkHandles, sal_Bool bMark );
+ void UnmarkAllViewObj();
+
+ sal_Bool IsFormEntry( SvLBoxEntry* pEntry );
+ sal_Bool IsFormComponentEntry( SvLBoxEntry* pEntry );
+
+ ::rtl::OUString GenerateName( FmEntryData* pEntryData );
+
+ NavigatorTreeModel* GetNavModel() const { return m_pNavModel; }
+ SvLBoxEntry* FindEntry( FmEntryData* pEntryData );
+
+ virtual sal_Bool EditedEntry( SvLBoxEntry* pEntry, const XubString& rNewText );
+ virtual sal_Bool Select( SvLBoxEntry* pEntry, sal_Bool bSelect=sal_True );
+ virtual sal_Bool EditingEntry( SvLBoxEntry* pEntry, Selection& );
+ virtual void MouseButtonUp( const MouseEvent& rMEvt );
+ virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
+ virtual void KeyInput( const KeyEvent& rKEvt );
+
+ private:
+ sal_Int8 implAcceptDrop( sal_Int8 _nAction, const Point& _rDropPos );
+ // fills m_aControlExchange in preparation of a DnD or clipboard operation
+ sal_Bool implPrepareExchange( );
+ };
+
+ //========================================================================
+ class NavigatorFrame : public SfxDockingWindow, public SfxControllerItem
+ {
+ private:
+ ::svxform::NavigatorTree* m_pNavigatorTree;
+
+ protected:
+ virtual void Resize();
+ virtual sal_Bool Close();
+ virtual void GetFocus();
+ virtual Size CalcDockingSize( SfxChildAlignment );
+ virtual SfxChildAlignment CheckAlignment( SfxChildAlignment, SfxChildAlignment );
+
+ public:
+ NavigatorFrame( SfxBindings *pBindings, SfxChildWindow *pMgr,
+ Window* pParent );
+ virtual ~NavigatorFrame();
+
+ void Update( FmFormShell* pFormShell );
+ void StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState );
+ void FillInfo( SfxChildWinInfo& rInfo ) const;
+ };
+
+ //========================================================================
+ class NavigatorFrameManager : public SfxChildWindow
+ {
+ public:
+ NavigatorFrameManager( Window *pParent, sal_uInt16 nId, SfxBindings *pBindings,
+ SfxChildWinInfo *pInfo );
+ SFX_DECL_CHILDWINDOW( NavigatorFrameManager );
+ };
+
+//............................................................................
+} // namespace svxform
+//............................................................................
#endif // _SVX_FMEXPL_HXX