tdf#130857 qt weld: Support mail merge "Server Auth" dialog
[LibreOffice.git] / svx / source / inc / formcontroller.hxx
blobd839cbe96837b63aeca7e911bc9fe72b1d9e7a81
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 "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;
84 namespace svxform
86 typedef ::std::vector< css::uno::Reference< css::awt::XTextComponent > > FilterComponents;
87 class ControlBorderManager;
88 struct FmFieldInfo;
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>
142 m_aModifyListeners;
143 ::comphelper::OInterfaceContainerHelper3<css::sdb::XSQLErrorListener>
144 m_aErrorListeners;
145 ::comphelper::OInterfaceContainerHelper3<css::form::XConfirmDeleteListener>
146 m_aDeleteListeners;
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>
152 m_aFilterListeners;
154 std::vector< css::uno::Reference< css::form::runtime::XFormController > >
155 m_aChildren;
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 >
166 m_xFormOperations;
167 DispatcherContainer m_aFeatureDispatchers;
168 ::std::set< sal_Int16 > m_aInvalidFeatures; // for asynchronous feature invalidation
170 OUString m_aMode;
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 >
178 m_pColumnInfoCache;
180 sal_Int32 m_nCurrentFilterPosition; // current level for filtering (or-criteria)
182 bool m_bCurrentRecordModified : 1;
183 bool m_bCurrentRecordNew : 1;
184 bool m_bLocked : 1;
185 bool m_bDBConnection : 1; // focus listener only for database forms
186 bool m_bCycle : 1;
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;
202 public:
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);
208 private:
209 virtual ~FormController() override;
211 // XInterface
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;
216 // XTypeProvider
217 virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override;
218 virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override;
220 // XDispatch
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;
232 // OComponentHelper
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;
247 // XFilterController
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;
260 // XElementAccess
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;
272 // XLoadListener
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;
279 // XModeSelector
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;
293 // XFocusListener
294 virtual void SAL_CALL focusGained(const css::awt::FocusEvent& e) override;
295 virtual void SAL_CALL focusLost(const css::awt::FocusEvent& e) override;
297 // XMouseListener
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;
324 // XFormController
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;
336 // XTabController
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;
368 // XSQLErrorListener
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;
390 // XServiceInfo
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;
395 // XResetListener
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
410 ) const override;
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
418 ) override;
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>
439 is made.
441 @return <TRUE/>
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.
454 @param _rxNewControl
455 The control which should replace the existent control.
456 @return
457 <TRUE/> if and only if the control was successfully replaced
459 bool replaceControl(
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);
468 void setLocks();
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
474 void unload();
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.
506 @precond
507 our mutex is locked
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
528 valid.
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
536 the control model
538 @return
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: */