1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
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>
27 #include "delayedevent.hxx"
28 #include "fmcontrolbordermanager.hxx"
29 #include "formdispatchinterceptor.hxx"
30 #include "sqlparserclient.hxx"
32 #include <com/sun/star/awt/XControl.hpp>
33 #include <com/sun/star/awt/XControlModel.hpp>
34 #include <com/sun/star/awt/XFocusListener.hpp>
35 #include <com/sun/star/awt/XItemListener.hpp>
36 #include <com/sun/star/awt/XMouseListener.hpp>
37 #include <com/sun/star/awt/XTabController.hpp>
38 #include <com/sun/star/awt/XTextComponent.hpp>
39 #include <com/sun/star/container/XContainerListener.hpp>
40 #include <com/sun/star/form/DatabaseParameterEvent.hpp>
41 #include <com/sun/star/form/validation/XFormComponentValidityListener.hpp>
42 #include <com/sun/star/form/XConfirmDeleteListener.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/XDispatch.hpp>
51 #include <com/sun/star/frame/XDispatchProviderInterception.hpp>
52 #include <com/sun/star/frame/XDispatchProviderInterceptor.hpp>
53 #include <com/sun/star/lang/XServiceInfo.hpp>
54 #include <com/sun/star/script/XEventAttacherManager.hpp>
55 #include <com/sun/star/sdb/XRowSetApproveListener.hpp>
56 #include <com/sun/star/sdb/XSingleSelectQueryComposer.hpp>
57 #include <com/sun/star/sdb/XSQLErrorListener.hpp>
58 #include <com/sun/star/sdbc/XRowSetListener.hpp>
59 #include <com/sun/star/task/XInteractionHandler.hpp>
60 #include <com/sun/star/util/XModifyListener.hpp>
62 #include <comphelper/proparrhlp.hxx>
63 #include <comphelper/interfacecontainer2.hxx>
64 #include <cppuhelper/basemutex.hxx>
65 #include <cppuhelper/propshlp.hxx>
66 #include <rtl/ref.hxx>
67 #include <vcl/timer.hxx>
68 #include <vcl/idle.hxx>
70 #include <cppuhelper/compbase.hxx>
72 struct FmXTextComponentLess
74 bool operator() (const css::uno::Reference
< css::awt::XTextComponent
>& x
, const css::uno::Reference
< css::awt::XTextComponent
>& y
) const
76 return reinterpret_cast<sal_Int64
>(x
.get()) < reinterpret_cast<sal_Int64
>(y
.get());
80 typedef ::std::map
< css::uno::Reference
< css::awt::XTextComponent
>, OUString
, FmXTextComponentLess
> FmFilterRow
;
81 typedef ::std::vector
< FmFilterRow
> FmFilterRows
;
83 namespace vcl
{ class Window
; }
87 typedef ::std::vector
< css::uno::Reference
< css::awt::XTextComponent
> > FilterComponents
;
88 class ControlBorderManager
;
91 typedef cppu::WeakComponentImplHelper
< css::form::runtime::XFormController
92 , css::form::runtime::XFilterController
93 , css::awt::XFocusListener
94 , css::form::XLoadListener
95 , css::beans::XPropertyChangeListener
96 , css::awt::XTextListener
97 , css::awt::XItemListener
98 , css::container::XContainerListener
99 , css::util::XModifyListener
100 , css::form::XConfirmDeleteListener
101 , css::sdb::XSQLErrorListener
102 , css::sdbc::XRowSetListener
103 , css::sdb::XRowSetApproveListener
104 , css::form::XDatabaseParameterListener
105 , css::lang::XServiceInfo
106 , css::form::XResetListener
107 , css::frame::XDispatch
108 , css::awt::XMouseListener
109 , css::form::validation::XFormComponentValidityListener
110 , css::task::XInteractionHandler
111 , css::form::XGridControlListener
112 , css::form::runtime::XFeatureInvalidation
113 > FormController_BASE
;
115 class ColumnInfoCache
;
116 class FormController final
: public ::cppu::BaseMutex
117 ,public FormController_BASE
118 ,public ::cppu::OPropertySetHelper
119 ,public DispatchInterceptor
120 ,public ::comphelper::OAggregationArrayUsageHelper
< FormController
>
121 ,public ::svxform::OSQLParserClient
123 typedef ::std::map
< sal_Int16
,
124 css::uno::Reference
< css::frame::XDispatch
>
125 > DispatcherContainer
;
127 css::uno::Reference
< css::uno::XAggregation
> m_xAggregate
;
128 css::uno::Reference
< css::awt::XTabController
> m_xTabController
;
129 css::uno::Reference
< css::awt::XControl
> m_xActiveControl
, m_xCurrentControl
;
130 css::uno::Reference
< css::container::XIndexAccess
> m_xModelAsIndex
;
131 css::uno::Reference
< css::script::XEventAttacherManager
> m_xModelAsManager
;
132 css::uno::Reference
< css::uno::XInterface
> m_xParent
;
133 css::uno::Reference
< css::uno::XComponentContext
> m_xComponentContext
;
134 // Composer used for checking filter conditions
135 css::uno::Reference
< css::sdb::XSingleSelectQueryComposer
> m_xComposer
;
136 css::uno::Reference
< css::task::XInteractionHandler
> m_xInteractionHandler
;
137 css::uno::Reference
< css::form::runtime::XFormControllerContext
> m_xFormControllerContext
;
139 css::uno::Sequence
< css::uno::Reference
< css::awt::XControl
> > m_aControls
;
140 ::comphelper::OInterfaceContainerHelper2
141 m_aActivateListeners
,
145 m_aRowSetApproveListeners
,
146 m_aParameterListeners
,
149 std::vector
< css::uno::Reference
< css::form::runtime::XFormController
> >
151 FilterComponents m_aFilterComponents
;
152 FmFilterRows m_aFilterRows
;
154 Idle m_aTabActivationIdle
;
155 Timer m_aFeatureInvalidationTimer
;
157 ::svxform::ControlBorderManager
158 m_aControlBorderManager
;
160 css::uno::Reference
< css::form::runtime::XFormOperations
>
162 DispatcherContainer m_aFeatureDispatchers
;
163 ::std::set
< sal_Int16
> m_aInvalidFeatures
; // for asynchronous feature invalidation
167 ::svxform::DelayedEvent m_aLoadEvent
;
168 ::svxform::DelayedEvent m_aToggleEvent
;
169 ::svxform::DelayedEvent m_aActivationEvent
;
170 ::svxform::DelayedEvent m_aDeactivationEvent
;
172 ::std::unique_ptr
< ColumnInfoCache
>
175 sal_Int32 m_nCurrentFilterPosition
; // current level for filtering (or-criteria)
177 bool m_bCurrentRecordModified
: 1;
178 bool m_bCurrentRecordNew
: 1;
180 bool m_bDBConnection
: 1; // focus listener only for database forms
182 bool m_bCanInsert
: 1;
183 bool m_bCanUpdate
: 1;
184 bool m_bCommitLock
: 1; // lock the committing of controls see focusGained
185 bool m_bModified
: 1; // is the content of a control modified?
186 bool m_bControlsSorted
: 1;
187 bool m_bFiltering
: 1;
188 bool m_bAttachEvents
: 1;
189 bool m_bDetachEvents
: 1;
190 bool m_bAttemptedHandlerCreation
: 1;
191 bool m_bSuspendFilterTextListening
; // no bit field, passed around as reference
193 // as we want to intercept dispatches of _all_ controls we're responsible for, and an object implementing
194 // the css::frame::XDispatchProviderInterceptor interface can intercept only _one_ objects dispatches, we need a helper class
195 std::vector
<rtl::Reference
<DispatchInterceptionMultiplexer
>> m_aControlDispatchInterceptors
;
198 FormController( const css::uno::Reference
< css::uno::XComponentContext
> & _rxORB
);
201 virtual ~FormController() override
;
204 virtual css::uno::Any SAL_CALL
queryInterface( const css::uno::Type
& type
) override
;
205 virtual void SAL_CALL
acquire() throw () override
;
206 virtual void SAL_CALL
release() throw () override
;
209 virtual css::uno::Sequence
< sal_Int8
> SAL_CALL
getImplementationId() override
;
210 virtual css::uno::Sequence
< css::uno::Type
> SAL_CALL
getTypes( ) override
;
213 virtual void SAL_CALL
dispatch( const css::util::URL
& _rURL
, const css::uno::Sequence
< css::beans::PropertyValue
>& _rArgs
) override
;
214 virtual void SAL_CALL
addStatusListener( const css::uno::Reference
< css::frame::XStatusListener
>& _rxListener
, const css::util::URL
& _rURL
) override
;
215 virtual void SAL_CALL
removeStatusListener( const css::uno::Reference
< css::frame::XStatusListener
>& _rxListener
, const css::util::URL
& _rURL
) override
;
217 // css::container::XChild
218 virtual css::uno::Reference
< css::uno::XInterface
> SAL_CALL
getParent() override
;
219 virtual void SAL_CALL
setParent(const css::uno::Reference
< css::uno::XInterface
>& Parent
) override
;
221 // css::lang::XEventListener
222 virtual void SAL_CALL
disposing(const css::lang::EventObject
& Source
) override
;
225 virtual void SAL_CALL
disposing() override
;
227 // OPropertySetHelper
228 virtual sal_Bool SAL_CALL
convertFastPropertyValue( css::uno::Any
& rConvertedValue
, css::uno::Any
& rOldValue
,
229 sal_Int32 nHandle
, const css::uno::Any
& rValue
) override
;
231 virtual void SAL_CALL
setFastPropertyValue_NoBroadcast( sal_Int32 nHandle
, const css::uno::Any
& rValue
) override
;
232 virtual void SAL_CALL
getFastPropertyValue( css::uno::Any
& rValue
, sal_Int32 nHandle
) const override
;
234 virtual css::uno::Reference
< css::beans::XPropertySetInfo
> SAL_CALL
getPropertySetInfo() override
;
235 virtual ::cppu::IPropertyArrayHelper
& SAL_CALL
getInfoHelper() override
;
237 using OPropertySetHelper::getFastPropertyValue
;
240 virtual ::sal_Int32 SAL_CALL
getFilterComponents() override
;
241 virtual ::sal_Int32 SAL_CALL
getDisjunctiveTerms() override
;
242 virtual void SAL_CALL
addFilterControllerListener( const css::uno::Reference
< css::form::runtime::XFilterControllerListener
>& Listener
) override
;
243 virtual void SAL_CALL
removeFilterControllerListener( const css::uno::Reference
< css::form::runtime::XFilterControllerListener
>& Listener
) override
;
244 virtual void SAL_CALL
setPredicateExpression( ::sal_Int32 Component
, ::sal_Int32 Term
, const OUString
& PredicateExpression
) override
;
245 virtual css::uno::Reference
< css::awt::XControl
> SAL_CALL
getFilterComponent( ::sal_Int32 Component
) override
;
246 virtual css::uno::Sequence
< css::uno::Sequence
< OUString
> > SAL_CALL
getPredicateExpressions() override
;
247 virtual void SAL_CALL
removeDisjunctiveTerm( ::sal_Int32 Term
) override
;
248 virtual void SAL_CALL
appendEmptyDisjunctiveTerm() override
;
249 virtual ::sal_Int32 SAL_CALL
getActiveTerm() override
;
250 virtual void SAL_CALL
setActiveTerm( ::sal_Int32 ActiveTerm
) override
;
253 virtual css::uno::Type SAL_CALL
getElementType() override
;
254 virtual sal_Bool SAL_CALL
hasElements() override
;
256 // css::container::XEnumerationAccess
257 virtual css::uno::Reference
< css::container::XEnumeration
> SAL_CALL
createEnumeration() override
;
259 // css::container::XContainerListener
260 virtual void SAL_CALL
elementInserted(const css::container::ContainerEvent
& rEvent
) override
;
261 virtual void SAL_CALL
elementReplaced(const css::container::ContainerEvent
& rEvent
) override
;
262 virtual void SAL_CALL
elementRemoved(const css::container::ContainerEvent
& rEvent
) override
;
265 virtual void SAL_CALL
loaded(const css::lang::EventObject
& rEvent
) override
;
266 virtual void SAL_CALL
unloaded(const css::lang::EventObject
& rEvent
) override
;
267 virtual void SAL_CALL
unloading(const css::lang::EventObject
& aEvent
) override
;
268 virtual void SAL_CALL
reloading(const css::lang::EventObject
& aEvent
) override
;
269 virtual void SAL_CALL
reloaded(const css::lang::EventObject
& aEvent
) override
;
272 virtual void SAL_CALL
setMode(const OUString
& Mode
) override
;
273 virtual OUString SAL_CALL
getMode() override
;
274 virtual css::uno::Sequence
< OUString
> SAL_CALL
getSupportedModes() override
;
275 virtual sal_Bool SAL_CALL
supportsMode(const OUString
& Mode
) override
;
277 // css::container::XIndexAccess
278 virtual sal_Int32 SAL_CALL
getCount() override
;
279 virtual css::uno::Any SAL_CALL
getByIndex(sal_Int32 Index
) override
;
281 // XModifyBroadcaster
282 virtual void SAL_CALL
addModifyListener(const css::uno::Reference
< css::util::XModifyListener
>& l
) override
;
283 virtual void SAL_CALL
removeModifyListener(const css::uno::Reference
< css::util::XModifyListener
>& l
) override
;
286 virtual void SAL_CALL
focusGained(const css::awt::FocusEvent
& e
) override
;
287 virtual void SAL_CALL
focusLost(const css::awt::FocusEvent
& e
) override
;
290 virtual void SAL_CALL
mousePressed( const css::awt::MouseEvent
& _rEvent
) override
;
291 virtual void SAL_CALL
mouseReleased( const css::awt::MouseEvent
& _rEvent
) override
;
292 virtual void SAL_CALL
mouseEntered( const css::awt::MouseEvent
& _rEvent
) override
;
293 virtual void SAL_CALL
mouseExited( const css::awt::MouseEvent
& _rEvent
) override
;
295 // XFormComponentValidityListener
296 virtual void SAL_CALL
componentValidityChanged( const css::lang::EventObject
& _rSource
) override
;
298 // XInteractionHandler
299 virtual void SAL_CALL
handle( const css::uno::Reference
< css::task::XInteractionRequest
>& Request
) override
;
301 // XGridControlListener
302 virtual void SAL_CALL
columnChanged( const css::lang::EventObject
& _event
) override
;
304 // css::beans::XPropertyChangeListener -> change of states
305 virtual void SAL_CALL
propertyChange(const css::beans::PropertyChangeEvent
& evt
) override
;
307 // XTextListener -> set modify
308 virtual void SAL_CALL
textChanged(const css::awt::TextEvent
& rEvent
) override
;
310 // XItemListener -> set modify
311 virtual void SAL_CALL
itemStateChanged(const css::awt::ItemEvent
& rEvent
) override
;
313 // XModifyListener -> set modify
314 virtual void SAL_CALL
modified(const css::lang::EventObject
& rEvent
) override
;
317 virtual css::uno::Reference
< css::form::runtime::XFormOperations
> SAL_CALL
getFormOperations() override
;
318 virtual css::uno::Reference
< css::awt::XControl
> SAL_CALL
getCurrentControl() override
;
319 virtual void SAL_CALL
addActivateListener(const css::uno::Reference
< css::form::XFormControllerListener
>& l
) override
;
320 virtual void SAL_CALL
removeActivateListener(const css::uno::Reference
< css::form::XFormControllerListener
>& l
) override
;
321 virtual void SAL_CALL
addChildController( const css::uno::Reference
< css::form::runtime::XFormController
>& ChildController
) override
;
323 virtual css::uno::Reference
< css::form::runtime::XFormControllerContext
> SAL_CALL
getContext() override
;
324 virtual void SAL_CALL
setContext( const css::uno::Reference
< css::form::runtime::XFormControllerContext
>& _context
) override
;
325 virtual css::uno::Reference
< css::task::XInteractionHandler
> SAL_CALL
getInteractionHandler() override
;
326 virtual void SAL_CALL
setInteractionHandler( const css::uno::Reference
< css::task::XInteractionHandler
>& _interactionHandler
) override
;
329 virtual css::uno::Sequence
< css::uno::Reference
< css::awt::XControl
> > SAL_CALL
getControls() override
;
331 virtual void SAL_CALL
setModel(const css::uno::Reference
< css::awt::XTabControllerModel
>& Model
) override
;
332 virtual css::uno::Reference
< css::awt::XTabControllerModel
> SAL_CALL
getModel() override
;
334 virtual void SAL_CALL
setContainer(const css::uno::Reference
< css::awt::XControlContainer
>& Container
) override
;
335 virtual css::uno::Reference
< css::awt::XControlContainer
> SAL_CALL
getContainer() override
;
337 virtual void SAL_CALL
autoTabOrder() override
;
338 virtual void SAL_CALL
activateTabOrder() override
;
340 virtual void SAL_CALL
activateFirst() override
;
341 virtual void SAL_CALL
activateLast() override
;
343 // css::sdbc::XRowSetListener
344 virtual void SAL_CALL
cursorMoved(const css::lang::EventObject
& event
) override
;
345 virtual void SAL_CALL
rowChanged(const css::lang::EventObject
& event
) override
;
346 virtual void SAL_CALL
rowSetChanged(const css::lang::EventObject
& event
) override
;
348 // XRowSetApproveListener
349 virtual sal_Bool SAL_CALL
approveCursorMove(const css::lang::EventObject
& event
) override
;
350 virtual sal_Bool SAL_CALL
approveRowChange(const css::sdb::RowChangeEvent
& event
) override
;
351 virtual sal_Bool SAL_CALL
approveRowSetChange(const css::lang::EventObject
& event
) override
;
353 // XRowSetApproveBroadcaster
354 virtual void SAL_CALL
addRowSetApproveListener(const css::uno::Reference
< css::sdb::XRowSetApproveListener
>& listener
) override
;
355 virtual void SAL_CALL
removeRowSetApproveListener(const css::uno::Reference
< css::sdb::XRowSetApproveListener
>& listener
) override
;
357 // XSQLErrorBroadcaster
358 virtual void SAL_CALL
errorOccured(const css::sdb::SQLErrorEvent
& aEvent
) override
;
361 virtual void SAL_CALL
addSQLErrorListener(const css::uno::Reference
< css::sdb::XSQLErrorListener
>& _rListener
) override
;
362 virtual void SAL_CALL
removeSQLErrorListener(const css::uno::Reference
< css::sdb::XSQLErrorListener
>& _rListener
) override
;
364 // XDatabaseParameterBroadcaster2
365 virtual void SAL_CALL
addDatabaseParameterListener(const css::uno::Reference
< css::form::XDatabaseParameterListener
>& aListener
) override
;
366 virtual void SAL_CALL
removeDatabaseParameterListener(const css::uno::Reference
< css::form::XDatabaseParameterListener
>& aListener
) override
;
368 // XDatabaseParameterBroadcaster
369 virtual void SAL_CALL
addParameterListener(const css::uno::Reference
< css::form::XDatabaseParameterListener
>& aListener
) override
;
370 virtual void SAL_CALL
removeParameterListener(const css::uno::Reference
< css::form::XDatabaseParameterListener
>& aListener
) override
;
372 // XDatabaseParameterListener
373 virtual sal_Bool SAL_CALL
approveParameter(const css::form::DatabaseParameterEvent
& aEvent
) override
;
375 // XConfirmDeleteBroadcaster
376 virtual void SAL_CALL
addConfirmDeleteListener(const css::uno::Reference
< css::form::XConfirmDeleteListener
>& aListener
) override
;
377 virtual void SAL_CALL
removeConfirmDeleteListener(const css::uno::Reference
< css::form::XConfirmDeleteListener
>& aListener
) override
;
379 // XConfirmDeleteListener
380 virtual sal_Bool SAL_CALL
confirmDelete(const css::sdb::RowChangeEvent
& aEvent
) override
;
383 virtual sal_Bool SAL_CALL
supportsService(const OUString
& ServiceName
) override
;
384 virtual OUString SAL_CALL
getImplementationName() override
;
385 virtual css::uno::Sequence
< OUString
> SAL_CALL
getSupportedServiceNames() override
;
388 virtual sal_Bool SAL_CALL
approveReset(const css::lang::EventObject
& rEvent
) override
;
389 virtual void SAL_CALL
resetted(const css::lang::EventObject
& rEvent
) override
;
391 // XFeatureInvalidation
392 virtual void SAL_CALL
invalidateFeatures( const css::uno::Sequence
< ::sal_Int16
>& Features
) override
;
393 virtual void SAL_CALL
invalidateAllFeatures( ) override
;
395 // method for registration
396 static css::uno::Sequence
< OUString
> const & getSupportedServiceNames_Static();
398 // comphelper::OPropertyArrayUsageHelper
399 virtual void fillProperties(
400 css::uno::Sequence
< css::beans::Property
>& /* [out] */ _rProps
,
401 css::uno::Sequence
< css::beans::Property
>& /* [out] */ _rAggregateProps
404 // DispatchInterceptor
405 virtual css::uno::Reference
< css::frame::XDispatch
>
406 interceptedQueryDispatch(
407 const css::util::URL
& aURL
,
408 const OUString
& aTargetFrameName
,
409 sal_Int32 nSearchFlags
412 virtual ::osl::Mutex
* getInterceptorMutex() override
{ return &m_aMutex
; }
414 /// update all our dispatchers
415 void updateAllDispatchers() const;
417 /** disposes all dispatchers in m_aFeatureDispatchers, and empties m_aFeatureDispatchers
419 void disposeAllFeaturesAndDispatchers();
421 void startFiltering();
422 void stopFiltering();
423 void setFilter(::std::vector
<FmFieldInfo
>&);
424 void startListening();
425 void stopListening();
427 /** ensures that we have an interaction handler, if possible
429 If an interaction handler was provided at creation time (<member>initialize</member>), this
430 one will be used. Else, an attempt is made to create an <type scope="css::sdb">InteractionHandler</type>
434 if and only if <member>m_xInteractionHandler</member> is valid when the method returns
436 bool ensureInteractionHandler();
438 /** replaces one of our controls with another one
440 Upon successful replacing, the old control will be disposed. Also, internal members pointing
441 to the current or active control will be adjusted. Yet more, if the replaced control was
442 the active control, the new control will be made active.
444 @param _rxExistentControl
445 The control to replace. Must be one of the controls in our ControlContainer.
447 The control which should replace the existent control.
449 <TRUE/> if and only if the control was successfully replaced
452 const css::uno::Reference
< css::awt::XControl
>& _rxExistentControl
,
453 const css::uno::Reference
< css::awt::XControl
>& _rxNewControl
456 // we're listening at all bound controls for modifications
457 void startControlModifyListening(const css::uno::Reference
< css::awt::XControl
>& xControl
);
458 void stopControlModifyListening(const css::uno::Reference
< css::awt::XControl
>& xControl
);
461 void setControlLock(const css::uno::Reference
< css::awt::XControl
>& xControl
);
462 void addToEventAttacher(const css::uno::Reference
< css::awt::XControl
>& xControl
);
463 void removeFromEventAttacher(const css::uno::Reference
< css::awt::XControl
>& xControl
);
464 void toggleAutoFields(bool bAutoFields
);
465 /// @throws css::uno::RuntimeException
467 void removeBoundFieldListener();
469 void startFormListening( const css::uno::Reference
< css::beans::XPropertySet
>& _rxForm
, bool _bPropertiesOnly
);
470 void stopFormListening( const css::uno::Reference
< css::beans::XPropertySet
>& _rxForm
, bool _bPropertiesOnly
);
472 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;
474 void insertControl(const css::uno::Reference
< css::awt::XControl
>& xControl
);
475 void removeControl(const css::uno::Reference
< css::awt::XControl
>& xControl
);
477 /// called when a new control is to be handled by the controller
478 void implControlInserted( const css::uno::Reference
< css::awt::XControl
>& _rxControl
, bool _bAddToEventAttacher
);
479 /// called when a control is not to be handled by the controller anymore
480 void implControlRemoved( const css::uno::Reference
< css::awt::XControl
>& _rxControl
, bool _bRemoveFromEventAttacher
);
482 /** sets m_xCurrentControl, plus does administrative tasks depending on it
484 void implSetCurrentControl( const css::uno::Reference
< css::awt::XControl
>& _rxControl
);
486 /** invalidates the FormFeatures which depend on the current control
488 void implInvalidateCurrentControlDependentFeatures();
490 bool impl_isDisposed_nofail() const { return FormController_BASE::rBHelper
.bDisposed
; }
491 void impl_checkDisposed_throw() const;
493 void impl_onModify();
495 /** adds the given filter row to m_aFilterRows, setting m_nCurrentFilterPosition to 0 if the newly added
496 row is the first one.
501 void impl_addFilterRow( const FmFilterRow
& _row
);
503 /** adds an empty filter row to m_aFilterRows, and notifies our listeners
505 void impl_appendEmptyFilterRow( ::osl::ClearableMutexGuard
& _rClearBeforeNotify
);
507 bool isLocked() const {return m_bLocked
;}
508 bool determineLockState() const;
510 vcl::Window
* getDialogParentWindow();
511 // returns the window which should be used as parent window for dialogs
513 css::uno::Reference
< css::frame::XDispatchProviderInterceptor
> createInterceptor(const css::uno::Reference
< css::frame::XDispatchProviderInterception
>& _xInterception
);
514 // create a new interceptor, register it on the given object
515 void deleteInterceptor(const css::uno::Reference
< css::frame::XDispatchProviderInterception
>& _xInterception
);
516 // if createInterceptor was called for the given object the according interceptor will be removed
517 // from the objects interceptor chain and released
519 /** checks all form controls belonging to our form for validity
521 If a form control supports the XValidatableFormComponent interface, this is used to determine
522 the validity of the control. If the interface is not supported, the control is supposed to be
525 @param _rFirstInvalidityExplanation
526 if the method returns <FALSE/> (i.e. if there is an invalid control), this string contains
527 the explanation for the invalidity, as obtained from the validator.
529 @param _rxFirstInvalidModel
530 if the method returns <FALSE/> (i.e. if there is an invalid control), this contains
534 <TRUE/> if and only if all controls belonging to our form are valid
536 bool checkFormComponentValidity(
537 OUString
& /* [out] */ _rFirstInvalidityExplanation
,
538 css::uno::Reference
< css::awt::XControlModel
>& /* [out] */ _rxFirstInvalidModel
541 /** locates the control which belongs to a given model
543 css::uno::Reference
< css::awt::XControl
>
544 locateControl( const css::uno::Reference
< css::awt::XControlModel
>& _rxModel
);
546 // set the text for all filters
547 void impl_setTextOnAllFilter_throw();
549 // in filter mode we do not listen for changes
550 bool isListeningForChanges() const {return m_bDBConnection
&& !m_bFiltering
&& !isLocked();}
551 css::uno::Reference
< css::awt::XControl
> isInList(const css::uno::Reference
< css::awt::XWindowPeer
>& xPeer
) const;
553 DECL_LINK( OnActivateTabOrder
, Timer
*, void );
554 DECL_LINK( OnInvalidateFeatures
, Timer
*, void );
555 DECL_LINK( OnLoad
, void*, void );
556 DECL_LINK( OnToggleAutoFields
, void*, void );
557 DECL_LINK( OnActivated
, void*, void );
558 DECL_LINK( OnDeactivated
, void*, void );
563 #endif // INCLUDED_SVX_SOURCE_INC_FORMCONTROLLER_HXX
565 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */