xref: /trunk/main/svx/inc/svx/fmgridif.hxx (revision 3334a7e6)
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_FMGRIDIF_HXX
24 #define _SVX_FMGRIDIF_HXX
25 
26 #include "svx/svxdllapi.h"
27 
28 #include <com/sun/star/view/XSelectionSupplier.hpp>
29 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
30 #include <com/sun/star/container/XEnumerationAccess.hpp>
31 #include <com/sun/star/container/XContainer.hpp>
32 #include <com/sun/star/container/XContainerListener.hpp>
33 #include <com/sun/star/sdbc/XRowSetListener.hpp>
34 #include <com/sun/star/sdb/XRowSetSupplier.hpp>
35 #include <com/sun/star/form/XReset.hpp>
36 #include <com/sun/star/form/XBoundComponent.hpp>
37 #include <com/sun/star/form/XLoadListener.hpp>
38 #include <com/sun/star/form/XGridControl.hpp>
39 #include <com/sun/star/form/XGridPeer.hpp>
40 #include <com/sun/star/frame/XDispatchProvider.hpp>
41 #include <com/sun/star/frame/XStatusListener.hpp>
42 #include <com/sun/star/frame/XDispatchProviderInterception.hpp>
43 #include <com/sun/star/view/XSelectionChangeListener.hpp>
44 #include <com/sun/star/util/XModeSelector.hpp>
45 #include <com/sun/star/util/XModifyListener.hpp>
46 #include <com/sun/star/util/XModifyBroadcaster.hpp>
47 
48 #include <tools/wintypes.hxx>
49 #include <toolkit/controls/unocontrol.hxx>
50 #include <toolkit/awt/vclxwindow.hxx>
51 #include <comphelper/uno3.hxx>
52 #include <cppuhelper/implbase10.hxx>
53 
54 #if ! defined(INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_19)
55 #define INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_19
56 #define COMPHELPER_IMPLBASE_INTERFACE_NUMBER 19
57 #include <comphelper/implbase_var.hxx>
58 #endif
59 
60 
61 class DbGridColumn;
62 
63 class OWeakSubObject : public ::cppu::OWeakObject
64 {
65 protected:
66 	::cppu::OWeakObject&	m_rParent;
67 
68 public:
OWeakSubObject(::cppu::OWeakObject & rParent)69 	OWeakSubObject(::cppu::OWeakObject& rParent) : m_rParent(rParent) { }
70 
acquire()71 	virtual void SAL_CALL acquire() throw() { m_rParent.acquire(); }
release()72 	virtual void SAL_CALL release() throw() { m_rParent.release(); }
73 };
74 
75 //==================================================================
76 // FmXModifyMultiplexer
77 //==================================================================
78 class FmXModifyMultiplexer	:public OWeakSubObject
79 							,public ::cppu::OInterfaceContainerHelper
80 							,public ::com::sun::star::util::XModifyListener
81 {
82 public:
83 	FmXModifyMultiplexer( ::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex );
84 	DECLARE_UNO3_DEFAULTS(FmXModifyMultiplexer,OWeakSubObject);
85 	virtual ::com::sun::star::uno::Any	SAL_CALL queryInterface(const ::com::sun::star::uno::Type& _rType) throw (::com::sun::star::uno::RuntimeException);
86 
87 // ::com::sun::star::lang::XEventListener
88 	virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw(::com::sun::star::uno::RuntimeException);
89 
90 // ::com::sun::star::util::XModifyListener
91 	virtual void SAL_CALL modified(const ::com::sun::star::lang::EventObject& Source) throw(::com::sun::star::uno::RuntimeException);
92 
93 // resolve ambiguity : both OWeakObject and OInterfaceContainerHelper have these memory operators
operator new(size_t size)94 	void * SAL_CALL operator new( size_t size ) throw() { return OWeakSubObject::operator new(size); }
operator delete(void * p)95 	void SAL_CALL operator delete( void * p ) throw() { OWeakSubObject::operator delete(p); }
96 };
97 
98 //==================================================================
99 // FmXUpdateMultiplexer
100 //==================================================================
101 class FmXUpdateMultiplexer : public OWeakSubObject,
102 							 public ::cppu::OInterfaceContainerHelper,
103 							 public ::com::sun::star::form::XUpdateListener
104 {
105 public:
106 	FmXUpdateMultiplexer( ::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex );
107 	DECLARE_UNO3_DEFAULTS(FmXUpdateMultiplexer,OWeakSubObject);
108 
109 	virtual ::com::sun::star::uno::Any	SAL_CALL queryInterface(const ::com::sun::star::uno::Type& _rType) throw (::com::sun::star::uno::RuntimeException);
110 
111 // ::com::sun::star::lang::XEventListener
112 	virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw(::com::sun::star::uno::RuntimeException);
113 
114 // ::com::sun::star::form::XUpdateListener
115 	virtual sal_Bool SAL_CALL approveUpdate(const ::com::sun::star::lang::EventObject &) throw(::com::sun::star::uno::RuntimeException);
116 	virtual void SAL_CALL updated(const ::com::sun::star::lang::EventObject &) throw(::com::sun::star::uno::RuntimeException);
117 
118 // resolve ambiguity : both OWeakObject and OInterfaceContainerHelper have these memory operators
operator new(size_t size)119 	void * SAL_CALL operator new( size_t size ) throw() { return OWeakSubObject::operator new(size); }
operator delete(void * p)120 	void SAL_CALL operator delete( void * p ) throw() { OWeakSubObject::operator delete(p); }
121 };
122 
123 //==================================================================
124 // FmXSelectionMultiplexer
125 //==================================================================
126 class FmXSelectionMultiplexer	:public OWeakSubObject
127 								,public ::cppu::OInterfaceContainerHelper
128 								,public ::com::sun::star::view::XSelectionChangeListener
129 {
130 public:
131 	FmXSelectionMultiplexer( ::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex );
132 	DECLARE_UNO3_DEFAULTS(FmXSelectionMultiplexer, OWeakSubObject);
133 
134 	virtual ::com::sun::star::uno::Any	SAL_CALL queryInterface(const ::com::sun::star::uno::Type& _rType) throw (::com::sun::star::uno::RuntimeException);
135 
136 // ::com::sun::star::lang::XEventListener
137 	virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw(::com::sun::star::uno::RuntimeException);
138 
139 // ::com::sun::star::view::XSelectionChangeListener
140     virtual void SAL_CALL selectionChanged( const ::com::sun::star::lang::EventObject& aEvent ) throw (::com::sun::star::uno::RuntimeException);
141 
142 // resolve ambiguity : both OWeakObject and OInterfaceContainerHelper have these memory operators
operator new(size_t size)143 	void * SAL_CALL operator new( size_t size ) throw() { return OWeakSubObject::operator new(size); }
operator delete(void * p)144 	void SAL_CALL operator delete( void * p ) throw() { OWeakSubObject::operator delete(p); }
145 };
146 
147 //==================================================================
148 // FmXGridControlMultiplexer
149 //==================================================================
150 class FmXGridControlMultiplexer	:public OWeakSubObject
151 								,public ::cppu::OInterfaceContainerHelper
152 								,public ::com::sun::star::form::XGridControlListener
153 {
154 public:
155 	FmXGridControlMultiplexer( ::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex );
156 	DECLARE_UNO3_DEFAULTS( FmXGridControlMultiplexer, OWeakSubObject );
157 
158 	virtual ::com::sun::star::uno::Any	SAL_CALL queryInterface(const ::com::sun::star::uno::Type& _rType) throw (::com::sun::star::uno::RuntimeException);
159 
160 // ::com::sun::star::lang::XEventListener
161 	virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw(::com::sun::star::uno::RuntimeException);
162 
163 // ::com::sun::star::view::XSelectionChangeListener
164     virtual void SAL_CALL columnChanged( const ::com::sun::star::lang::EventObject& _event ) throw (::com::sun::star::uno::RuntimeException);
165 
166 // resolve ambiguity : both OWeakObject and OInterfaceContainerHelper have these memory operators
operator new(size_t size)167 	void * SAL_CALL operator new( size_t size ) throw() { return OWeakSubObject::operator new(size); }
operator delete(void * p)168 	void SAL_CALL operator delete( void * p ) throw() { OWeakSubObject::operator delete(p); }
169 };
170 
171 //==================================================================
172 // FmXContainerMultiplexer
173 //==================================================================
174 class FmXContainerMultiplexer : public OWeakSubObject,
175 								public ::cppu::OInterfaceContainerHelper,
176 								public ::com::sun::star::container::XContainerListener
177 {
178 public:
179 	FmXContainerMultiplexer( ::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex);
180 	DECLARE_UNO3_DEFAULTS(FmXContainerMultiplexer,OWeakSubObject);
181 	virtual ::com::sun::star::uno::Any	SAL_CALL queryInterface(const ::com::sun::star::uno::Type& _rType) throw (::com::sun::star::uno::RuntimeException);
182 
183 // ::com::sun::star::lang::XEventListener
184 	virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw(::com::sun::star::uno::RuntimeException);
185 
186 // ::com::sun::star::container::XContainerListener
187 	virtual void SAL_CALL elementInserted(const ::com::sun::star::container::ContainerEvent& Event) throw(::com::sun::star::uno::RuntimeException);
188 	virtual void SAL_CALL elementRemoved(const ::com::sun::star::container::ContainerEvent& Event) throw(::com::sun::star::uno::RuntimeException);
189 	virtual void SAL_CALL elementReplaced(const ::com::sun::star::container::ContainerEvent& Event) throw(::com::sun::star::uno::RuntimeException);
190 
191 // resolve ambiguity : both OWeakObject and OInterfaceContainerHelper have these memory operators
operator new(size_t size)192 	void * SAL_CALL operator new( size_t size ) throw() { return OWeakSubObject::operator new(size); }
operator delete(void * p)193 	void SAL_CALL operator delete( void * p ) throw() { OWeakSubObject::operator delete(p); }
194 };
195 
196 //==================================================================
197 // FmXGridControl
198 //==================================================================
199 typedef ::cppu::ImplHelper10<   ::com::sun::star::form::XBoundComponent,
200 								::com::sun::star::form::XGridControl,
201 								::com::sun::star::util::XModifyBroadcaster,
202 								::com::sun::star::container::XIndexAccess,
203 								::com::sun::star::container::XEnumerationAccess,
204 								::com::sun::star::util::XModeSelector,
205 								::com::sun::star::container::XContainer,
206 								::com::sun::star::frame::XDispatchProvider,
207 								::com::sun::star::frame::XDispatchProviderInterception,
208 								::com::sun::star::view::XSelectionSupplier
209 							>	FmXGridControl_BASE;
210 
211 class FmXGridPeer;
212 class SVX_DLLPUBLIC FmXGridControl	:public UnoControl
213 						,public FmXGridControl_BASE
214 {
215     FmXModifyMultiplexer	    m_aModifyListeners;
216     FmXUpdateMultiplexer	    m_aUpdateListeners;
217     FmXContainerMultiplexer	    m_aContainerListeners;
218     FmXSelectionMultiplexer	    m_aSelectionListeners;
219     FmXGridControlMultiplexer   m_aGridControlListeners;
220 
221 protected:
222 	sal_uInt16	m_nPeerCreationLevel;
223 	sal_Bool	m_bInDraw;
224 
225 	::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >	m_xServiceFactory;
226 
227 public:
228 	FmXGridControl(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >&);
229 	virtual ~FmXGridControl();
230 
231 	// UNO Anbindung
232 	DECLARE_UNO3_AGG_DEFAULTS(FmXGridControl, UnoControl);
233 	virtual ::com::sun::star::uno::Any	SAL_CALL queryAggregation(const ::com::sun::star::uno::Type& _rType) throw (::com::sun::star::uno::RuntimeException);
234 
235 // XTypeProvider
236     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> SAL_CALL getTypes(  ) throw(::com::sun::star::uno::RuntimeException);
237     virtual ::com::sun::star::uno::Sequence<sal_Int8> SAL_CALL getImplementationId(  ) throw(::com::sun::star::uno::RuntimeException);
238 
239 // ::com::sun::star::lang::XComponent
240 	virtual void SAL_CALL dispose() throw(::com::sun::star::uno::RuntimeException);
241 
242 // ::com::sun::star::lang::XServiceInfo
243 	virtual sal_Bool SAL_CALL supportsService(const ::rtl::OUString& ServiceName) throw();
244 	virtual ::rtl::OUString	SAL_CALL getImplementationName() throw();
245 	virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw();
246 
247 // ::com::sun::star::awt::XControl
248 	virtual void SAL_CALL createPeer(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XToolkit >& _rToolkit, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >& Parent) throw(::com::sun::star::uno::RuntimeException);
249 	virtual sal_Bool SAL_CALL setModel(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& Model) throw(::com::sun::star::uno::RuntimeException);
250 	virtual void SAL_CALL setDesignMode(sal_Bool bOn) throw(::com::sun::star::uno::RuntimeException);
251 
252 // ::com::sun::star::awt::XView
253 	virtual void SAL_CALL draw( sal_Int32 x, sal_Int32 y ) throw(::com::sun::star::uno::RuntimeException);
254 
255 // ::com::sun::star::form::XBoundComponent
256 	virtual void SAL_CALL addUpdateListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XUpdateListener >& l) throw(::com::sun::star::uno::RuntimeException);
257 	virtual void SAL_CALL removeUpdateListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XUpdateListener >& l) throw(::com::sun::star::uno::RuntimeException);
258 	virtual sal_Bool SAL_CALL commit() throw(::com::sun::star::uno::RuntimeException);
259 
260 // ::com::sun::star::container::XElementAccess
261     virtual ::com::sun::star::uno::Type SAL_CALL getElementType(  ) throw(::com::sun::star::uno::RuntimeException);
262     virtual sal_Bool SAL_CALL hasElements(  ) throw(::com::sun::star::uno::RuntimeException);
263 
264 // ::com::sun::star::container::XEnumerationAccess
265 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration >  SAL_CALL createEnumeration() throw(::com::sun::star::uno::RuntimeException);
266 
267 // ::com::sun::star::container::XIndexAccess
268 	virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException);
269 	virtual ::com::sun::star::uno::Any SAL_CALL getByIndex(sal_Int32 _rIndex) throw(::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
270 
271 // ::com::sun::star::form::XGridControl
272     virtual void SAL_CALL addGridControlListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XGridControlListener >& _listener ) throw(::com::sun::star::uno::RuntimeException);
273     virtual void SAL_CALL removeGridControlListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XGridControlListener >& _listener ) throw(::com::sun::star::uno::RuntimeException);
274 
275 // ::com::sun::star::form::XGrid (base of XGridControl)
276 	virtual sal_Int16 SAL_CALL getCurrentColumnPosition() throw(::com::sun::star::uno::RuntimeException);
277 	virtual void SAL_CALL setCurrentColumnPosition(sal_Int16 nPos) throw(::com::sun::star::uno::RuntimeException);
278 
279 // ::com::sun::star::form::XGridFieldDataSupplier (base of XGridControl)
280     virtual ::com::sun::star::uno::Sequence< sal_Bool > SAL_CALL queryFieldDataType( const ::com::sun::star::uno::Type& xType ) throw(::com::sun::star::uno::RuntimeException);
281     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > SAL_CALL queryFieldData( sal_Int32 nRow, const ::com::sun::star::uno::Type& xType ) throw(::com::sun::star::uno::RuntimeException);
282 
283 // UnoControl
284 	virtual ::rtl::OUString	GetComponentServiceName();
285 
286 // ::com::sun::star::util::XModifyBroadcaster
287 	virtual void SAL_CALL addModifyListener(const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& l) throw(::com::sun::star::uno::RuntimeException);
288 	virtual void SAL_CALL removeModifyListener(const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& l) throw(::com::sun::star::uno::RuntimeException);
289 
290 // ::com::sun::star::util::XModeSelector
291 	virtual void SAL_CALL setMode(const ::rtl::OUString& Mode) throw(::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException);
292 	virtual ::rtl::OUString SAL_CALL getMode() throw(::com::sun::star::uno::RuntimeException);
293 	virtual ::com::sun::star::uno::Sequence< ::rtl::OUString> SAL_CALL getSupportedModes() throw(::com::sun::star::uno::RuntimeException);
294 	virtual sal_Bool SAL_CALL supportsMode(const ::rtl::OUString& Mode) throw(::com::sun::star::uno::RuntimeException);
295 
296 // ::com::sun::star::container::XContainer
297 	virtual void SAL_CALL addContainerListener(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainerListener >& l) throw(::com::sun::star::uno::RuntimeException);
298 	virtual void SAL_CALL removeContainerListener(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainerListener >& l) throw(::com::sun::star::uno::RuntimeException);
299 
300 // ::com::sun::star::frame::XDispatchProvider
301     virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch >  SAL_CALL queryDispatch(const ::com::sun::star::util::URL& aURL, const ::rtl::OUString& aTargetFrameName, sal_Int32 nSearchFlags) throw(::com::sun::star::uno::RuntimeException);
302     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch >  > SAL_CALL queryDispatches(const ::com::sun::star::uno::Sequence< ::com::sun::star::frame::DispatchDescriptor >& aDescripts) throw(::com::sun::star::uno::RuntimeException);
303 
304 // ::com::sun::star::frame::XDispatchProviderInterception
305     virtual void SAL_CALL registerDispatchProviderInterceptor(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor >& xInterceptor) throw(::com::sun::star::uno::RuntimeException);
306     virtual void SAL_CALL releaseDispatchProviderInterceptor(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor >& xInterceptor) throw(::com::sun::star::uno::RuntimeException);
307 
308 // ::com::sun::star::view::XSelectionSupplier
309     virtual sal_Bool SAL_CALL select( const ::com::sun::star::uno::Any& aSelection ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
310     virtual ::com::sun::star::uno::Any SAL_CALL getSelection(  ) throw (::com::sun::star::uno::RuntimeException);
311     virtual void SAL_CALL addSelectionChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::view::XSelectionChangeListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
312     virtual void SAL_CALL removeSelectionChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::view::XSelectionChangeListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
313 
314 protected:
315 	virtual FmXGridPeer*	imp_CreatePeer(Window* pParent);
316 		// ImplCreatePeer waere besser ;) geht aber nicht, da dann nicht exportiert
317 
318 };
319 
320 //==================================================================
321 // FmXGridPeer -> Peer fuers Gridcontrol
322 //==================================================================
323 typedef ::comphelper::ImplHelper19  <   ::com::sun::star::form::XGridPeer,
324                                         ::com::sun::star::form::XBoundComponent,
325                                         ::com::sun::star::form::XGridControl,
326                                         ::com::sun::star::sdb::XRowSetSupplier,
327                                         ::com::sun::star::util::XModifyBroadcaster,
328                                         ::com::sun::star::beans::XPropertyChangeListener,
329                                         ::com::sun::star::container::XContainerListener,
330                                         ::com::sun::star::sdbc::XRowSetListener,
331                                         ::com::sun::star::form::XLoadListener,
332                                         ::com::sun::star::view::XSelectionChangeListener,
333                                         ::com::sun::star::container::XIndexAccess,
334                                         ::com::sun::star::container::XEnumerationAccess,
335                                         ::com::sun::star::util::XModeSelector,
336                                         ::com::sun::star::container::XContainer,
337                                         ::com::sun::star::frame::XStatusListener,
338                                         ::com::sun::star::frame::XDispatchProvider,
339                                         ::com::sun::star::frame::XDispatchProviderInterception,
340                                         ::com::sun::star::form::XResetListener,
341                                         ::com::sun::star::view::XSelectionSupplier
342                                     >	FmXGridPeer_BASE;
343 class FmGridControl;
344 class SVX_DLLPUBLIC FmXGridPeer	:public VCLXWindow
345 					,public FmXGridPeer_BASE
346 {
347 	::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer >	m_xColumns;
348 	::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet > 				m_xCursor;
349 	::cppu::OInterfaceContainerHelper		m_aModifyListeners,
350 											m_aUpdateListeners,
351 											m_aContainerListeners,
352 											m_aSelectionListeners,
353                                             m_aGridControlListeners;
354 
355 	::rtl::OUString			m_aMode;
356 	sal_Int32				m_nCursorListening;
357 
358 	::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor >	m_xFirstDispatchInterceptor;
359 
360 	sal_Bool								m_bInterceptingDispatch;
361 
362 	sal_Bool*								m_pStateCache;
363 		// one bool for each supported url
364 	::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > *						m_pDispatchers;
365 		// one dispatcher for each supported url
366 		// (I would like to have a vector here but including the stl in an exported file seems
367 		// very risky to me ....)
368 
369     class GridListenerDelegator;
370     friend class GridListenerDelegator;
371     GridListenerDelegator*  m_pGridListener;
372 
373 protected:
374 	::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >	m_xServiceFactory;
375 	::osl::Mutex																		m_aMutex;
376 
377 public:
378 	FmXGridPeer(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >&);
379 	~FmXGridPeer();
380 
381 	// spaeter Constructor, immer nach dem realen Constructor zu rufen !
382 	void Create(Window* pParent, WinBits nStyle);
383 
384 // UNO Anbindung
385 	DECLARE_UNO3_DEFAULTS(FmXGridPeer, VCLXWindow);
386 	virtual ::com::sun::star::uno::Any	SAL_CALL queryInterface(const ::com::sun::star::uno::Type& _rType) throw (::com::sun::star::uno::RuntimeException);
387 
388 // XTypeProvider
389     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> SAL_CALL getTypes(  ) throw(::com::sun::star::uno::RuntimeException);
390     virtual ::com::sun::star::uno::Sequence<sal_Int8> SAL_CALL getImplementationId(  ) throw(::com::sun::star::uno::RuntimeException);
391 
392 // ::com::sun::star::lang::XUnoTunnel
393 	static const ::com::sun::star::uno::Sequence< sal_Int8 >&	getUnoTunnelImplementationId() throw();
394 	static FmXGridPeer*											getImplementation( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxIFace ) throw();
395 	sal_Int64													SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& _rIdentifier ) throw(::com::sun::star::uno::RuntimeException);
396 
397 // ::com::sun::star::form::XGridPeer
398     virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > SAL_CALL getColumns(  ) throw(::com::sun::star::uno::RuntimeException);
399     virtual void SAL_CALL setColumns( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer >& aColumns ) throw(::com::sun::star::uno::RuntimeException);
400 
401 // ::com::sun::star::lang::XComponent
402     virtual void SAL_CALL dispose() throw(::com::sun::star::uno::RuntimeException);
403 
404 // ::com::sun::star::lang::XEventListener
405 	virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw(::com::sun::star::uno::RuntimeException);
406 
407 // ::com::sun::star::form::XBoundComponent
408 	virtual void SAL_CALL addUpdateListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XUpdateListener >& l) throw(::com::sun::star::uno::RuntimeException);
409 	virtual void SAL_CALL removeUpdateListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XUpdateListener >& l) throw(::com::sun::star::uno::RuntimeException);
410 	virtual sal_Bool SAL_CALL commit() throw(::com::sun::star::uno::RuntimeException);
411 
412 // ::com::sun::star::container::XElementAccess
413     virtual ::com::sun::star::uno::Type SAL_CALL getElementType(  ) throw(::com::sun::star::uno::RuntimeException);
414     virtual sal_Bool SAL_CALL hasElements(  ) throw(::com::sun::star::uno::RuntimeException);
415 
416 // ::com::sun::star::container::XEnumerationAccess
417 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL createEnumeration() throw(::com::sun::star::uno::RuntimeException);
418 
419 // ::com::sun::star::container::XIndexAccess
420 	virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException);
421 	virtual ::com::sun::star::uno::Any SAL_CALL getByIndex(sal_Int32 _rIndex) throw(::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
422 
423 // ::com::sun::star::beans::XPropertyChangeListener
424 	virtual void SAL_CALL SAL_CALL propertyChange(const ::com::sun::star::beans::PropertyChangeEvent& evt) throw(::com::sun::star::uno::RuntimeException);
425 
426 // ::com::sun::star::form::XLoadListener
427 	virtual void SAL_CALL loaded(const ::com::sun::star::lang::EventObject& rEvent) throw(::com::sun::star::uno::RuntimeException);
428 	virtual void SAL_CALL unloaded(const ::com::sun::star::lang::EventObject& rEvent) throw(::com::sun::star::uno::RuntimeException);
429     virtual void SAL_CALL unloading(const ::com::sun::star::lang::EventObject& aEvent) throw(::com::sun::star::uno::RuntimeException);
430 	virtual void SAL_CALL reloading(const ::com::sun::star::lang::EventObject& aEvent) throw(::com::sun::star::uno::RuntimeException);
431     virtual void SAL_CALL reloaded(const ::com::sun::star::lang::EventObject& aEvent) throw(::com::sun::star::uno::RuntimeException);
432 
433 // ::com::sun::star::sdbc::XRowSetListener
434     virtual void SAL_CALL cursorMoved(const ::com::sun::star::lang::EventObject& event) throw(::com::sun::star::uno::RuntimeException);
435     virtual void SAL_CALL rowChanged(const ::com::sun::star::lang::EventObject& event) throw(::com::sun::star::uno::RuntimeException);
436     virtual void SAL_CALL rowSetChanged(const ::com::sun::star::lang::EventObject& event) throw(::com::sun::star::uno::RuntimeException);
437 
438 // ::com::sun::star::container::XContainerListener
439 	virtual void SAL_CALL elementInserted(const ::com::sun::star::container::ContainerEvent& Event) throw(::com::sun::star::uno::RuntimeException);
440 	virtual void SAL_CALL elementRemoved(const ::com::sun::star::container::ContainerEvent& Event) throw(::com::sun::star::uno::RuntimeException);
441 	virtual void SAL_CALL elementReplaced(const ::com::sun::star::container::ContainerEvent& Event) throw(::com::sun::star::uno::RuntimeException);
442 
443 // VCLXWindow
444     virtual void SAL_CALL setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value ) throw(::com::sun::star::uno::RuntimeException);
445     virtual ::com::sun::star::uno::Any SAL_CALL getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException);
446 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext >
447 					CreateAccessibleContext();
448 
449 // ::com::sun::star::form::XGridControl
450     virtual void SAL_CALL addGridControlListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XGridControlListener >& _listener ) throw(::com::sun::star::uno::RuntimeException);
451     virtual void SAL_CALL removeGridControlListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XGridControlListener >& _listener ) throw(::com::sun::star::uno::RuntimeException);
452 
453 // ::com::sun::star::form::XGrid (base of XGridControl)
454 	virtual sal_Int16 SAL_CALL getCurrentColumnPosition() throw(::com::sun::star::uno::RuntimeException);
455 	virtual void SAL_CALL setCurrentColumnPosition(sal_Int16 nPos) throw(::com::sun::star::uno::RuntimeException);
456 
457 // ::com::sun::star::form::XGridFieldDataSupplier (base of XGridControl)
458     virtual ::com::sun::star::uno::Sequence< sal_Bool > SAL_CALL queryFieldDataType( const ::com::sun::star::uno::Type& xType ) throw(::com::sun::star::uno::RuntimeException);
459     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > SAL_CALL queryFieldData( sal_Int32 nRow, const ::com::sun::star::uno::Type& xType ) throw(::com::sun::star::uno::RuntimeException);
460 
461 // ::com::sun::star::sdb::XRowSetSupplier
462     virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet >  SAL_CALL getRowSet() throw(::com::sun::star::uno::RuntimeException);
463     virtual void SAL_CALL setRowSet(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet >& xDataSource) throw(::com::sun::star::uno::RuntimeException);
464 
465 // ::com::sun::star::util::XModifyBroadcaster
466 	virtual void SAL_CALL addModifyListener(const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& l) throw(::com::sun::star::uno::RuntimeException);
467 	virtual void SAL_CALL removeModifyListener(const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& l) throw(::com::sun::star::uno::RuntimeException);
468 
469 // UnoControl
470 	virtual void SAL_CALL SAL_CALL setDesignMode(sal_Bool bOn) throw(::com::sun::star::uno::RuntimeException);
471 	virtual sal_Bool SAL_CALL isDesignMode() throw(::com::sun::star::uno::RuntimeException);
472 
473 // ::com::sun::star::view::XSelectionChangeListener
474 	virtual void SAL_CALL selectionChanged(const ::com::sun::star::lang::EventObject& aEvent) throw(::com::sun::star::uno::RuntimeException);
475 
476 	void CellModified();
477 
478 // PropertyListening
479 	void updateGrid(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet >& _rDatabaseCursor);
480 	void startCursorListening();
481 	void stopCursorListening();
482 
483 // ::com::sun::star::util::XModeSelector
484 	virtual void SAL_CALL setMode(const ::rtl::OUString& Mode) throw(::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException);
485 	virtual ::rtl::OUString SAL_CALL getMode() throw(::com::sun::star::uno::RuntimeException);
486 	virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedModes() throw(::com::sun::star::uno::RuntimeException);
487 	virtual sal_Bool SAL_CALL supportsMode(const ::rtl::OUString& Mode) throw(::com::sun::star::uno::RuntimeException);
488 
489 // ::com::sun::star::container::XContainer
490 	virtual void SAL_CALL addContainerListener(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainerListener >& l) throw(::com::sun::star::uno::RuntimeException);
491 	virtual void SAL_CALL removeContainerListener(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainerListener >& l) throw(::com::sun::star::uno::RuntimeException);
492 
493 	void columnVisible(DbGridColumn* pColumn);
494 	void columnHidden(DbGridColumn* pColumn);
495 
496 // ::com::sun::star::awt::XView
497 	virtual void SAL_CALL draw( sal_Int32 x, sal_Int32 y ) throw(::com::sun::star::uno::RuntimeException);
498 
499 // ::com::sun::star::frame::XDispatchProvider
500     virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch >  SAL_CALL queryDispatch(const ::com::sun::star::util::URL& aURL, const ::rtl::OUString& aTargetFrameName, sal_Int32 nSearchFlags) throw(::com::sun::star::uno::RuntimeException);
501     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch >  > SAL_CALL queryDispatches(const ::com::sun::star::uno::Sequence< ::com::sun::star::frame::DispatchDescriptor >& aDescripts) throw(::com::sun::star::uno::RuntimeException);
502 
503 // ::com::sun::star::frame::XDispatchProviderInterception
504     virtual void SAL_CALL registerDispatchProviderInterceptor(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor >& xInterceptor) throw(::com::sun::star::uno::RuntimeException);
505     virtual void SAL_CALL releaseDispatchProviderInterceptor(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor >& xInterceptor) throw(::com::sun::star::uno::RuntimeException);
506 
507 // ::com::sun::star::frame::XStatusListener
508     virtual void SAL_CALL statusChanged(const ::com::sun::star::frame::FeatureStateEvent& Event) throw(::com::sun::star::uno::RuntimeException);
509 
510 // ::com::sun::star::form::XResetListener
511     virtual sal_Bool SAL_CALL approveReset(const ::com::sun::star::lang::EventObject& rEvent) throw(::com::sun::star::uno::RuntimeException);
512     virtual void SAL_CALL resetted(const ::com::sun::star::lang::EventObject& rEvent) throw(::com::sun::star::uno::RuntimeException);
513 
514 // ::com::sun::star::view::XSelectionSupplier
515     virtual sal_Bool SAL_CALL select( const ::com::sun::star::uno::Any& aSelection ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
516     virtual ::com::sun::star::uno::Any SAL_CALL getSelection(  ) throw (::com::sun::star::uno::RuntimeException);
517     virtual void SAL_CALL addSelectionChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::view::XSelectionChangeListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
518     virtual void SAL_CALL removeSelectionChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::view::XSelectionChangeListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
519 
520 protected:
521 	virtual FmGridControl*	imp_CreateControl(Window* pParent, WinBits nStyle);
522 
523 	static ::com::sun::star::uno::Sequence< ::com::sun::star::util::URL>&		getSupportedURLs();
524 	static ::com::sun::star::uno::Sequence<sal_uInt16>&	getSupportedGridSlots();
525 	void	ConnectToDispatcher();
526 	void	DisConnectFromDispatcher();
527 	void	UpdateDispatches();	// will connect if not already connected and just update else
528 
529 	/**	If a derived class wants to listen at some column properties, it doesn't have
530 		to overload all methods affecting columns (setColumns, elementInserted, elementRemoved ...)
531 		Instead it may use addColumnListeners and removeColumnListeners which are called in all
532 		the cases.
533 	*/
534 	virtual void addColumnListeners(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xCol);
535 	virtual void removeColumnListeners(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xCol);
536 
537 	void selectionChanged();
538     void columnChanged();
539 
540 	DECL_LINK(OnQueryGridSlotState, void*);
541 	DECL_LINK(OnExecuteGridSlot, void*);
542 };
543 
544 
545 
546 #endif // _SVX_FMGRID_HXX
547 
548