bump product version to 5.0.4.1
[LibreOffice.git] / svx / source / inc / formcontroller.hxx
blob5ae418cff4f1550ede37f028d14dd3eb6d2ae2f3
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 <vector>
26 #include "delayedevent.hxx"
27 #include "formdispatchinterceptor.hxx"
28 #include "sqlparserclient.hxx"
30 #include <com/sun/star/awt/XControl.hpp>
31 #include <com/sun/star/awt/XControlModel.hpp>
32 #include <com/sun/star/awt/XFocusListener.hpp>
33 #include <com/sun/star/awt/XItemListener.hpp>
34 #include <com/sun/star/awt/XMouseListener.hpp>
35 #include <com/sun/star/awt/XTabController.hpp>
36 #include <com/sun/star/awt/XTextComponent.hpp>
37 #include <com/sun/star/container/XContainerListener.hpp>
38 #include <com/sun/star/container/XEnumerationAccess.hpp>
39 #include <com/sun/star/container/XIndexContainer.hpp>
40 #include <com/sun/star/form/DatabaseDeleteEvent.hpp>
41 #include <com/sun/star/form/DatabaseParameterEvent.hpp>
42 #include <com/sun/star/form/ErrorEvent.hpp>
43 #include <com/sun/star/form/validation/XFormComponentValidityListener.hpp>
44 #include <com/sun/star/form/XConfirmDeleteBroadcaster.hpp>
45 #include <com/sun/star/form/XConfirmDeleteListener.hpp>
46 #include <com/sun/star/form/XDatabaseParameterBroadcaster2.hpp>
47 #include <com/sun/star/form/XDatabaseParameterListener.hpp>
48 #include <com/sun/star/form/runtime/XFormController.hpp>
49 #include <com/sun/star/form/runtime/XFilterController.hpp>
50 #include <com/sun/star/form/XFormControllerListener.hpp>
51 #include <com/sun/star/form/XGridControlListener.hpp>
52 #include <com/sun/star/form/XLoadListener.hpp>
53 #include <com/sun/star/form/XResetListener.hpp>
54 #include <com/sun/star/frame/DispatchDescriptor.hpp>
55 #include <com/sun/star/frame/XDispatch.hpp>
56 #include <com/sun/star/frame/XDispatchProvider.hpp>
57 #include <com/sun/star/frame/XDispatchProviderInterception.hpp>
58 #include <com/sun/star/frame/XDispatchProviderInterceptor.hpp>
59 #include <com/sun/star/frame/XModel.hpp>
60 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
61 #include <com/sun/star/lang/XServiceInfo.hpp>
62 #include <com/sun/star/script/XEventAttacherManager.hpp>
63 #include <com/sun/star/sdb/XRowSetApproveBroadcaster.hpp>
64 #include <com/sun/star/sdb/XRowSetApproveListener.hpp>
65 #include <com/sun/star/sdb/XSingleSelectQueryComposer.hpp>
66 #include <com/sun/star/sdb/XSQLErrorBroadcaster.hpp>
67 #include <com/sun/star/sdb/XSQLErrorListener.hpp>
68 #include <com/sun/star/sdbc/XRowSetListener.hpp>
69 #include <com/sun/star/task/XInteractionHandler.hpp>
70 #include <com/sun/star/util/XModeSelector.hpp>
71 #include <com/sun/star/util/XModifyBroadcaster.hpp>
72 #include <com/sun/star/util/XModifyListener.hpp>
74 #include <comphelper/broadcasthelper.hxx>
75 #include <comphelper/proparrhlp.hxx>
76 #include <cppuhelper/propshlp.hxx>
77 #include <vcl/timer.hxx>
78 #include <vcl/idle.hxx>
80 #include <cppuhelper/compbase.hxx>
82 struct FmXTextComponentLess : public ::std::binary_function< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent >, ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent> , bool>
84 bool operator() (const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent >& x, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent >& y) const
86 return reinterpret_cast<sal_Int64>(x.get()) < reinterpret_cast<sal_Int64>(y.get());
90 typedef ::std::map< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent >, OUString, FmXTextComponentLess> FmFilterRow;
91 typedef ::std::vector< FmFilterRow > FmFilterRows;
92 typedef ::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > > FmFormControllers;
94 namespace vcl { class Window; }
96 namespace svxform
98 typedef ::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent > > FilterComponents;
99 class ControlBorderManager;
100 struct FmFieldInfo;
102 typedef cppu::WeakComponentImplHelper < ::com::sun::star::form::runtime::XFormController
103 , ::com::sun::star::form::runtime::XFilterController
104 , ::com::sun::star::awt::XFocusListener
105 , ::com::sun::star::form::XLoadListener
106 , ::com::sun::star::beans::XPropertyChangeListener
107 , ::com::sun::star::awt::XTextListener
108 , ::com::sun::star::awt::XItemListener
109 , ::com::sun::star::container::XContainerListener
110 , ::com::sun::star::util::XModifyListener
111 , ::com::sun::star::form::XConfirmDeleteListener
112 , ::com::sun::star::sdb::XSQLErrorListener
113 , ::com::sun::star::sdbc::XRowSetListener
114 , ::com::sun::star::sdb::XRowSetApproveListener
115 , ::com::sun::star::form::XDatabaseParameterListener
116 , ::com::sun::star::lang::XServiceInfo
117 , ::com::sun::star::form::XResetListener
118 , ::com::sun::star::frame::XDispatch
119 , ::com::sun::star::awt::XMouseListener
120 , ::com::sun::star::form::validation::XFormComponentValidityListener
121 , ::com::sun::star::task::XInteractionHandler
122 , ::com::sun::star::form::XGridControlListener
123 , ::com::sun::star::form::runtime::XFeatureInvalidation
124 > FormController_BASE;
126 class ColumnInfoCache;
127 class FormController :public ::comphelper::OBaseMutex
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 ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch >
136 > DispatcherContainer;
138 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XAggregation> m_xAggregate;
139 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTabController> m_xTabController;
140 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> m_xActiveControl, m_xCurrentControl;
141 ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess> m_xModelAsIndex;
142 ::com::sun::star::uno::Reference< ::com::sun::star::script::XEventAttacherManager> m_xModelAsManager;
143 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface> m_xParent;
144 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext> m_xComponentContext;
145 // Composer used for checking filter conditions
146 ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSingleSelectQueryComposer > m_xComposer;
147 ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler > m_xInteractionHandler;
148 ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormControllerContext > m_xFormControllerContext;
150 ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> > m_aControls;
151 ::cppu::OInterfaceContainerHelper
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_pControlBorderManager;
170 ::com::sun::star::uno::Reference< ::com::sun::star::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; // Focuslistener nur fuer Datenbankformulare
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; // ist der Inhalt eines Controls modifiziert ?
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 ::com::sun::star::frame::XDispatchProviderInterceptor interface can intercept only _one_ objects dispatches, we need a helper class
205 typedef std::vector<DispatchInterceptionMultiplexer*> Interceptors;
206 Interceptors m_aControlDispatchInterceptors;
208 public:
209 FormController( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > & _rxORB );
211 protected:
212 virtual ~FormController();
214 // XInterface
215 virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& type) throw ( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
216 virtual void SAL_CALL acquire() throw () SAL_OVERRIDE;
217 virtual void SAL_CALL release() throw () SAL_OVERRIDE;
219 // XTypeProvider
220 virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
221 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
223 // XDispatch
224 virtual void SAL_CALL dispatch( const ::com::sun::star::util::URL& _rURL, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& _rArgs ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
225 virtual void SAL_CALL addStatusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener >& _rxListener, const ::com::sun::star::util::URL& _rURL ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
226 virtual void SAL_CALL removeStatusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener >& _rxListener, const ::com::sun::star::util::URL& _rURL ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
228 // ::com::sun::star::container::XChild
229 virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface> SAL_CALL getParent() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
230 virtual void SAL_CALL setParent(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface>& Parent) throw( ::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
232 // ::com::sun::star::lang::XEventListener
233 virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
235 // OComponentHelper
236 virtual void SAL_CALL disposing() SAL_OVERRIDE;
238 // OPropertySetHelper
239 virtual sal_Bool SAL_CALL convertFastPropertyValue( ::com::sun::star::uno::Any & rConvertedValue, ::com::sun::star::uno::Any & rOldValue,
240 sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue )
241 throw( ::com::sun::star::lang::IllegalArgumentException ) SAL_OVERRIDE;
243 virtual void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) throw( ::com::sun::star::uno::Exception, std::exception ) SAL_OVERRIDE;
244 virtual void SAL_CALL getFastPropertyValue( ::com::sun::star::uno::Any& rValue, sal_Int32 nHandle ) const SAL_OVERRIDE;
246 virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo> SAL_CALL getPropertySetInfo() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
247 virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper() SAL_OVERRIDE;
249 using OPropertySetHelper::getFastPropertyValue;
251 // XFilterController
252 virtual ::sal_Int32 SAL_CALL getFilterComponents() throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
253 virtual ::sal_Int32 SAL_CALL getDisjunctiveTerms() throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
254 virtual void SAL_CALL addFilterControllerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFilterControllerListener >& _Listener ) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
255 virtual void SAL_CALL removeFilterControllerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFilterControllerListener >& _Listener ) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
256 virtual void SAL_CALL setPredicateExpression( ::sal_Int32 _Component, ::sal_Int32 _Term, const OUString& _PredicateExpression ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
257 virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl > SAL_CALL getFilterComponent( ::sal_Int32 _Component ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
258 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< OUString > > SAL_CALL getPredicateExpressions() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
259 virtual void SAL_CALL removeDisjunctiveTerm( ::sal_Int32 _Term ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
260 virtual void SAL_CALL appendEmptyDisjunctiveTerm() throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
261 virtual ::sal_Int32 SAL_CALL getActiveTerm() throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
262 virtual void SAL_CALL setActiveTerm( ::sal_Int32 _ActiveTerm ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
264 // XElementAccess
265 virtual ::com::sun::star::uno::Type SAL_CALL getElementType() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
266 virtual sal_Bool SAL_CALL hasElements() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
268 // ::com::sun::star::container::XEnumerationAccess
269 virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration> SAL_CALL createEnumeration() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
271 // ::com::sun::star::container::XContainerListener
272 virtual void SAL_CALL elementInserted(const ::com::sun::star::container::ContainerEvent& rEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
273 virtual void SAL_CALL elementReplaced(const ::com::sun::star::container::ContainerEvent& rEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
274 virtual void SAL_CALL elementRemoved(const ::com::sun::star::container::ContainerEvent& rEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
276 // XLoadListener
277 virtual void SAL_CALL loaded(const ::com::sun::star::lang::EventObject& rEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
278 virtual void SAL_CALL unloaded(const ::com::sun::star::lang::EventObject& rEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
279 virtual void SAL_CALL unloading(const ::com::sun::star::lang::EventObject& aEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
280 virtual void SAL_CALL reloading(const ::com::sun::star::lang::EventObject& aEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
281 virtual void SAL_CALL reloaded(const ::com::sun::star::lang::EventObject& aEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
283 // XModeSelector
284 virtual void SAL_CALL setMode(const OUString& Mode) throw( ::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
285 virtual OUString SAL_CALL getMode() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
286 virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedModes() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
287 virtual sal_Bool SAL_CALL supportsMode(const OUString& Mode) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
289 // ::com::sun::star::container::XIndexAccess
290 virtual sal_Int32 SAL_CALL getCount() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
291 virtual ::com::sun::star::uno::Any SAL_CALL getByIndex(sal_Int32 Index) throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
293 // XModifyBroadcaster
294 virtual void SAL_CALL addModifyListener(const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener>& l) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
295 virtual void SAL_CALL removeModifyListener(const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener>& l) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
297 // XFocusListener
298 virtual void SAL_CALL focusGained(const ::com::sun::star::awt::FocusEvent& e) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
299 virtual void SAL_CALL focusLost(const ::com::sun::star::awt::FocusEvent& e) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
301 // XMouseListener
302 virtual void SAL_CALL mousePressed( const ::com::sun::star::awt::MouseEvent& _rEvent ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
303 virtual void SAL_CALL mouseReleased( const ::com::sun::star::awt::MouseEvent& _rEvent ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
304 virtual void SAL_CALL mouseEntered( const ::com::sun::star::awt::MouseEvent& _rEvent ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
305 virtual void SAL_CALL mouseExited( const ::com::sun::star::awt::MouseEvent& _rEvent ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
307 // XFormComponentValidityListener
308 virtual void SAL_CALL componentValidityChanged( const ::com::sun::star::lang::EventObject& _rSource ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
310 // XInteractionHandler
311 virtual void SAL_CALL handle( const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionRequest >& Request ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
313 // XGridControlListener
314 virtual void SAL_CALL columnChanged( const ::com::sun::star::lang::EventObject& _event ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
316 // ::com::sun::star::beans::XPropertyChangeListener -> change of states
317 virtual void SAL_CALL propertyChange(const ::com::sun::star::beans::PropertyChangeEvent& evt) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
319 // XTextListener -> modify setzen
320 virtual void SAL_CALL textChanged(const ::com::sun::star::awt::TextEvent& rEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
322 // XItemListener -> modify setzen
323 virtual void SAL_CALL itemStateChanged(const ::com::sun::star::awt::ItemEvent& rEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
325 // XModifyListener -> modify setzen
326 virtual void SAL_CALL modified(const ::com::sun::star::lang::EventObject& rEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
328 // XFormController
329 virtual ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormOperations > SAL_CALL getFormOperations() throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
330 virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> SAL_CALL getCurrentControl() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
331 virtual void SAL_CALL addActivateListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormControllerListener>& l) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
332 virtual void SAL_CALL removeActivateListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormControllerListener>& l) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
333 virtual void SAL_CALL addChildController( const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController >& _ChildController ) throw( ::com::sun::star::uno::RuntimeException, ::com::sun::star::lang::IllegalArgumentException, std::exception ) SAL_OVERRIDE;
335 virtual ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormControllerContext > SAL_CALL getContext() throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
336 virtual void SAL_CALL setContext( const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormControllerContext >& _context ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
337 virtual ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler > SAL_CALL getInteractionHandler() throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
338 virtual void SAL_CALL setInteractionHandler( const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& _interactionHandler ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
340 // XTabController
341 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> > SAL_CALL getControls() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
343 virtual void SAL_CALL setModel(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTabControllerModel>& Model) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
344 virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTabControllerModel> SAL_CALL getModel() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
346 virtual void SAL_CALL setContainer(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer>& Container) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
347 virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer> SAL_CALL getContainer() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
349 virtual void SAL_CALL autoTabOrder() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
350 virtual void SAL_CALL activateTabOrder() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
352 virtual void SAL_CALL activateFirst() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
353 virtual void SAL_CALL activateLast() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
355 // com::sun::star::sdbc::XRowSetListener
356 virtual void SAL_CALL cursorMoved(const ::com::sun::star::lang::EventObject& event) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
357 virtual void SAL_CALL rowChanged(const ::com::sun::star::lang::EventObject& event) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
358 virtual void SAL_CALL rowSetChanged(const ::com::sun::star::lang::EventObject& event) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
360 // XRowSetApproveListener
361 virtual sal_Bool SAL_CALL approveCursorMove(const ::com::sun::star::lang::EventObject& event) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
362 virtual sal_Bool SAL_CALL approveRowChange(const ::com::sun::star::sdb::RowChangeEvent& event) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
363 virtual sal_Bool SAL_CALL approveRowSetChange(const ::com::sun::star::lang::EventObject& event) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
365 // XRowSetApproveBroadcaster
366 virtual void SAL_CALL addRowSetApproveListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XRowSetApproveListener>& listener) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
367 virtual void SAL_CALL removeRowSetApproveListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XRowSetApproveListener>& listener) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
369 // XSQLErrorBroadcaster
370 virtual void SAL_CALL errorOccured(const ::com::sun::star::sdb::SQLErrorEvent& aEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
372 // XSQLErrorListener
373 virtual void SAL_CALL addSQLErrorListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSQLErrorListener>& _rListener) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
374 virtual void SAL_CALL removeSQLErrorListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSQLErrorListener>& _rListener) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
376 // XDatabaseParameterBroadcaster2
377 virtual void SAL_CALL addDatabaseParameterListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener>& aListener) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
378 virtual void SAL_CALL removeDatabaseParameterListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener>& aListener) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
380 // XDatabaseParameterBroadcaster
381 virtual void SAL_CALL addParameterListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener>& aListener) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
382 virtual void SAL_CALL removeParameterListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener>& aListener) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
384 // XDatabaseParameterListener
385 virtual sal_Bool SAL_CALL approveParameter(const ::com::sun::star::form::DatabaseParameterEvent& aEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
387 // XConfirmDeleteBroadcaster
388 virtual void SAL_CALL addConfirmDeleteListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XConfirmDeleteListener>& aListener) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
389 virtual void SAL_CALL removeConfirmDeleteListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XConfirmDeleteListener>& aListener) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
391 // XConfirmDeleteListener
392 virtual sal_Bool SAL_CALL confirmDelete(const ::com::sun::star::sdb::RowChangeEvent& aEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
394 // XServiceInfo
395 virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
396 virtual OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
397 virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
399 // XResetListener
400 virtual sal_Bool SAL_CALL approveReset(const ::com::sun::star::lang::EventObject& rEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
401 virtual void SAL_CALL resetted(const ::com::sun::star::lang::EventObject& rEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
403 // XFeatureInvalidation
404 virtual void SAL_CALL invalidateFeatures( const ::com::sun::star::uno::Sequence< ::sal_Int16 >& Features ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
405 virtual void SAL_CALL invalidateAllFeatures( ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
407 // method for registration
408 static ::com::sun::star::uno::Sequence< OUString > getSupportedServiceNames_Static();
410 // comphelper::OPropertyArrayUsageHelper
411 virtual void fillProperties(
412 ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps,
413 ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rAggregateProps
414 ) const SAL_OVERRIDE;
416 protected:
417 // DispatchInterceptor
418 virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch>
419 interceptedQueryDispatch(
420 const ::com::sun::star::util::URL& aURL,
421 const OUString& aTargetFrameName,
422 sal_Int32 nSearchFlags
423 ) throw( ::com::sun::star::uno::RuntimeException ) SAL_OVERRIDE;
425 virtual ::osl::Mutex* getInterceptorMutex() SAL_OVERRIDE { return &m_aMutex; }
427 /// update all our dispatchers
428 void updateAllDispatchers() const;
430 /** disposes all dispatchers in m_aFeatureDispatchers, and empties m_aFeatureDispatchers
432 void disposeAllFeaturesAndDispatchers();
434 void startFiltering();
435 void stopFiltering();
436 void setFilter(::std::vector<FmFieldInfo>&);
437 void startListening();
438 void stopListening();
440 /** ensures that we have an interaction handler, if possible
442 If an interaction handler was provided at creation time (<member>initialize</member>), this
443 one will be used. Else, an attempt is made to create an <type scope="com::sun::star::sdb">InteractionHandler</type>
444 is made.
446 @return <TRUE/>
447 if and only if <member>m_xInteractionHandler</member> is valid when the method returns
449 bool ensureInteractionHandler();
451 /** replaces one of our controls with another one
453 Upon successful replacing, the old control will be disposed. Also, internal members pointing
454 to the current or active control will be adjusted. Yet more, if the replaced control was
455 the active control, the new control will be made active.
457 @param _rxExistentControl
458 The control to replace. Must be one of the controls in our ControlContainer.
459 @param _rxNewControl
460 The control which should replace the existent control.
461 @return
462 <TRUE/> if and only if the control was successfully replaced
464 bool replaceControl(
465 const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >& _rxExistentControl,
466 const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >& _rxNewControl
469 // we're listening at all bound controls for modifications
470 void startControlModifyListening(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
471 void stopControlModifyListening(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
473 void setLocks();
474 void setControlLock(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
475 void addToEventAttacher(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
476 void removeFromEventAttacher(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
477 void toggleAutoFields(bool bAutoFields);
478 void unload() throw( ::com::sun::star::uno::RuntimeException );
479 void removeBoundFieldListener();
481 void startFormListening( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxForm, bool _bPropertiesOnly );
482 void stopFormListening( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxForm, bool _bPropertiesOnly );
484 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> findControl( ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> >& rCtrls, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel>& rxCtrlModel, bool _bRemove, bool _bOverWrite ) const;
486 void insertControl(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
487 void removeControl(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
489 /// called when a new control is to be handled by the controller
490 void implControlInserted( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& _rxControl, bool _bAddToEventAttacher );
491 /// called when a control is not to be handled by the controller anymore
492 void implControlRemoved( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& _rxControl, bool _bRemoveFromEventAttacher );
494 /** sets m_xCurrentControl, plus does administrative tasks depending on it
496 void implSetCurrentControl( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >& _rxControl );
498 /** invalidates the FormFeatures which depend on the current control
500 void implInvalidateCurrentControlDependentFeatures();
502 bool impl_isDisposed_nofail() const { return FormController_BASE::rBHelper.bDisposed; }
503 void impl_checkDisposed_throw() const;
505 void impl_onModify();
507 /** adds the given filter row to m_aFilterRows, setting m_nCurrentFilterPosition to 0 if the newly added
508 row is the first one.
510 @precond
511 our mutex is locked
513 void impl_addFilterRow( const FmFilterRow& _row );
515 /** adds an empty filter row to m_aFilterRows, and notifies our listeners
517 void impl_appendEmptyFilterRow( ::osl::ClearableMutexGuard& _rClearBeforeNotify );
519 bool isLocked() const {return m_bLocked;}
520 bool determineLockState() const;
522 vcl::Window* getDialogParentWindow();
523 // returns the window which should be used as parent window for dialogs
525 ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor> createInterceptor(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterception>& _xInterception);
526 // create a new interceptor, register it on the given object
527 void deleteInterceptor(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterception>& _xInterception);
528 // if createInterceptor was called for the given object the according interceptor will be removed
529 // from the objects interceptor chain and released
531 /** checks all form controls belonging to our form for validity
533 If a form control supports the XValidatableFormComponent interface, this is used to determine
534 the validity of the control. If the interface is not supported, the control is supposed to be
535 valid.
537 @param _rFirstInvalidityExplanation
538 if the method returns <FALSE/> (i.e. if there is an invalid control), this string contains
539 the explanation for the invalidity, as obtained from the validator.
541 @param _rxFirstInvalidModel
542 if the method returns <FALSE/> (i.e. if there is an invalid control), this contains
543 the control model
545 @return
546 <TRUE/> if and only if all controls belonging to our form are valid
548 bool checkFormComponentValidity(
549 OUString& /* [out] */ _rFirstInvalidityExplanation,
550 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& /* [out] */ _rxFirstInvalidModel
553 /** locates the control which belongs to a given model
555 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >
556 locateControl( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& _rxModel );
558 // set the text for all filters
559 void impl_setTextOnAllFilter_throw();
561 // in filter mode we do not listen for changes
562 bool isListeningForChanges() const {return m_bDBConnection && !m_bFiltering && !isLocked();}
563 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> isInList(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer>& xPeer) const;
565 DECL_LINK_TYPED( OnActivateTabOrder, Idle*, void );
566 DECL_LINK_TYPED( OnInvalidateFeatures, Timer*, void );
567 DECL_LINK( OnLoad, void* );
568 DECL_LINK( OnToggleAutoFields, void* );
569 DECL_LINK( OnActivated, void* );
570 DECL_LINK( OnDeactivated, void* );
575 #endif // INCLUDED_SVX_SOURCE_INC_FORMCONTROLLER_HXX
577 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */