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/awt/XWindow.hpp>
40 #include <com/sun/star/container/XContainerListener.hpp>
41 #include <com/sun/star/form/DatabaseParameterEvent.hpp>
42 #include <com/sun/star/form/validation/XFormComponentValidityListener.hpp>
43 #include <com/sun/star/form/XConfirmDeleteListener.hpp>
44 #include <com/sun/star/form/XDatabaseParameterListener.hpp>
45 #include <com/sun/star/form/runtime/XFormController.hpp>
46 #include <com/sun/star/form/runtime/XFilterController.hpp>
47 #include <com/sun/star/form/XFormControllerListener.hpp>
48 #include <com/sun/star/form/XGridControlListener.hpp>
49 #include <com/sun/star/form/XLoadListener.hpp>
50 #include <com/sun/star/form/XResetListener.hpp>
51 #include <com/sun/star/frame/XDispatch.hpp>
52 #include <com/sun/star/frame/XDispatchProviderInterception.hpp>
53 #include <com/sun/star/frame/XDispatchProviderInterceptor.hpp>
54 #include <com/sun/star/lang/XServiceInfo.hpp>
55 #include <com/sun/star/script/XEventAttacherManager.hpp>
56 #include <com/sun/star/sdb/XRowSetApproveListener.hpp>
57 #include <com/sun/star/sdb/XSingleSelectQueryComposer.hpp>
58 #include <com/sun/star/sdb/XSQLErrorListener.hpp>
59 #include <com/sun/star/sdbc/XRowSetListener.hpp>
60 #include <com/sun/star/task/XInteractionHandler.hpp>
61 #include <com/sun/star/util/XModifyListener.hpp>
63 #include <comphelper/proparrhlp.hxx>
64 #include <comphelper/interfacecontainer3.hxx>
65 #include <cppuhelper/basemutex.hxx>
66 #include <cppuhelper/propshlp.hxx>
67 #include <rtl/ref.hxx>
68 #include <vcl/timer.hxx>
69 #include <vcl/idle.hxx>
71 #include <cppuhelper/compbase.hxx>
73 struct FmXTextComponentLess
75 bool operator() (const css::uno::Reference
< css::awt::XTextComponent
>& x
, const css::uno::Reference
< css::awt::XTextComponent
>& y
) const
77 return reinterpret_cast<sal_Int64
>(x
.get()) < reinterpret_cast<sal_Int64
>(y
.get());
81 typedef ::std::map
< css::uno::Reference
< css::awt::XTextComponent
>, OUString
, FmXTextComponentLess
> FmFilterRow
;
82 typedef ::std::vector
< FmFilterRow
> FmFilterRows
;
86 typedef ::std::vector
< css::uno::Reference
< css::awt::XTextComponent
> > FilterComponents
;
87 class ControlBorderManager
;
90 typedef cppu::WeakComponentImplHelper
< css::form::runtime::XFormController
91 , css::form::runtime::XFilterController
92 , css::awt::XFocusListener
93 , css::form::XLoadListener
94 , css::beans::XPropertyChangeListener
95 , css::awt::XTextListener
96 , css::awt::XItemListener
97 , css::container::XContainerListener
98 , css::util::XModifyListener
99 , css::form::XConfirmDeleteListener
100 , css::sdb::XSQLErrorListener
101 , css::sdbc::XRowSetListener
102 , css::sdb::XRowSetApproveListener
103 , css::form::XDatabaseParameterListener
104 , css::lang::XServiceInfo
105 , css::form::XResetListener
106 , css::frame::XDispatch
107 , css::awt::XMouseListener
108 , css::form::validation::XFormComponentValidityListener
109 , css::task::XInteractionHandler
110 , css::form::XGridControlListener
111 , css::form::runtime::XFeatureInvalidation
112 > FormController_BASE
;
114 class ColumnInfoCache
;
115 class FormController final
: public ::cppu::BaseMutex
116 ,public FormController_BASE
117 ,public ::cppu::OPropertySetHelper
118 ,public DispatchInterceptor
119 ,public ::comphelper::OAggregationArrayUsageHelper
< FormController
>
120 ,public ::svxform::OSQLParserClient
122 typedef ::std::map
< sal_Int16
,
123 css::uno::Reference
< css::frame::XDispatch
>
124 > DispatcherContainer
;
126 css::uno::Reference
< css::uno::XAggregation
> m_xAggregate
;
127 css::uno::Reference
< css::awt::XTabController
> m_xTabController
;
128 css::uno::Reference
< css::awt::XControl
> m_xActiveControl
, m_xCurrentControl
;
129 css::uno::Reference
< css::container::XIndexAccess
> m_xModelAsIndex
;
130 css::uno::Reference
< css::script::XEventAttacherManager
> m_xModelAsManager
;
131 css::uno::Reference
< css::uno::XInterface
> m_xParent
;
132 css::uno::Reference
< css::uno::XComponentContext
> m_xComponentContext
;
133 // Composer used for checking filter conditions
134 css::uno::Reference
< css::sdb::XSingleSelectQueryComposer
> m_xComposer
;
135 css::uno::Reference
< css::task::XInteractionHandler
> m_xInteractionHandler
;
136 css::uno::Reference
< css::form::runtime::XFormControllerContext
> m_xFormControllerContext
;
138 css::uno::Sequence
< css::uno::Reference
< css::awt::XControl
> > m_aControls
;
139 ::comphelper::OInterfaceContainerHelper3
<css::form::XFormControllerListener
>
140 m_aActivateListeners
;
141 ::comphelper::OInterfaceContainerHelper3
<css::util::XModifyListener
>
143 ::comphelper::OInterfaceContainerHelper3
<css::sdb::XSQLErrorListener
>
145 ::comphelper::OInterfaceContainerHelper3
<css::form::XConfirmDeleteListener
>
147 ::comphelper::OInterfaceContainerHelper3
<css::sdb::XRowSetApproveListener
>
148 m_aRowSetApproveListeners
;
149 ::comphelper::OInterfaceContainerHelper3
<css::form::XDatabaseParameterListener
>
150 m_aParameterListeners
;
151 ::comphelper::OInterfaceContainerHelper3
<css::form::runtime::XFilterControllerListener
>
154 std::vector
< css::uno::Reference
< css::form::runtime::XFormController
> >
156 FilterComponents m_aFilterComponents
;
157 FmFilterRows m_aFilterRows
;
159 Idle m_aTabActivationIdle
;
160 Timer m_aFeatureInvalidationTimer
;
162 ::svxform::ControlBorderManager
163 m_aControlBorderManager
;
165 css::uno::Reference
< css::form::runtime::XFormOperations
>
167 DispatcherContainer m_aFeatureDispatchers
;
168 ::std::set
< sal_Int16
> m_aInvalidFeatures
; // for asynchronous feature invalidation
172 ::svxform::DelayedEvent m_aLoadEvent
;
173 ::svxform::DelayedEvent m_aToggleEvent
;
174 ::svxform::DelayedEvent m_aActivationEvent
;
175 ::svxform::DelayedEvent m_aDeactivationEvent
;
177 ::std::unique_ptr
< ColumnInfoCache
>
180 sal_Int32 m_nCurrentFilterPosition
; // current level for filtering (or-criteria)
182 bool m_bCurrentRecordModified
: 1;
183 bool m_bCurrentRecordNew
: 1;
185 bool m_bDBConnection
: 1; // focus listener only for database forms
187 bool m_bCanInsert
: 1;
188 bool m_bCanUpdate
: 1;
189 bool m_bCommitLock
: 1; // lock the committing of controls see focusGained
190 bool m_bModified
: 1; // is the content of a control modified?
191 bool m_bControlsSorted
: 1;
192 bool m_bFiltering
: 1;
193 bool m_bAttachEvents
: 1;
194 bool m_bDetachEvents
: 1;
195 bool m_bAttemptedHandlerCreation
: 1;
196 bool m_bSuspendFilterTextListening
; // no bit field, passed around as reference
198 // as we want to intercept dispatches of _all_ controls we're responsible for, and an object implementing
199 // the css::frame::XDispatchProviderInterceptor interface can intercept only _one_ objects dispatches, we need a helper class
200 std::vector
<rtl::Reference
<DispatchInterceptionMultiplexer
>> m_aControlDispatchInterceptors
;
203 FormController( const css::uno::Reference
< css::uno::XComponentContext
> & _rxORB
);
205 // returns the window which should be used as parent window for dialogs
206 static css::uno::Reference
<css::awt::XWindow
> getDialogParentWindow(const css::uno::Reference
<css::form::runtime::XFormController
> & xFormController
);
209 virtual ~FormController() override
;
212 virtual css::uno::Any SAL_CALL
queryInterface( const css::uno::Type
& type
) override
;
213 virtual void SAL_CALL
acquire() noexcept override
;
214 virtual void SAL_CALL
release() noexcept override
;
217 virtual css::uno::Sequence
< sal_Int8
> SAL_CALL
getImplementationId() override
;
218 virtual css::uno::Sequence
< css::uno::Type
> SAL_CALL
getTypes( ) override
;
221 virtual void SAL_CALL
dispatch( const css::util::URL
& _rURL
, const css::uno::Sequence
< css::beans::PropertyValue
>& _rArgs
) override
;
222 virtual void SAL_CALL
addStatusListener( const css::uno::Reference
< css::frame::XStatusListener
>& _rxListener
, const css::util::URL
& _rURL
) override
;
223 virtual void SAL_CALL
removeStatusListener( const css::uno::Reference
< css::frame::XStatusListener
>& _rxListener
, const css::util::URL
& _rURL
) override
;
225 // css::container::XChild
226 virtual css::uno::Reference
< css::uno::XInterface
> SAL_CALL
getParent() override
;
227 virtual void SAL_CALL
setParent(const css::uno::Reference
< css::uno::XInterface
>& Parent
) override
;
229 // css::lang::XEventListener
230 virtual void SAL_CALL
disposing(const css::lang::EventObject
& Source
) override
;
233 virtual void SAL_CALL
disposing() override
;
235 // OPropertySetHelper
236 virtual sal_Bool SAL_CALL
convertFastPropertyValue( css::uno::Any
& rConvertedValue
, css::uno::Any
& rOldValue
,
237 sal_Int32 nHandle
, const css::uno::Any
& rValue
) override
;
239 virtual void SAL_CALL
setFastPropertyValue_NoBroadcast( sal_Int32 nHandle
, const css::uno::Any
& rValue
) override
;
240 virtual void SAL_CALL
getFastPropertyValue( css::uno::Any
& rValue
, sal_Int32 nHandle
) const override
;
242 virtual css::uno::Reference
< css::beans::XPropertySetInfo
> SAL_CALL
getPropertySetInfo() override
;
243 virtual ::cppu::IPropertyArrayHelper
& SAL_CALL
getInfoHelper() override
;
245 using OPropertySetHelper::getFastPropertyValue
;
248 virtual ::sal_Int32 SAL_CALL
getFilterComponents() override
;
249 virtual ::sal_Int32 SAL_CALL
getDisjunctiveTerms() override
;
250 virtual void SAL_CALL
addFilterControllerListener( const css::uno::Reference
< css::form::runtime::XFilterControllerListener
>& Listener
) override
;
251 virtual void SAL_CALL
removeFilterControllerListener( const css::uno::Reference
< css::form::runtime::XFilterControllerListener
>& Listener
) override
;
252 virtual void SAL_CALL
setPredicateExpression( ::sal_Int32 Component
, ::sal_Int32 Term
, const OUString
& PredicateExpression
) override
;
253 virtual css::uno::Reference
< css::awt::XControl
> SAL_CALL
getFilterComponent( ::sal_Int32 Component
) override
;
254 virtual css::uno::Sequence
< css::uno::Sequence
< OUString
> > SAL_CALL
getPredicateExpressions() override
;
255 virtual void SAL_CALL
removeDisjunctiveTerm( ::sal_Int32 Term
) override
;
256 virtual void SAL_CALL
appendEmptyDisjunctiveTerm() override
;
257 virtual ::sal_Int32 SAL_CALL
getActiveTerm() override
;
258 virtual void SAL_CALL
setActiveTerm( ::sal_Int32 ActiveTerm
) override
;
261 virtual css::uno::Type SAL_CALL
getElementType() override
;
262 virtual sal_Bool SAL_CALL
hasElements() override
;
264 // css::container::XEnumerationAccess
265 virtual css::uno::Reference
< css::container::XEnumeration
> SAL_CALL
createEnumeration() override
;
267 // css::container::XContainerListener
268 virtual void SAL_CALL
elementInserted(const css::container::ContainerEvent
& rEvent
) override
;
269 virtual void SAL_CALL
elementReplaced(const css::container::ContainerEvent
& rEvent
) override
;
270 virtual void SAL_CALL
elementRemoved(const css::container::ContainerEvent
& rEvent
) override
;
273 virtual void SAL_CALL
loaded(const css::lang::EventObject
& rEvent
) override
;
274 virtual void SAL_CALL
unloaded(const css::lang::EventObject
& rEvent
) override
;
275 virtual void SAL_CALL
unloading(const css::lang::EventObject
& aEvent
) override
;
276 virtual void SAL_CALL
reloading(const css::lang::EventObject
& aEvent
) override
;
277 virtual void SAL_CALL
reloaded(const css::lang::EventObject
& aEvent
) override
;
280 virtual void SAL_CALL
setMode(const OUString
& Mode
) override
;
281 virtual OUString SAL_CALL
getMode() override
;
282 virtual css::uno::Sequence
< OUString
> SAL_CALL
getSupportedModes() override
;
283 virtual sal_Bool SAL_CALL
supportsMode(const OUString
& Mode
) override
;
285 // css::container::XIndexAccess
286 virtual sal_Int32 SAL_CALL
getCount() override
;
287 virtual css::uno::Any SAL_CALL
getByIndex(sal_Int32 Index
) override
;
289 // XModifyBroadcaster
290 virtual void SAL_CALL
addModifyListener(const css::uno::Reference
< css::util::XModifyListener
>& l
) override
;
291 virtual void SAL_CALL
removeModifyListener(const css::uno::Reference
< css::util::XModifyListener
>& l
) override
;
294 virtual void SAL_CALL
focusGained(const css::awt::FocusEvent
& e
) override
;
295 virtual void SAL_CALL
focusLost(const css::awt::FocusEvent
& e
) override
;
298 virtual void SAL_CALL
mousePressed( const css::awt::MouseEvent
& _rEvent
) override
;
299 virtual void SAL_CALL
mouseReleased( const css::awt::MouseEvent
& _rEvent
) override
;
300 virtual void SAL_CALL
mouseEntered( const css::awt::MouseEvent
& _rEvent
) override
;
301 virtual void SAL_CALL
mouseExited( const css::awt::MouseEvent
& _rEvent
) override
;
303 // XFormComponentValidityListener
304 virtual void SAL_CALL
componentValidityChanged( const css::lang::EventObject
& _rSource
) override
;
306 // XInteractionHandler
307 virtual void SAL_CALL
handle( const css::uno::Reference
< css::task::XInteractionRequest
>& Request
) override
;
309 // XGridControlListener
310 virtual void SAL_CALL
columnChanged( const css::lang::EventObject
& _event
) override
;
312 // css::beans::XPropertyChangeListener -> change of states
313 virtual void SAL_CALL
propertyChange(const css::beans::PropertyChangeEvent
& evt
) override
;
315 // XTextListener -> set modify
316 virtual void SAL_CALL
textChanged(const css::awt::TextEvent
& rEvent
) override
;
318 // XItemListener -> set modify
319 virtual void SAL_CALL
itemStateChanged(const css::awt::ItemEvent
& rEvent
) override
;
321 // XModifyListener -> set modify
322 virtual void SAL_CALL
modified(const css::lang::EventObject
& rEvent
) override
;
325 virtual css::uno::Reference
< css::form::runtime::XFormOperations
> SAL_CALL
getFormOperations() override
;
326 virtual css::uno::Reference
< css::awt::XControl
> SAL_CALL
getCurrentControl() override
;
327 virtual void SAL_CALL
addActivateListener(const css::uno::Reference
< css::form::XFormControllerListener
>& l
) override
;
328 virtual void SAL_CALL
removeActivateListener(const css::uno::Reference
< css::form::XFormControllerListener
>& l
) override
;
329 virtual void SAL_CALL
addChildController( const css::uno::Reference
< css::form::runtime::XFormController
>& ChildController
) override
;
331 virtual css::uno::Reference
< css::form::runtime::XFormControllerContext
> SAL_CALL
getContext() override
;
332 virtual void SAL_CALL
setContext( const css::uno::Reference
< css::form::runtime::XFormControllerContext
>& _context
) override
;
333 virtual css::uno::Reference
< css::task::XInteractionHandler
> SAL_CALL
getInteractionHandler() override
;
334 virtual void SAL_CALL
setInteractionHandler( const css::uno::Reference
< css::task::XInteractionHandler
>& _interactionHandler
) override
;
337 virtual css::uno::Sequence
< css::uno::Reference
< css::awt::XControl
> > SAL_CALL
getControls() override
;
339 virtual void SAL_CALL
setModel(const css::uno::Reference
< css::awt::XTabControllerModel
>& Model
) override
;
340 virtual css::uno::Reference
< css::awt::XTabControllerModel
> SAL_CALL
getModel() override
;
342 virtual void SAL_CALL
setContainer(const css::uno::Reference
< css::awt::XControlContainer
>& Container
) override
;
343 virtual css::uno::Reference
< css::awt::XControlContainer
> SAL_CALL
getContainer() override
;
345 virtual void SAL_CALL
autoTabOrder() override
;
346 virtual void SAL_CALL
activateTabOrder() override
;
348 virtual void SAL_CALL
activateFirst() override
;
349 virtual void SAL_CALL
activateLast() override
;
351 // css::sdbc::XRowSetListener
352 virtual void SAL_CALL
cursorMoved(const css::lang::EventObject
& event
) override
;
353 virtual void SAL_CALL
rowChanged(const css::lang::EventObject
& event
) override
;
354 virtual void SAL_CALL
rowSetChanged(const css::lang::EventObject
& event
) override
;
356 // XRowSetApproveListener
357 virtual sal_Bool SAL_CALL
approveCursorMove(const css::lang::EventObject
& event
) override
;
358 virtual sal_Bool SAL_CALL
approveRowChange(const css::sdb::RowChangeEvent
& event
) override
;
359 virtual sal_Bool SAL_CALL
approveRowSetChange(const css::lang::EventObject
& event
) override
;
361 // XRowSetApproveBroadcaster
362 virtual void SAL_CALL
addRowSetApproveListener(const css::uno::Reference
< css::sdb::XRowSetApproveListener
>& listener
) override
;
363 virtual void SAL_CALL
removeRowSetApproveListener(const css::uno::Reference
< css::sdb::XRowSetApproveListener
>& listener
) override
;
365 // XSQLErrorBroadcaster
366 virtual void SAL_CALL
errorOccured(const css::sdb::SQLErrorEvent
& aEvent
) override
;
369 virtual void SAL_CALL
addSQLErrorListener(const css::uno::Reference
< css::sdb::XSQLErrorListener
>& _rListener
) override
;
370 virtual void SAL_CALL
removeSQLErrorListener(const css::uno::Reference
< css::sdb::XSQLErrorListener
>& _rListener
) override
;
372 // XDatabaseParameterBroadcaster2
373 virtual void SAL_CALL
addDatabaseParameterListener(const css::uno::Reference
< css::form::XDatabaseParameterListener
>& aListener
) override
;
374 virtual void SAL_CALL
removeDatabaseParameterListener(const css::uno::Reference
< css::form::XDatabaseParameterListener
>& aListener
) override
;
376 // XDatabaseParameterBroadcaster
377 virtual void SAL_CALL
addParameterListener(const css::uno::Reference
< css::form::XDatabaseParameterListener
>& aListener
) override
;
378 virtual void SAL_CALL
removeParameterListener(const css::uno::Reference
< css::form::XDatabaseParameterListener
>& aListener
) override
;
380 // XDatabaseParameterListener
381 virtual sal_Bool SAL_CALL
approveParameter(const css::form::DatabaseParameterEvent
& aEvent
) override
;
383 // XConfirmDeleteBroadcaster
384 virtual void SAL_CALL
addConfirmDeleteListener(const css::uno::Reference
< css::form::XConfirmDeleteListener
>& aListener
) override
;
385 virtual void SAL_CALL
removeConfirmDeleteListener(const css::uno::Reference
< css::form::XConfirmDeleteListener
>& aListener
) override
;
387 // XConfirmDeleteListener
388 virtual sal_Bool SAL_CALL
confirmDelete(const css::sdb::RowChangeEvent
& aEvent
) override
;
391 virtual sal_Bool SAL_CALL
supportsService(const OUString
& ServiceName
) override
;
392 virtual OUString SAL_CALL
getImplementationName() override
;
393 virtual css::uno::Sequence
< OUString
> SAL_CALL
getSupportedServiceNames() override
;
396 virtual sal_Bool SAL_CALL
approveReset(const css::lang::EventObject
& rEvent
) override
;
397 virtual void SAL_CALL
resetted(const css::lang::EventObject
& rEvent
) override
;
399 // XFeatureInvalidation
400 virtual void SAL_CALL
invalidateFeatures( const css::uno::Sequence
< ::sal_Int16
>& Features
) override
;
401 virtual void SAL_CALL
invalidateAllFeatures( ) override
;
403 // method for registration
404 static css::uno::Sequence
< OUString
> const & getSupportedServiceNames_Static();
406 // comphelper::OPropertyArrayUsageHelper
407 virtual void fillProperties(
408 css::uno::Sequence
< css::beans::Property
>& /* [out] */ _rProps
,
409 css::uno::Sequence
< css::beans::Property
>& /* [out] */ _rAggregateProps
412 // DispatchInterceptor
413 virtual css::uno::Reference
< css::frame::XDispatch
>
414 interceptedQueryDispatch(
415 const css::util::URL
& aURL
,
416 const OUString
& aTargetFrameName
,
417 sal_Int32 nSearchFlags
420 virtual ::osl::Mutex
* getInterceptorMutex() override
{ return &m_aMutex
; }
422 /// update all our dispatchers
423 void updateAllDispatchers() const;
425 /** disposes all dispatchers in m_aFeatureDispatchers, and empties m_aFeatureDispatchers
427 void disposeAllFeaturesAndDispatchers();
429 void startFiltering();
430 void stopFiltering();
431 void setFilter(::std::vector
<FmFieldInfo
>&);
432 void startListening();
433 void stopListening();
435 /** ensures that we have an interaction handler, if possible
437 If an interaction handler was provided at creation time (<member>initialize</member>), this
438 one will be used. Else, an attempt is made to create an <type scope="css::sdb">InteractionHandler</type>
442 if and only if <member>m_xInteractionHandler</member> is valid when the method returns
444 bool ensureInteractionHandler();
446 /** replaces one of our controls with another one
448 Upon successful replacing, the old control will be disposed. Also, internal members pointing
449 to the current or active control will be adjusted. Yet more, if the replaced control was
450 the active control, the new control will be made active.
452 @param _rxExistentControl
453 The control to replace. Must be one of the controls in our ControlContainer.
455 The control which should replace the existent control.
457 <TRUE/> if and only if the control was successfully replaced
460 const css::uno::Reference
< css::awt::XControl
>& _rxExistentControl
,
461 const css::uno::Reference
< css::awt::XControl
>& _rxNewControl
464 // we're listening at all bound controls for modifications
465 void startControlModifyListening(const css::uno::Reference
< css::awt::XControl
>& xControl
);
466 void stopControlModifyListening(const css::uno::Reference
< css::awt::XControl
>& xControl
);
469 void setControlLock(const css::uno::Reference
< css::awt::XControl
>& xControl
);
470 void addToEventAttacher(const css::uno::Reference
< css::awt::XControl
>& xControl
);
471 void removeFromEventAttacher(const css::uno::Reference
< css::awt::XControl
>& xControl
);
472 void toggleAutoFields(bool bAutoFields
);
473 /// @throws css::uno::RuntimeException
475 void removeBoundFieldListener();
477 void startFormListening( const css::uno::Reference
< css::beans::XPropertySet
>& _rxForm
, bool _bPropertiesOnly
);
478 void stopFormListening( const css::uno::Reference
< css::beans::XPropertySet
>& _rxForm
, bool _bPropertiesOnly
);
480 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;
482 void insertControl(const css::uno::Reference
< css::awt::XControl
>& xControl
);
483 void removeControl(const css::uno::Reference
< css::awt::XControl
>& xControl
);
485 /// called when a new control is to be handled by the controller
486 void implControlInserted( const css::uno::Reference
< css::awt::XControl
>& _rxControl
, bool _bAddToEventAttacher
);
487 /// called when a control is not to be handled by the controller anymore
488 void implControlRemoved( const css::uno::Reference
< css::awt::XControl
>& _rxControl
, bool _bRemoveFromEventAttacher
);
490 /** sets m_xCurrentControl, plus does administrative tasks depending on it
492 void implSetCurrentControl( const css::uno::Reference
< css::awt::XControl
>& _rxControl
);
494 /** invalidates the FormFeatures which depend on the current control
496 void implInvalidateCurrentControlDependentFeatures();
498 bool impl_isDisposed_nofail() const { return FormController_BASE::rBHelper
.bDisposed
; }
499 void impl_checkDisposed_throw() const;
501 void impl_onModify();
503 /** adds the given filter row to m_aFilterRows, setting m_nCurrentFilterPosition to 0 if the newly added
504 row is the first one.
509 void impl_addFilterRow( const FmFilterRow
& _row
);
511 /** adds an empty filter row to m_aFilterRows, and notifies our listeners
513 void impl_appendEmptyFilterRow( ::osl::ClearableMutexGuard
& _rClearBeforeNotify
);
515 bool isLocked() const {return m_bLocked
;}
516 bool determineLockState() const;
518 css::uno::Reference
< css::frame::XDispatchProviderInterceptor
> createInterceptor(const css::uno::Reference
< css::frame::XDispatchProviderInterception
>& _xInterception
);
519 // create a new interceptor, register it on the given object
520 void deleteInterceptor(const css::uno::Reference
< css::frame::XDispatchProviderInterception
>& _xInterception
);
521 // if createInterceptor was called for the given object the according interceptor will be removed
522 // from the objects interceptor chain and released
524 /** checks all form controls belonging to our form for validity
526 If a form control supports the XValidatableFormComponent interface, this is used to determine
527 the validity of the control. If the interface is not supported, the control is supposed to be
530 @param _rFirstInvalidityExplanation
531 if the method returns <FALSE/> (i.e. if there is an invalid control), this string contains
532 the explanation for the invalidity, as obtained from the validator.
534 @param _rxFirstInvalidModel
535 if the method returns <FALSE/> (i.e. if there is an invalid control), this contains
539 <TRUE/> if and only if all controls belonging to our form are valid
541 bool checkFormComponentValidity(
542 OUString
& /* [out] */ _rFirstInvalidityExplanation
,
543 css::uno::Reference
< css::awt::XControlModel
>& /* [out] */ _rxFirstInvalidModel
546 /** locates the control which belongs to a given model
548 css::uno::Reference
< css::awt::XControl
>
549 locateControl( const css::uno::Reference
< css::awt::XControlModel
>& _rxModel
);
551 // set the text for all filters
552 void impl_setTextOnAllFilter_throw();
554 // in filter mode we do not listen for changes
555 bool isListeningForChanges() const {return m_bDBConnection
&& !m_bFiltering
&& !isLocked();}
556 css::uno::Reference
< css::awt::XControl
> isInList(const css::uno::Reference
< css::awt::XWindowPeer
>& xPeer
) const;
558 DECL_LINK( OnActivateTabOrder
, Timer
*, void );
559 DECL_LINK( OnInvalidateFeatures
, Timer
*, void );
560 DECL_LINK( OnLoad
, void*, void );
561 DECL_LINK( OnToggleAutoFields
, void*, void );
562 DECL_LINK( OnActivated
, void*, void );
563 DECL_LINK( OnDeactivated
, void*, void );
568 #endif // INCLUDED_SVX_SOURCE_INC_FORMCONTROLLER_HXX
570 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */