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