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