bump product version to 4.1.6.2
[LibreOffice.git] / svx / source / inc / formcontroller.hxx
blobcc9af3abe8f0f3f9e1beeb6312063bde7a165e8b
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
19 #ifndef _SVX_FMCTRLER_HXX
20 #define _SVX_FMCTRLER_HXX
22 #include "delayedevent.hxx"
23 #include "formdispatchinterceptor.hxx"
24 #include "sqlparserclient.hxx"
26 #include <com/sun/star/awt/XControl.hpp>
27 #include <com/sun/star/awt/XControlModel.hpp>
28 #include <com/sun/star/awt/XFocusListener.hpp>
29 #include <com/sun/star/awt/XItemListener.hpp>
30 #include <com/sun/star/awt/XMouseListener.hpp>
31 #include <com/sun/star/awt/XTabController.hpp>
32 #include <com/sun/star/awt/XTextComponent.hpp>
33 #include <com/sun/star/container/XContainerListener.hpp>
34 #include <com/sun/star/container/XEnumerationAccess.hpp>
35 #include <com/sun/star/container/XIndexContainer.hpp>
36 #include <com/sun/star/form/DatabaseDeleteEvent.hpp>
37 #include <com/sun/star/form/DatabaseParameterEvent.hpp>
38 #include <com/sun/star/form/ErrorEvent.hpp>
39 #include <com/sun/star/form/validation/XFormComponentValidityListener.hpp>
40 #include <com/sun/star/form/XConfirmDeleteBroadcaster.hpp>
41 #include <com/sun/star/form/XConfirmDeleteListener.hpp>
42 #include <com/sun/star/form/XDatabaseParameterBroadcaster2.hpp>
43 #include <com/sun/star/form/XDatabaseParameterListener.hpp>
44 #include <com/sun/star/form/runtime/XFormController.hpp>
45 #include <com/sun/star/form/runtime/XFilterController.hpp>
46 #include <com/sun/star/form/XFormControllerListener.hpp>
47 #include <com/sun/star/form/XGridControlListener.hpp>
48 #include <com/sun/star/form/XLoadListener.hpp>
49 #include <com/sun/star/form/XResetListener.hpp>
50 #include <com/sun/star/frame/DispatchDescriptor.hpp>
51 #include <com/sun/star/frame/XDispatch.hpp>
52 #include <com/sun/star/frame/XDispatchProvider.hpp>
53 #include <com/sun/star/frame/XDispatchProviderInterception.hpp>
54 #include <com/sun/star/frame/XDispatchProviderInterceptor.hpp>
55 #include <com/sun/star/frame/XModel.hpp>
56 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
57 #include <com/sun/star/lang/XServiceInfo.hpp>
58 #include <com/sun/star/script/XEventAttacherManager.hpp>
59 #include <com/sun/star/sdb/XRowSetApproveBroadcaster.hpp>
60 #include <com/sun/star/sdb/XRowSetApproveListener.hpp>
61 #include <com/sun/star/sdb/XSingleSelectQueryComposer.hpp>
62 #include <com/sun/star/sdb/XSQLErrorBroadcaster.hpp>
63 #include <com/sun/star/sdb/XSQLErrorListener.hpp>
64 #include <com/sun/star/sdbc/XRowSetListener.hpp>
65 #include <com/sun/star/task/XInteractionHandler.hpp>
66 #include <com/sun/star/util/XModeSelector.hpp>
67 #include <com/sun/star/util/XModifyBroadcaster.hpp>
68 #include <com/sun/star/util/XModifyListener.hpp>
70 #include <comphelper/broadcasthelper.hxx>
71 #include <comphelper/componentcontext.hxx>
72 #include <comphelper/proparrhlp.hxx>
73 #include <comphelper/stl_types.hxx>
74 #include <cppuhelper/propshlp.hxx>
75 #include <vcl/timer.hxx>
77 #ifndef INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_22
78 #define INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_22
79 #define COMPHELPER_IMPLBASE_INTERFACE_NUMBER 22
80 #include <comphelper/implbase_var.hxx>
81 #endif
83 struct FmXTextComponentLess : public ::std::binary_function< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent >, ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent> , sal_Bool>
85 sal_Bool operator() (const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent >& x, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent >& y) const
87 return reinterpret_cast<sal_Int64>(x.get()) < reinterpret_cast<sal_Int64>(y.get());
91 typedef ::std::map< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent >, OUString, FmXTextComponentLess> FmFilterRow;
92 typedef ::std::vector< FmFilterRow > FmFilterRows;
93 typedef ::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > > FmFormControllers;
95 class Window;
97 namespace svxform
99 typedef ::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent > > FilterComponents;
100 class ControlBorderManager;
101 struct FmFieldInfo;
103 typedef ::comphelper::WeakComponentImplHelper22 < ::com::sun::star::form::runtime::XFormController
104 , ::com::sun::star::form::runtime::XFilterController
105 , ::com::sun::star::awt::XFocusListener
106 , ::com::sun::star::form::XLoadListener
107 , ::com::sun::star::beans::XPropertyChangeListener
108 , ::com::sun::star::awt::XTextListener
109 , ::com::sun::star::awt::XItemListener
110 , ::com::sun::star::container::XContainerListener
111 , ::com::sun::star::util::XModifyListener
112 , ::com::sun::star::form::XConfirmDeleteListener
113 , ::com::sun::star::sdb::XSQLErrorListener
114 , ::com::sun::star::sdbc::XRowSetListener
115 , ::com::sun::star::sdb::XRowSetApproveListener
116 , ::com::sun::star::form::XDatabaseParameterListener
117 , ::com::sun::star::lang::XServiceInfo
118 , ::com::sun::star::form::XResetListener
119 , ::com::sun::star::frame::XDispatch
120 , ::com::sun::star::awt::XMouseListener
121 , ::com::sun::star::form::validation::XFormComponentValidityListener
122 , ::com::sun::star::task::XInteractionHandler
123 , ::com::sun::star::form::XGridControlListener
124 , ::com::sun::star::form::runtime::XFeatureInvalidation
125 > FormController_BASE;
127 //==================================================================
128 // FormController
129 //==================================================================
130 class ColumnInfoCache;
131 class SAL_DLLPRIVATE FormController :public ::comphelper::OBaseMutex
132 ,public FormController_BASE
133 ,public ::cppu::OPropertySetHelper
134 ,public DispatchInterceptor
135 ,public ::comphelper::OAggregationArrayUsageHelper< FormController >
136 ,public ::svxform::OSQLParserClient
138 typedef ::std::map < sal_Int16,
139 ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch >
140 > DispatcherContainer;
142 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XAggregation> m_xAggregate;
143 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTabController> m_xTabController;
144 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> m_xActiveControl, m_xCurrentControl;
145 ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess> m_xModelAsIndex;
146 ::com::sun::star::uno::Reference< ::com::sun::star::script::XEventAttacherManager> m_xModelAsManager;
147 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface> m_xParent;
148 ::comphelper::ComponentContext m_aContext;
149 // Composer used for checking filter conditions
150 ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSingleSelectQueryComposer > m_xComposer;
151 ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler > m_xInteractionHandler;
152 ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormControllerContext > m_xContext;
154 ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> > m_aControls;
155 ::cppu::OInterfaceContainerHelper
156 m_aActivateListeners,
157 m_aModifyListeners,
158 m_aErrorListeners,
159 m_aDeleteListeners,
160 m_aRowSetApproveListeners,
161 m_aParameterListeners,
162 m_aFilterListeners;
164 FmFormControllers m_aChildren;
165 FilterComponents m_aFilterComponents;
166 FmFilterRows m_aFilterRows;
168 Timer m_aTabActivationTimer;
169 Timer m_aFeatureInvalidationTimer;
171 ::svxform::ControlBorderManager*
172 m_pControlBorderManager;
174 ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormOperations >
175 m_xFormOperations;
176 DispatcherContainer m_aFeatureDispatchers;
177 ::std::set< sal_Int16 > m_aInvalidFeatures; // for asynchronous feature invalidation
179 OUString m_aMode;
181 ::svxform::DelayedEvent m_aLoadEvent;
182 ::svxform::DelayedEvent m_aToggleEvent;
183 ::svxform::DelayedEvent m_aActivationEvent;
184 ::svxform::DelayedEvent m_aDeactivationEvent;
186 ::std::auto_ptr< ColumnInfoCache >
187 m_pColumnInfoCache;
189 sal_Int32 m_nCurrentFilterPosition; // current level for filtering (or-criteria)
191 sal_Bool m_bCurrentRecordModified : 1;
192 sal_Bool m_bCurrentRecordNew : 1;
193 sal_Bool m_bLocked : 1;
194 sal_Bool m_bDBConnection : 1; // Focuslistener nur fuer Datenbankformulare
195 sal_Bool m_bCycle : 1;
196 sal_Bool m_bCanInsert : 1;
197 sal_Bool m_bCanUpdate : 1;
198 sal_Bool m_bCommitLock : 1; // lock the committing of controls see focusGained
199 sal_Bool m_bModified : 1; // ist der Inhalt eines Controls modifiziert ?
200 sal_Bool m_bControlsSorted : 1;
201 sal_Bool m_bFiltering : 1;
202 sal_Bool m_bAttachEvents : 1;
203 sal_Bool m_bDetachEvents : 1;
204 bool m_bAttemptedHandlerCreation : 1;
205 bool m_bSuspendFilterTextListening; // no bit field, passed around as reference
207 // as we want to intercept dispatches of _all_ controls we're responsible for, and an object implementing
208 // the ::com::sun::star::frame::XDispatchProviderInterceptor interface can intercept only _one_ objects dispatches, we need a helper class
209 DECLARE_STL_VECTOR(DispatchInterceptionMultiplexer*, Interceptors);
210 Interceptors m_aControlDispatchInterceptors;
212 public:
213 FormController( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > & _rxORB );
215 protected:
216 ~FormController();
218 // XInterface
219 virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& type) throw ( ::com::sun::star::uno::RuntimeException );
220 virtual void SAL_CALL acquire() throw ();
221 virtual void SAL_CALL release() throw ();
223 // XTypeProvider
224 virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException);
225 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException);
227 // XDispatch
228 virtual void SAL_CALL dispatch( const ::com::sun::star::util::URL& _rURL, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& _rArgs ) throw (::com::sun::star::uno::RuntimeException);
229 virtual void SAL_CALL addStatusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener >& _rxListener, const ::com::sun::star::util::URL& _rURL ) throw (::com::sun::star::uno::RuntimeException);
230 virtual void SAL_CALL removeStatusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener >& _rxListener, const ::com::sun::star::util::URL& _rURL ) throw (::com::sun::star::uno::RuntimeException);
232 // ::com::sun::star::container::XChild
233 virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface> SAL_CALL getParent(void) throw( ::com::sun::star::uno::RuntimeException );
234 virtual void SAL_CALL setParent(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface>& Parent) throw( ::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException );
236 // ::com::sun::star::lang::XEventListener
237 virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw( ::com::sun::star::uno::RuntimeException );
239 // OComponentHelper
240 virtual void SAL_CALL disposing();
242 // OPropertySetHelper
243 virtual sal_Bool SAL_CALL convertFastPropertyValue( ::com::sun::star::uno::Any & rConvertedValue, ::com::sun::star::uno::Any & rOldValue,
244 sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue )
245 throw( ::com::sun::star::lang::IllegalArgumentException );
247 virtual void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) throw( ::com::sun::star::uno::Exception );
248 virtual void SAL_CALL getFastPropertyValue( ::com::sun::star::uno::Any& rValue, sal_Int32 nHandle ) const;
250 virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo> SAL_CALL getPropertySetInfo() throw( ::com::sun::star::uno::RuntimeException );
251 virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper();
253 using OPropertySetHelper::getFastPropertyValue;
255 // XFilterController
256 virtual ::sal_Int32 SAL_CALL getFilterComponents() throw (::com::sun::star::uno::RuntimeException);
257 virtual ::sal_Int32 SAL_CALL getDisjunctiveTerms() throw (::com::sun::star::uno::RuntimeException);
258 virtual void SAL_CALL addFilterControllerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFilterControllerListener >& _Listener ) throw( ::com::sun::star::uno::RuntimeException );
259 virtual void SAL_CALL removeFilterControllerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFilterControllerListener >& _Listener ) throw( ::com::sun::star::uno::RuntimeException );
260 virtual void SAL_CALL setPredicateExpression( ::sal_Int32 _Component, ::sal_Int32 _Term, const OUString& _PredicateExpression ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
261 virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl > SAL_CALL getFilterComponent( ::sal_Int32 _Component ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
262 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< OUString > > SAL_CALL getPredicateExpressions() throw( ::com::sun::star::uno::RuntimeException );
263 virtual void SAL_CALL removeDisjunctiveTerm( ::sal_Int32 _Term ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
264 virtual void SAL_CALL appendEmptyDisjunctiveTerm() throw (::com::sun::star::uno::RuntimeException);
265 virtual ::sal_Int32 SAL_CALL getActiveTerm() throw (::com::sun::star::uno::RuntimeException);
266 virtual void SAL_CALL setActiveTerm( ::sal_Int32 _ActiveTerm ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
268 // XElementAccess
269 virtual ::com::sun::star::uno::Type SAL_CALL getElementType(void) throw( ::com::sun::star::uno::RuntimeException );
270 virtual sal_Bool SAL_CALL hasElements(void) throw( ::com::sun::star::uno::RuntimeException );
272 // ::com::sun::star::container::XEnumerationAccess
273 virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration> SAL_CALL createEnumeration(void) throw( ::com::sun::star::uno::RuntimeException );
275 // ::com::sun::star::container::XContainerListener
276 virtual void SAL_CALL elementInserted(const ::com::sun::star::container::ContainerEvent& rEvent) throw( ::com::sun::star::uno::RuntimeException );
277 virtual void SAL_CALL elementReplaced(const ::com::sun::star::container::ContainerEvent& rEvent) throw( ::com::sun::star::uno::RuntimeException );
278 virtual void SAL_CALL elementRemoved(const ::com::sun::star::container::ContainerEvent& rEvent) throw( ::com::sun::star::uno::RuntimeException );
280 // XLoadListener
281 virtual void SAL_CALL loaded(const ::com::sun::star::lang::EventObject& rEvent) throw( ::com::sun::star::uno::RuntimeException );
282 virtual void SAL_CALL unloaded(const ::com::sun::star::lang::EventObject& rEvent) throw( ::com::sun::star::uno::RuntimeException );
283 virtual void SAL_CALL unloading(const ::com::sun::star::lang::EventObject& aEvent) throw( ::com::sun::star::uno::RuntimeException );
284 virtual void SAL_CALL reloading(const ::com::sun::star::lang::EventObject& aEvent) throw( ::com::sun::star::uno::RuntimeException );
285 virtual void SAL_CALL reloaded(const ::com::sun::star::lang::EventObject& aEvent) throw( ::com::sun::star::uno::RuntimeException );
287 // XModeSelector
288 virtual void SAL_CALL setMode(const OUString& Mode) throw( ::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException );
289 virtual OUString SAL_CALL getMode(void) throw( ::com::sun::star::uno::RuntimeException );
290 virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedModes(void) throw( ::com::sun::star::uno::RuntimeException );
291 virtual sal_Bool SAL_CALL supportsMode(const OUString& Mode) throw( ::com::sun::star::uno::RuntimeException );
293 // ::com::sun::star::container::XIndexAccess
294 virtual sal_Int32 SAL_CALL getCount(void) throw( ::com::sun::star::uno::RuntimeException );
295 virtual ::com::sun::star::uno::Any SAL_CALL getByIndex(sal_Int32 Index) throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException );
297 // XModifyBroadcaster
298 virtual void SAL_CALL addModifyListener(const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener>& l) throw( ::com::sun::star::uno::RuntimeException );
299 virtual void SAL_CALL removeModifyListener(const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener>& l) throw( ::com::sun::star::uno::RuntimeException );
301 // XFocusListener
302 virtual void SAL_CALL focusGained(const ::com::sun::star::awt::FocusEvent& e) throw( ::com::sun::star::uno::RuntimeException );
303 virtual void SAL_CALL focusLost(const ::com::sun::star::awt::FocusEvent& e) throw( ::com::sun::star::uno::RuntimeException );
305 // XMouseListener
306 virtual void SAL_CALL mousePressed( const ::com::sun::star::awt::MouseEvent& _rEvent ) throw (::com::sun::star::uno::RuntimeException);
307 virtual void SAL_CALL mouseReleased( const ::com::sun::star::awt::MouseEvent& _rEvent ) throw (::com::sun::star::uno::RuntimeException);
308 virtual void SAL_CALL mouseEntered( const ::com::sun::star::awt::MouseEvent& _rEvent ) throw (::com::sun::star::uno::RuntimeException);
309 virtual void SAL_CALL mouseExited( const ::com::sun::star::awt::MouseEvent& _rEvent ) throw (::com::sun::star::uno::RuntimeException);
311 // XFormComponentValidityListener
312 virtual void SAL_CALL componentValidityChanged( const ::com::sun::star::lang::EventObject& _rSource ) throw (::com::sun::star::uno::RuntimeException);
314 // XInteractionHandler
315 virtual void SAL_CALL handle( const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionRequest >& Request ) throw (::com::sun::star::uno::RuntimeException);
317 // XGridControlListener
318 virtual void SAL_CALL columnChanged( const ::com::sun::star::lang::EventObject& _event ) throw (::com::sun::star::uno::RuntimeException);
320 // ::com::sun::star::beans::XPropertyChangeListener -> aenderung der stati
321 virtual void SAL_CALL propertyChange(const ::com::sun::star::beans::PropertyChangeEvent& evt) throw( ::com::sun::star::uno::RuntimeException );
323 // XTextListener -> modify setzen
324 virtual void SAL_CALL textChanged(const ::com::sun::star::awt::TextEvent& rEvent) throw( ::com::sun::star::uno::RuntimeException );
326 // XItemListener -> modify setzen
327 virtual void SAL_CALL itemStateChanged(const ::com::sun::star::awt::ItemEvent& rEvent) throw( ::com::sun::star::uno::RuntimeException );
329 // XModifyListener -> modify setzen
330 virtual void SAL_CALL modified(const ::com::sun::star::lang::EventObject& rEvent) throw( ::com::sun::star::uno::RuntimeException );
332 // XFormController
333 virtual ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormOperations > SAL_CALL getFormOperations() throw (::com::sun::star::uno::RuntimeException);
334 virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> SAL_CALL getCurrentControl(void) throw( ::com::sun::star::uno::RuntimeException );
335 virtual void SAL_CALL addActivateListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormControllerListener>& l) throw( ::com::sun::star::uno::RuntimeException );
336 virtual void SAL_CALL removeActivateListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormControllerListener>& l) throw( ::com::sun::star::uno::RuntimeException );
337 virtual void SAL_CALL addChildController( const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController >& _ChildController ) throw( ::com::sun::star::uno::RuntimeException, ::com::sun::star::lang::IllegalArgumentException );
339 virtual ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormControllerContext > SAL_CALL getContext() throw (::com::sun::star::uno::RuntimeException);
340 virtual void SAL_CALL setContext( const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormControllerContext >& _context ) throw (::com::sun::star::uno::RuntimeException);
341 virtual ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler > SAL_CALL getInteractionHandler() throw (::com::sun::star::uno::RuntimeException);
342 virtual void SAL_CALL setInteractionHandler( const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& _interactionHandler ) throw (::com::sun::star::uno::RuntimeException);
344 // XTabController
345 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> > SAL_CALL getControls(void) throw( ::com::sun::star::uno::RuntimeException );
347 virtual void SAL_CALL setModel(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTabControllerModel>& Model) throw( ::com::sun::star::uno::RuntimeException );
348 virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTabControllerModel> SAL_CALL getModel() throw( ::com::sun::star::uno::RuntimeException );
350 virtual void SAL_CALL setContainer(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer>& Container) throw( ::com::sun::star::uno::RuntimeException );
351 virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer> SAL_CALL getContainer() throw( ::com::sun::star::uno::RuntimeException );
353 virtual void SAL_CALL autoTabOrder() throw( ::com::sun::star::uno::RuntimeException );
354 virtual void SAL_CALL activateTabOrder() throw( ::com::sun::star::uno::RuntimeException );
356 virtual void SAL_CALL activateFirst() throw( ::com::sun::star::uno::RuntimeException );
357 virtual void SAL_CALL activateLast() throw( ::com::sun::star::uno::RuntimeException );
359 // com::sun::star::sdbc::XRowSetListener
360 virtual void SAL_CALL cursorMoved(const ::com::sun::star::lang::EventObject& event) throw( ::com::sun::star::uno::RuntimeException );
361 virtual void SAL_CALL rowChanged(const ::com::sun::star::lang::EventObject& event) throw( ::com::sun::star::uno::RuntimeException );
362 virtual void SAL_CALL rowSetChanged(const ::com::sun::star::lang::EventObject& event) throw( ::com::sun::star::uno::RuntimeException );
364 // XRowSetApproveListener
365 virtual sal_Bool SAL_CALL approveCursorMove(const ::com::sun::star::lang::EventObject& event) throw( ::com::sun::star::uno::RuntimeException );
366 virtual sal_Bool SAL_CALL approveRowChange(const ::com::sun::star::sdb::RowChangeEvent& event) throw( ::com::sun::star::uno::RuntimeException );
367 virtual sal_Bool SAL_CALL approveRowSetChange(const ::com::sun::star::lang::EventObject& event) throw( ::com::sun::star::uno::RuntimeException );
369 // XRowSetApproveBroadcaster
370 virtual void SAL_CALL addRowSetApproveListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XRowSetApproveListener>& listener) throw( ::com::sun::star::uno::RuntimeException );
371 virtual void SAL_CALL removeRowSetApproveListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XRowSetApproveListener>& listener) throw( ::com::sun::star::uno::RuntimeException );
373 // XSQLErrorBroadcaster
374 virtual void SAL_CALL errorOccured(const ::com::sun::star::sdb::SQLErrorEvent& aEvent) throw( ::com::sun::star::uno::RuntimeException );
376 // XSQLErrorListener
377 virtual void SAL_CALL addSQLErrorListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSQLErrorListener>& _rListener) throw( ::com::sun::star::uno::RuntimeException );
378 virtual void SAL_CALL removeSQLErrorListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSQLErrorListener>& _rListener) throw( ::com::sun::star::uno::RuntimeException );
380 // XDatabaseParameterBroadcaster2
381 virtual void SAL_CALL addDatabaseParameterListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener>& aListener) throw( ::com::sun::star::uno::RuntimeException );
382 virtual void SAL_CALL removeDatabaseParameterListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener>& aListener) throw( ::com::sun::star::uno::RuntimeException );
384 // XDatabaseParameterBroadcaster
385 virtual void SAL_CALL addParameterListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener>& aListener) throw( ::com::sun::star::uno::RuntimeException );
386 virtual void SAL_CALL removeParameterListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener>& aListener) throw( ::com::sun::star::uno::RuntimeException );
388 // XDatabaseParameterListener
389 virtual sal_Bool SAL_CALL approveParameter(const ::com::sun::star::form::DatabaseParameterEvent& aEvent) throw( ::com::sun::star::uno::RuntimeException );
391 // XConfirmDeleteBroadcaster
392 virtual void SAL_CALL addConfirmDeleteListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XConfirmDeleteListener>& aListener) throw( ::com::sun::star::uno::RuntimeException );
393 virtual void SAL_CALL removeConfirmDeleteListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XConfirmDeleteListener>& aListener) throw( ::com::sun::star::uno::RuntimeException );
395 // XConfirmDeleteListener
396 virtual sal_Bool SAL_CALL confirmDelete(const ::com::sun::star::sdb::RowChangeEvent& aEvent) throw( ::com::sun::star::uno::RuntimeException );
398 // XServiceInfo
399 virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) throw(::com::sun::star::uno::RuntimeException);
400 virtual OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException);
401 virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames(void) throw(::com::sun::star::uno::RuntimeException);
403 // XResetListener
404 virtual sal_Bool SAL_CALL approveReset(const ::com::sun::star::lang::EventObject& rEvent) throw( ::com::sun::star::uno::RuntimeException );
405 virtual void SAL_CALL resetted(const ::com::sun::star::lang::EventObject& rEvent) throw( ::com::sun::star::uno::RuntimeException );
407 // XFeatureInvalidation
408 virtual void SAL_CALL invalidateFeatures( const ::com::sun::star::uno::Sequence< ::sal_Int16 >& Features ) throw (::com::sun::star::uno::RuntimeException);
409 virtual void SAL_CALL invalidateAllFeatures( ) throw (::com::sun::star::uno::RuntimeException);
411 // method for registration
412 static ::com::sun::star::uno::Sequence< OUString > getSupportedServiceNames_Static(void);
414 // comphelper::OPropertyArrayUsageHelper
415 virtual void fillProperties(
416 ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps,
417 ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rAggregateProps
418 ) const;
420 protected:
421 // DispatchInterceptor
422 virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch>
423 interceptedQueryDispatch(
424 const ::com::sun::star::util::URL& aURL,
425 const OUString& aTargetFrameName,
426 sal_Int32 nSearchFlags
427 ) throw( ::com::sun::star::uno::RuntimeException );
429 virtual ::osl::Mutex* getInterceptorMutex() { return &m_aMutex; }
431 /// update all our dispatchers
432 void updateAllDispatchers() const;
434 /** disposes all dispatchers in m_aFeatureDispatchers, and empties m_aFeatureDispatchers
436 void disposeAllFeaturesAndDispatchers() SAL_THROW(());
438 void startFiltering();
439 void stopFiltering();
440 void setFilter(::std::vector<FmFieldInfo>&);
441 void startListening();
442 void stopListening();
444 /** ensures that we have an interaction handler, if possible
446 If an interaction handler was provided at creation time (<member>initialize</member>), this
447 one will be used. Else, an attempt is made to create an <type scope="com::sun::star::sdb">InteractionHandler</type>
448 is made.
450 @return <TRUE/>
451 if and only if <member>m_xInteractionHandler</member> is valid when the method returns
453 bool ensureInteractionHandler();
455 /** replaces one of our controls with another one
457 Upon successful replacing, the old control will be disposed. Also, internal members pointing
458 to the current or active control will be adjusted. Yet more, if the replaced control was
459 the active control, the new control will be made active.
461 @param _rxExistentControl
462 The control to replace. Must be one of the controls in our ControlContainer.
463 @param _rxNewControl
464 The control which should replace the existent control.
465 @return
466 <TRUE/> if and only if the control was successfully replaced
468 bool replaceControl(
469 const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >& _rxExistentControl,
470 const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >& _rxNewControl
473 // we're listening at all bound controls for modifications
474 void startControlModifyListening(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
475 void stopControlModifyListening(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
477 void setLocks();
478 void setControlLock(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
479 void addToEventAttacher(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
480 void removeFromEventAttacher(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
481 void toggleAutoFields(sal_Bool bAutoFields);
482 void unload() throw( ::com::sun::star::uno::RuntimeException );
483 void removeBoundFieldListener();
485 void startFormListening( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxForm, sal_Bool _bPropertiesOnly );
486 void stopFormListening( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxForm, sal_Bool _bPropertiesOnly );
488 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> findControl( ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> >& rCtrls, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel>& rxCtrlModel, sal_Bool _bRemove, sal_Bool _bOverWrite ) const;
490 void insertControl(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
491 void removeControl(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
493 /// called when a new control is to be handled by the controller
494 void implControlInserted( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& _rxControl, bool _bAddToEventAttacher );
495 /// called when a control is not to be handled by the controller anymore
496 void implControlRemoved( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& _rxControl, bool _bRemoveFromEventAttacher );
498 /** sets m_xCurrentControl, plus does administrative tasks depending on it
500 void implSetCurrentControl( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >& _rxControl );
502 /** invalidates the FormFeatures which depend on the current control
504 void implInvalidateCurrentControlDependentFeatures();
506 bool impl_isDisposed_nofail() const { return FormController_BASE::rBHelper.bDisposed; }
507 void impl_checkDisposed_throw() const;
509 void impl_onModify();
511 /** adds the given filter row to m_aFilterRows, setting m_nCurrentFilterPosition to 0 if the newly added
512 row is the first one.
514 @precond
515 our mutex is locked
517 void impl_addFilterRow( const FmFilterRow& _row );
519 /** adds an empty filter row to m_aFilterRows, and notifies our listeners
521 void impl_appendEmptyFilterRow( ::osl::ClearableMutexGuard& _rClearBeforeNotify );
523 sal_Bool isLocked() const {return m_bLocked;}
524 sal_Bool determineLockState() const;
526 Window* getDialogParentWindow();
527 // returns the window which should be used as parent window for dialogs
529 ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor> createInterceptor(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterception>& _xInterception);
530 // create a new interceptor, register it on the given object
531 void deleteInterceptor(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterception>& _xInterception);
532 // if createInterceptor was called for the given object the according interceptor will be removed
533 // from the objects interceptor chain and released
535 /** checks all form controls belonging to our form for validity
537 If a form control supports the XValidatableFormComponent interface, this is used to determine
538 the validity of the control. If the interface is not supported, the control is supposed to be
539 valid.
541 @param _rFirstInvalidityExplanation
542 if the method returns <FALSE/> (i.e. if there is an invalid control), this string contains
543 the explanation for the invalidity, as obtained from the validator.
545 @param _rxFirstInvalidModel
546 if the method returns <FALSE/> (i.e. if there is an invalid control), this contains
547 the control model
549 @return
550 <TRUE/> if and only if all controls belonging to our form are valid
552 bool checkFormComponentValidity(
553 OUString& /* [out] */ _rFirstInvalidityExplanation,
554 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& /* [out] */ _rxFirstInvalidModel
555 ) SAL_THROW(());
557 /** locates the control which belongs to a given model
559 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >
560 locateControl( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& _rxModel ) SAL_THROW(());
562 // set the text for all filters
563 void impl_setTextOnAllFilter_throw();
565 // in filter mode we do not listen for changes
566 sal_Bool isListeningForChanges() const {return m_bDBConnection && !m_bFiltering && !isLocked();}
567 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> isInList(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer>& xPeer) const;
569 DECL_LINK( OnActivateTabOrder, void* );
570 DECL_LINK( OnInvalidateFeatures, void* );
571 DECL_LINK( OnLoad, void* );
572 DECL_LINK( OnToggleAutoFields, void* );
573 DECL_LINK( OnActivated, void* );
574 DECL_LINK( OnDeactivated, void* );
577 } // namespace svxform
579 #endif // _SVX_FMCTRLER_HXX
581 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */