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>
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
; }
98 typedef ::std::vector
< ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XTextComponent
> > FilterComponents
;
99 class ControlBorderManager
;
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
,
156 m_aRowSetApproveListeners
,
157 m_aParameterListeners
,
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
>
172 DispatcherContainer m_aFeatureDispatchers
;
173 ::std::set
< sal_Int16
> m_aInvalidFeatures
; // for asynchronous feature invalidation
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
>
185 sal_Int32 m_nCurrentFilterPosition
; // current level for filtering (or-criteria)
187 bool m_bCurrentRecordModified
: 1;
188 bool m_bCurrentRecordNew
: 1;
190 bool m_bDBConnection
: 1; // Focuslistener nur fuer Datenbankformulare
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
;
209 FormController( const ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XComponentContext
> & _rxORB
);
212 virtual ~FormController();
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
;
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
;
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
;
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
;
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
;
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
;
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
;
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
;
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
;
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
;
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
;
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
;
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
;
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
;
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
;
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>
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.
460 The control which should replace the existent control.
462 <TRUE/> if and only if the control was successfully replaced
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
);
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.
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
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
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: */