Bump version to 6.4-15
[LibreOffice.git] / svx / source / inc / formcontroller.hxx
blob7722cccbd8d4c61e80ba86ddd9177c9479ac0aaa
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 INCLUDED_SVX_SOURCE_INC_FORMCONTROLLER_HXX
20 #define INCLUDED_SVX_SOURCE_INC_FORMCONTROLLER_HXX
22 #include <sal/config.h>
24 #include <memory>
25 #include <vector>
27 #include "delayedevent.hxx"
28 #include "formdispatchinterceptor.hxx"
29 #include "sqlparserclient.hxx"
31 #include <com/sun/star/awt/XControl.hpp>
32 #include <com/sun/star/awt/XControlModel.hpp>
33 #include <com/sun/star/awt/XFocusListener.hpp>
34 #include <com/sun/star/awt/XItemListener.hpp>
35 #include <com/sun/star/awt/XMouseListener.hpp>
36 #include <com/sun/star/awt/XTabController.hpp>
37 #include <com/sun/star/awt/XTextComponent.hpp>
38 #include <com/sun/star/container/XContainerListener.hpp>
39 #include <com/sun/star/container/XEnumerationAccess.hpp>
40 #include <com/sun/star/container/XIndexContainer.hpp>
41 #include <com/sun/star/form/DatabaseDeleteEvent.hpp>
42 #include <com/sun/star/form/DatabaseParameterEvent.hpp>
43 #include <com/sun/star/form/ErrorEvent.hpp>
44 #include <com/sun/star/form/validation/XFormComponentValidityListener.hpp>
45 #include <com/sun/star/form/XConfirmDeleteBroadcaster.hpp>
46 #include <com/sun/star/form/XConfirmDeleteListener.hpp>
47 #include <com/sun/star/form/XDatabaseParameterBroadcaster2.hpp>
48 #include <com/sun/star/form/XDatabaseParameterListener.hpp>
49 #include <com/sun/star/form/runtime/XFormController.hpp>
50 #include <com/sun/star/form/runtime/XFilterController.hpp>
51 #include <com/sun/star/form/XFormControllerListener.hpp>
52 #include <com/sun/star/form/XGridControlListener.hpp>
53 #include <com/sun/star/form/XLoadListener.hpp>
54 #include <com/sun/star/form/XResetListener.hpp>
55 #include <com/sun/star/frame/XDispatch.hpp>
56 #include <com/sun/star/frame/XDispatchProviderInterception.hpp>
57 #include <com/sun/star/frame/XDispatchProviderInterceptor.hpp>
58 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
59 #include <com/sun/star/lang/XServiceInfo.hpp>
60 #include <com/sun/star/script/XEventAttacherManager.hpp>
61 #include <com/sun/star/sdb/XRowSetApproveBroadcaster.hpp>
62 #include <com/sun/star/sdb/XRowSetApproveListener.hpp>
63 #include <com/sun/star/sdb/XSingleSelectQueryComposer.hpp>
64 #include <com/sun/star/sdb/XSQLErrorBroadcaster.hpp>
65 #include <com/sun/star/sdb/XSQLErrorListener.hpp>
66 #include <com/sun/star/sdbc/XRowSetListener.hpp>
67 #include <com/sun/star/task/XInteractionHandler.hpp>
68 #include <com/sun/star/util/XModeSelector.hpp>
69 #include <com/sun/star/util/XModifyBroadcaster.hpp>
70 #include <com/sun/star/util/XModifyListener.hpp>
72 #include <comphelper/proparrhlp.hxx>
73 #include <comphelper/interfacecontainer2.hxx>
74 #include <cppuhelper/basemutex.hxx>
75 #include <cppuhelper/propshlp.hxx>
76 #include <rtl/ref.hxx>
77 #include <vcl/timer.hxx>
78 #include <vcl/idle.hxx>
80 #include <cppuhelper/compbase.hxx>
82 struct FmXTextComponentLess
84 bool operator() (const css::uno::Reference< css::awt::XTextComponent >& x, const css::uno::Reference< css::awt::XTextComponent >& y) const
86 return reinterpret_cast<sal_Int64>(x.get()) < reinterpret_cast<sal_Int64>(y.get());
90 typedef ::std::map< css::uno::Reference< css::awt::XTextComponent >, OUString, FmXTextComponentLess> FmFilterRow;
91 typedef ::std::vector< FmFilterRow > FmFilterRows;
92 typedef ::std::vector< css::uno::Reference< css::form::runtime::XFormController > > FmFormControllers;
94 namespace vcl { class Window; }
96 namespace svxform
98 typedef ::std::vector< css::uno::Reference< css::awt::XTextComponent > > FilterComponents;
99 class ControlBorderManager;
100 struct FmFieldInfo;
102 typedef cppu::WeakComponentImplHelper < css::form::runtime::XFormController
103 , css::form::runtime::XFilterController
104 , css::awt::XFocusListener
105 , css::form::XLoadListener
106 , css::beans::XPropertyChangeListener
107 , css::awt::XTextListener
108 , css::awt::XItemListener
109 , css::container::XContainerListener
110 , css::util::XModifyListener
111 , css::form::XConfirmDeleteListener
112 , css::sdb::XSQLErrorListener
113 , css::sdbc::XRowSetListener
114 , css::sdb::XRowSetApproveListener
115 , css::form::XDatabaseParameterListener
116 , css::lang::XServiceInfo
117 , css::form::XResetListener
118 , css::frame::XDispatch
119 , css::awt::XMouseListener
120 , css::form::validation::XFormComponentValidityListener
121 , css::task::XInteractionHandler
122 , css::form::XGridControlListener
123 , css::form::runtime::XFeatureInvalidation
124 > FormController_BASE;
126 class ColumnInfoCache;
127 class FormController final : public ::cppu::BaseMutex
128 ,public FormController_BASE
129 ,public ::cppu::OPropertySetHelper
130 ,public DispatchInterceptor
131 ,public ::comphelper::OAggregationArrayUsageHelper< FormController >
132 ,public ::svxform::OSQLParserClient
134 typedef ::std::map < sal_Int16,
135 css::uno::Reference< css::frame::XDispatch >
136 > DispatcherContainer;
138 css::uno::Reference< css::uno::XAggregation> m_xAggregate;
139 css::uno::Reference< css::awt::XTabController> m_xTabController;
140 css::uno::Reference< css::awt::XControl> m_xActiveControl, m_xCurrentControl;
141 css::uno::Reference< css::container::XIndexAccess> m_xModelAsIndex;
142 css::uno::Reference< css::script::XEventAttacherManager> m_xModelAsManager;
143 css::uno::Reference< css::uno::XInterface> m_xParent;
144 css::uno::Reference< css::uno::XComponentContext> m_xComponentContext;
145 // Composer used for checking filter conditions
146 css::uno::Reference< css::sdb::XSingleSelectQueryComposer > m_xComposer;
147 css::uno::Reference< css::task::XInteractionHandler > m_xInteractionHandler;
148 css::uno::Reference< css::form::runtime::XFormControllerContext > m_xFormControllerContext;
150 css::uno::Sequence< css::uno::Reference< css::awt::XControl> > m_aControls;
151 ::comphelper::OInterfaceContainerHelper2
152 m_aActivateListeners,
153 m_aModifyListeners,
154 m_aErrorListeners,
155 m_aDeleteListeners,
156 m_aRowSetApproveListeners,
157 m_aParameterListeners,
158 m_aFilterListeners;
160 FmFormControllers m_aChildren;
161 FilterComponents m_aFilterComponents;
162 FmFilterRows m_aFilterRows;
164 Idle m_aTabActivationIdle;
165 Timer m_aFeatureInvalidationTimer;
167 ::svxform::ControlBorderManager
168 m_aControlBorderManager;
170 css::uno::Reference< css::form::runtime::XFormOperations >
171 m_xFormOperations;
172 DispatcherContainer m_aFeatureDispatchers;
173 ::std::set< sal_Int16 > m_aInvalidFeatures; // for asynchronous feature invalidation
175 OUString m_aMode;
177 ::svxform::DelayedEvent m_aLoadEvent;
178 ::svxform::DelayedEvent m_aToggleEvent;
179 ::svxform::DelayedEvent m_aActivationEvent;
180 ::svxform::DelayedEvent m_aDeactivationEvent;
182 ::std::unique_ptr< ColumnInfoCache >
183 m_pColumnInfoCache;
185 sal_Int32 m_nCurrentFilterPosition; // current level for filtering (or-criteria)
187 bool m_bCurrentRecordModified : 1;
188 bool m_bCurrentRecordNew : 1;
189 bool m_bLocked : 1;
190 bool m_bDBConnection : 1; // focus listener only for database forms
191 bool m_bCycle : 1;
192 bool m_bCanInsert : 1;
193 bool m_bCanUpdate : 1;
194 bool m_bCommitLock : 1; // lock the committing of controls see focusGained
195 bool m_bModified : 1; // is the content of a control modified?
196 bool m_bControlsSorted : 1;
197 bool m_bFiltering : 1;
198 bool m_bAttachEvents : 1;
199 bool m_bDetachEvents : 1;
200 bool m_bAttemptedHandlerCreation : 1;
201 bool m_bSuspendFilterTextListening; // no bit field, passed around as reference
203 // as we want to intercept dispatches of _all_ controls we're responsible for, and an object implementing
204 // the css::frame::XDispatchProviderInterceptor interface can intercept only _one_ objects dispatches, we need a helper class
205 std::vector<rtl::Reference<DispatchInterceptionMultiplexer>> m_aControlDispatchInterceptors;
207 public:
208 FormController( const css::uno::Reference< css::uno::XComponentContext > & _rxORB );
210 private:
211 virtual ~FormController() override;
213 // XInterface
214 virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type& type) override;
215 virtual void SAL_CALL acquire() throw () override;
216 virtual void SAL_CALL release() throw () override;
218 // XTypeProvider
219 virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override;
220 virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override;
222 // XDispatch
223 virtual void SAL_CALL dispatch( const css::util::URL& _rURL, const css::uno::Sequence< css::beans::PropertyValue >& _rArgs ) override;
224 virtual void SAL_CALL addStatusListener( const css::uno::Reference< css::frame::XStatusListener >& _rxListener, const css::util::URL& _rURL ) override;
225 virtual void SAL_CALL removeStatusListener( const css::uno::Reference< css::frame::XStatusListener >& _rxListener, const css::util::URL& _rURL ) override;
227 // css::container::XChild
228 virtual css::uno::Reference< css::uno::XInterface> SAL_CALL getParent() override;
229 virtual void SAL_CALL setParent(const css::uno::Reference< css::uno::XInterface>& Parent) override;
231 // css::lang::XEventListener
232 virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override;
234 // OComponentHelper
235 virtual void SAL_CALL disposing() override;
237 // OPropertySetHelper
238 virtual sal_Bool SAL_CALL convertFastPropertyValue( css::uno::Any & rConvertedValue, css::uno::Any & rOldValue,
239 sal_Int32 nHandle, const css::uno::Any& rValue ) override;
241 virtual void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const css::uno::Any& rValue ) override;
242 virtual void SAL_CALL getFastPropertyValue( css::uno::Any& rValue, sal_Int32 nHandle ) const override;
244 virtual css::uno::Reference< css::beans::XPropertySetInfo> SAL_CALL getPropertySetInfo() override;
245 virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper() override;
247 using OPropertySetHelper::getFastPropertyValue;
249 // XFilterController
250 virtual ::sal_Int32 SAL_CALL getFilterComponents() override;
251 virtual ::sal_Int32 SAL_CALL getDisjunctiveTerms() override;
252 virtual void SAL_CALL addFilterControllerListener( const css::uno::Reference< css::form::runtime::XFilterControllerListener >& Listener ) override;
253 virtual void SAL_CALL removeFilterControllerListener( const css::uno::Reference< css::form::runtime::XFilterControllerListener >& Listener ) override;
254 virtual void SAL_CALL setPredicateExpression( ::sal_Int32 Component, ::sal_Int32 Term, const OUString& PredicateExpression ) override;
255 virtual css::uno::Reference< css::awt::XControl > SAL_CALL getFilterComponent( ::sal_Int32 Component ) override;
256 virtual css::uno::Sequence< css::uno::Sequence< OUString > > SAL_CALL getPredicateExpressions() override;
257 virtual void SAL_CALL removeDisjunctiveTerm( ::sal_Int32 Term ) override;
258 virtual void SAL_CALL appendEmptyDisjunctiveTerm() override;
259 virtual ::sal_Int32 SAL_CALL getActiveTerm() override;
260 virtual void SAL_CALL setActiveTerm( ::sal_Int32 ActiveTerm ) override;
262 // XElementAccess
263 virtual css::uno::Type SAL_CALL getElementType() override;
264 virtual sal_Bool SAL_CALL hasElements() override;
266 // css::container::XEnumerationAccess
267 virtual css::uno::Reference< css::container::XEnumeration> SAL_CALL createEnumeration() override;
269 // css::container::XContainerListener
270 virtual void SAL_CALL elementInserted(const css::container::ContainerEvent& rEvent) override;
271 virtual void SAL_CALL elementReplaced(const css::container::ContainerEvent& rEvent) override;
272 virtual void SAL_CALL elementRemoved(const css::container::ContainerEvent& rEvent) override;
274 // XLoadListener
275 virtual void SAL_CALL loaded(const css::lang::EventObject& rEvent) override;
276 virtual void SAL_CALL unloaded(const css::lang::EventObject& rEvent) override;
277 virtual void SAL_CALL unloading(const css::lang::EventObject& aEvent) override;
278 virtual void SAL_CALL reloading(const css::lang::EventObject& aEvent) override;
279 virtual void SAL_CALL reloaded(const css::lang::EventObject& aEvent) override;
281 // XModeSelector
282 virtual void SAL_CALL setMode(const OUString& Mode) override;
283 virtual OUString SAL_CALL getMode() override;
284 virtual css::uno::Sequence< OUString > SAL_CALL getSupportedModes() override;
285 virtual sal_Bool SAL_CALL supportsMode(const OUString& Mode) override;
287 // css::container::XIndexAccess
288 virtual sal_Int32 SAL_CALL getCount() override;
289 virtual css::uno::Any SAL_CALL getByIndex(sal_Int32 Index) override;
291 // XModifyBroadcaster
292 virtual void SAL_CALL addModifyListener(const css::uno::Reference< css::util::XModifyListener>& l) override;
293 virtual void SAL_CALL removeModifyListener(const css::uno::Reference< css::util::XModifyListener>& l) override;
295 // XFocusListener
296 virtual void SAL_CALL focusGained(const css::awt::FocusEvent& e) override;
297 virtual void SAL_CALL focusLost(const css::awt::FocusEvent& e) override;
299 // XMouseListener
300 virtual void SAL_CALL mousePressed( const css::awt::MouseEvent& _rEvent ) override;
301 virtual void SAL_CALL mouseReleased( const css::awt::MouseEvent& _rEvent ) override;
302 virtual void SAL_CALL mouseEntered( const css::awt::MouseEvent& _rEvent ) override;
303 virtual void SAL_CALL mouseExited( const css::awt::MouseEvent& _rEvent ) override;
305 // XFormComponentValidityListener
306 virtual void SAL_CALL componentValidityChanged( const css::lang::EventObject& _rSource ) override;
308 // XInteractionHandler
309 virtual void SAL_CALL handle( const css::uno::Reference< css::task::XInteractionRequest >& Request ) override;
311 // XGridControlListener
312 virtual void SAL_CALL columnChanged( const css::lang::EventObject& _event ) override;
314 // css::beans::XPropertyChangeListener -> change of states
315 virtual void SAL_CALL propertyChange(const css::beans::PropertyChangeEvent& evt) override;
317 // XTextListener -> set modify
318 virtual void SAL_CALL textChanged(const css::awt::TextEvent& rEvent) override;
320 // XItemListener -> set modify
321 virtual void SAL_CALL itemStateChanged(const css::awt::ItemEvent& rEvent) override;
323 // XModifyListener -> set modify
324 virtual void SAL_CALL modified(const css::lang::EventObject& rEvent) override;
326 // XFormController
327 virtual css::uno::Reference< css::form::runtime::XFormOperations > SAL_CALL getFormOperations() override;
328 virtual css::uno::Reference< css::awt::XControl> SAL_CALL getCurrentControl() override;
329 virtual void SAL_CALL addActivateListener(const css::uno::Reference< css::form::XFormControllerListener>& l) override;
330 virtual void SAL_CALL removeActivateListener(const css::uno::Reference< css::form::XFormControllerListener>& l) override;
331 virtual void SAL_CALL addChildController( const css::uno::Reference< css::form::runtime::XFormController >& ChildController ) override;
333 virtual css::uno::Reference< css::form::runtime::XFormControllerContext > SAL_CALL getContext() override;
334 virtual void SAL_CALL setContext( const css::uno::Reference< css::form::runtime::XFormControllerContext >& _context ) override;
335 virtual css::uno::Reference< css::task::XInteractionHandler > SAL_CALL getInteractionHandler() override;
336 virtual void SAL_CALL setInteractionHandler( const css::uno::Reference< css::task::XInteractionHandler >& _interactionHandler ) override;
338 // XTabController
339 virtual css::uno::Sequence< css::uno::Reference< css::awt::XControl> > SAL_CALL getControls() override;
341 virtual void SAL_CALL setModel(const css::uno::Reference< css::awt::XTabControllerModel>& Model) override;
342 virtual css::uno::Reference< css::awt::XTabControllerModel> SAL_CALL getModel() override;
344 virtual void SAL_CALL setContainer(const css::uno::Reference< css::awt::XControlContainer>& Container) override;
345 virtual css::uno::Reference< css::awt::XControlContainer> SAL_CALL getContainer() override;
347 virtual void SAL_CALL autoTabOrder() override;
348 virtual void SAL_CALL activateTabOrder() override;
350 virtual void SAL_CALL activateFirst() override;
351 virtual void SAL_CALL activateLast() override;
353 // css::sdbc::XRowSetListener
354 virtual void SAL_CALL cursorMoved(const css::lang::EventObject& event) override;
355 virtual void SAL_CALL rowChanged(const css::lang::EventObject& event) override;
356 virtual void SAL_CALL rowSetChanged(const css::lang::EventObject& event) override;
358 // XRowSetApproveListener
359 virtual sal_Bool SAL_CALL approveCursorMove(const css::lang::EventObject& event) override;
360 virtual sal_Bool SAL_CALL approveRowChange(const css::sdb::RowChangeEvent& event) override;
361 virtual sal_Bool SAL_CALL approveRowSetChange(const css::lang::EventObject& event) override;
363 // XRowSetApproveBroadcaster
364 virtual void SAL_CALL addRowSetApproveListener(const css::uno::Reference< css::sdb::XRowSetApproveListener>& listener) override;
365 virtual void SAL_CALL removeRowSetApproveListener(const css::uno::Reference< css::sdb::XRowSetApproveListener>& listener) override;
367 // XSQLErrorBroadcaster
368 virtual void SAL_CALL errorOccured(const css::sdb::SQLErrorEvent& aEvent) override;
370 // XSQLErrorListener
371 virtual void SAL_CALL addSQLErrorListener(const css::uno::Reference< css::sdb::XSQLErrorListener>& _rListener) override;
372 virtual void SAL_CALL removeSQLErrorListener(const css::uno::Reference< css::sdb::XSQLErrorListener>& _rListener) override;
374 // XDatabaseParameterBroadcaster2
375 virtual void SAL_CALL addDatabaseParameterListener(const css::uno::Reference< css::form::XDatabaseParameterListener>& aListener) override;
376 virtual void SAL_CALL removeDatabaseParameterListener(const css::uno::Reference< css::form::XDatabaseParameterListener>& aListener) override;
378 // XDatabaseParameterBroadcaster
379 virtual void SAL_CALL addParameterListener(const css::uno::Reference< css::form::XDatabaseParameterListener>& aListener) override;
380 virtual void SAL_CALL removeParameterListener(const css::uno::Reference< css::form::XDatabaseParameterListener>& aListener) override;
382 // XDatabaseParameterListener
383 virtual sal_Bool SAL_CALL approveParameter(const css::form::DatabaseParameterEvent& aEvent) override;
385 // XConfirmDeleteBroadcaster
386 virtual void SAL_CALL addConfirmDeleteListener(const css::uno::Reference< css::form::XConfirmDeleteListener>& aListener) override;
387 virtual void SAL_CALL removeConfirmDeleteListener(const css::uno::Reference< css::form::XConfirmDeleteListener>& aListener) override;
389 // XConfirmDeleteListener
390 virtual sal_Bool SAL_CALL confirmDelete(const css::sdb::RowChangeEvent& aEvent) override;
392 // XServiceInfo
393 virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
394 virtual OUString SAL_CALL getImplementationName() override;
395 virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
397 // XResetListener
398 virtual sal_Bool SAL_CALL approveReset(const css::lang::EventObject& rEvent) override;
399 virtual void SAL_CALL resetted(const css::lang::EventObject& rEvent) override;
401 // XFeatureInvalidation
402 virtual void SAL_CALL invalidateFeatures( const css::uno::Sequence< ::sal_Int16 >& Features ) override;
403 virtual void SAL_CALL invalidateAllFeatures( ) override;
405 // method for registration
406 static css::uno::Sequence< OUString > const & getSupportedServiceNames_Static();
408 // comphelper::OPropertyArrayUsageHelper
409 virtual void fillProperties(
410 css::uno::Sequence< css::beans::Property >& /* [out] */ _rProps,
411 css::uno::Sequence< css::beans::Property >& /* [out] */ _rAggregateProps
412 ) const override;
414 // DispatchInterceptor
415 virtual css::uno::Reference< css::frame::XDispatch>
416 interceptedQueryDispatch(
417 const css::util::URL& aURL,
418 const OUString& aTargetFrameName,
419 sal_Int32 nSearchFlags
420 ) override;
422 virtual ::osl::Mutex* getInterceptorMutex() override { return &m_aMutex; }
424 /// update all our dispatchers
425 void updateAllDispatchers() const;
427 /** disposes all dispatchers in m_aFeatureDispatchers, and empties m_aFeatureDispatchers
429 void disposeAllFeaturesAndDispatchers();
431 void startFiltering();
432 void stopFiltering();
433 void setFilter(::std::vector<FmFieldInfo>&);
434 void startListening();
435 void stopListening();
437 /** ensures that we have an interaction handler, if possible
439 If an interaction handler was provided at creation time (<member>initialize</member>), this
440 one will be used. Else, an attempt is made to create an <type scope="css::sdb">InteractionHandler</type>
441 is made.
443 @return <TRUE/>
444 if and only if <member>m_xInteractionHandler</member> is valid when the method returns
446 bool ensureInteractionHandler();
448 /** replaces one of our controls with another one
450 Upon successful replacing, the old control will be disposed. Also, internal members pointing
451 to the current or active control will be adjusted. Yet more, if the replaced control was
452 the active control, the new control will be made active.
454 @param _rxExistentControl
455 The control to replace. Must be one of the controls in our ControlContainer.
456 @param _rxNewControl
457 The control which should replace the existent control.
458 @return
459 <TRUE/> if and only if the control was successfully replaced
461 bool replaceControl(
462 const css::uno::Reference< css::awt::XControl >& _rxExistentControl,
463 const css::uno::Reference< css::awt::XControl >& _rxNewControl
466 // we're listening at all bound controls for modifications
467 void startControlModifyListening(const css::uno::Reference< css::awt::XControl>& xControl);
468 void stopControlModifyListening(const css::uno::Reference< css::awt::XControl>& xControl);
470 void setLocks();
471 void setControlLock(const css::uno::Reference< css::awt::XControl>& xControl);
472 void addToEventAttacher(const css::uno::Reference< css::awt::XControl>& xControl);
473 void removeFromEventAttacher(const css::uno::Reference< css::awt::XControl>& xControl);
474 void toggleAutoFields(bool bAutoFields);
475 /// @throws css::uno::RuntimeException
476 void unload();
477 void removeBoundFieldListener();
479 void startFormListening( const css::uno::Reference< css::beans::XPropertySet >& _rxForm, bool _bPropertiesOnly );
480 void stopFormListening( const css::uno::Reference< css::beans::XPropertySet >& _rxForm, bool _bPropertiesOnly );
482 css::uno::Reference< css::awt::XControl> findControl( css::uno::Sequence< css::uno::Reference< css::awt::XControl> >& rCtrls, const css::uno::Reference< css::awt::XControlModel>& rxCtrlModel, bool _bRemove, bool _bOverWrite ) const;
484 void insertControl(const css::uno::Reference< css::awt::XControl>& xControl);
485 void removeControl(const css::uno::Reference< css::awt::XControl>& xControl);
487 /// called when a new control is to be handled by the controller
488 void implControlInserted( const css::uno::Reference< css::awt::XControl>& _rxControl, bool _bAddToEventAttacher );
489 /// called when a control is not to be handled by the controller anymore
490 void implControlRemoved( const css::uno::Reference< css::awt::XControl>& _rxControl, bool _bRemoveFromEventAttacher );
492 /** sets m_xCurrentControl, plus does administrative tasks depending on it
494 void implSetCurrentControl( const css::uno::Reference< css::awt::XControl >& _rxControl );
496 /** invalidates the FormFeatures which depend on the current control
498 void implInvalidateCurrentControlDependentFeatures();
500 bool impl_isDisposed_nofail() const { return FormController_BASE::rBHelper.bDisposed; }
501 void impl_checkDisposed_throw() const;
503 void impl_onModify();
505 /** adds the given filter row to m_aFilterRows, setting m_nCurrentFilterPosition to 0 if the newly added
506 row is the first one.
508 @precond
509 our mutex is locked
511 void impl_addFilterRow( const FmFilterRow& _row );
513 /** adds an empty filter row to m_aFilterRows, and notifies our listeners
515 void impl_appendEmptyFilterRow( ::osl::ClearableMutexGuard& _rClearBeforeNotify );
517 bool isLocked() const {return m_bLocked;}
518 bool determineLockState() const;
520 vcl::Window* getDialogParentWindow();
521 // returns the window which should be used as parent window for dialogs
523 css::uno::Reference< css::frame::XDispatchProviderInterceptor> createInterceptor(const css::uno::Reference< css::frame::XDispatchProviderInterception>& _xInterception);
524 // create a new interceptor, register it on the given object
525 void deleteInterceptor(const css::uno::Reference< css::frame::XDispatchProviderInterception>& _xInterception);
526 // if createInterceptor was called for the given object the according interceptor will be removed
527 // from the objects interceptor chain and released
529 /** checks all form controls belonging to our form for validity
531 If a form control supports the XValidatableFormComponent interface, this is used to determine
532 the validity of the control. If the interface is not supported, the control is supposed to be
533 valid.
535 @param _rFirstInvalidityExplanation
536 if the method returns <FALSE/> (i.e. if there is an invalid control), this string contains
537 the explanation for the invalidity, as obtained from the validator.
539 @param _rxFirstInvalidModel
540 if the method returns <FALSE/> (i.e. if there is an invalid control), this contains
541 the control model
543 @return
544 <TRUE/> if and only if all controls belonging to our form are valid
546 bool checkFormComponentValidity(
547 OUString& /* [out] */ _rFirstInvalidityExplanation,
548 css::uno::Reference< css::awt::XControlModel >& /* [out] */ _rxFirstInvalidModel
551 /** locates the control which belongs to a given model
553 css::uno::Reference< css::awt::XControl >
554 locateControl( const css::uno::Reference< css::awt::XControlModel >& _rxModel );
556 // set the text for all filters
557 void impl_setTextOnAllFilter_throw();
559 // in filter mode we do not listen for changes
560 bool isListeningForChanges() const {return m_bDBConnection && !m_bFiltering && !isLocked();}
561 css::uno::Reference< css::awt::XControl> isInList(const css::uno::Reference< css::awt::XWindowPeer>& xPeer) const;
563 DECL_LINK( OnActivateTabOrder, Timer*, void );
564 DECL_LINK( OnInvalidateFeatures, Timer*, void );
565 DECL_LINK( OnLoad, void*, void );
566 DECL_LINK( OnToggleAutoFields, void*, void );
567 DECL_LINK( OnActivated, void*, void );
568 DECL_LINK( OnDeactivated, void*, void );
573 #endif // INCLUDED_SVX_SOURCE_INC_FORMCONTROLLER_HXX
575 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */