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 _SVX_FMCTRLER_HXX
20 #define _SVX_FMCTRLER_HXX
22 #include "delayedevent.hxx"
23 #include "formdispatchinterceptor.hxx"
24 #include "sqlparserclient.hxx"
26 #include <com/sun/star/awt/XControl.hpp>
27 #include <com/sun/star/awt/XControlModel.hpp>
28 #include <com/sun/star/awt/XFocusListener.hpp>
29 #include <com/sun/star/awt/XItemListener.hpp>
30 #include <com/sun/star/awt/XMouseListener.hpp>
31 #include <com/sun/star/awt/XTabController.hpp>
32 #include <com/sun/star/awt/XTextComponent.hpp>
33 #include <com/sun/star/container/XContainerListener.hpp>
34 #include <com/sun/star/container/XEnumerationAccess.hpp>
35 #include <com/sun/star/container/XIndexContainer.hpp>
36 #include <com/sun/star/form/DatabaseDeleteEvent.hpp>
37 #include <com/sun/star/form/DatabaseParameterEvent.hpp>
38 #include <com/sun/star/form/ErrorEvent.hpp>
39 #include <com/sun/star/form/validation/XFormComponentValidityListener.hpp>
40 #include <com/sun/star/form/XConfirmDeleteBroadcaster.hpp>
41 #include <com/sun/star/form/XConfirmDeleteListener.hpp>
42 #include <com/sun/star/form/XDatabaseParameterBroadcaster2.hpp>
43 #include <com/sun/star/form/XDatabaseParameterListener.hpp>
44 #include <com/sun/star/form/runtime/XFormController.hpp>
45 #include <com/sun/star/form/runtime/XFilterController.hpp>
46 #include <com/sun/star/form/XFormControllerListener.hpp>
47 #include <com/sun/star/form/XGridControlListener.hpp>
48 #include <com/sun/star/form/XLoadListener.hpp>
49 #include <com/sun/star/form/XResetListener.hpp>
50 #include <com/sun/star/frame/DispatchDescriptor.hpp>
51 #include <com/sun/star/frame/XDispatch.hpp>
52 #include <com/sun/star/frame/XDispatchProvider.hpp>
53 #include <com/sun/star/frame/XDispatchProviderInterception.hpp>
54 #include <com/sun/star/frame/XDispatchProviderInterceptor.hpp>
55 #include <com/sun/star/frame/XModel.hpp>
56 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
57 #include <com/sun/star/lang/XServiceInfo.hpp>
58 #include <com/sun/star/script/XEventAttacherManager.hpp>
59 #include <com/sun/star/sdb/XRowSetApproveBroadcaster.hpp>
60 #include <com/sun/star/sdb/XRowSetApproveListener.hpp>
61 #include <com/sun/star/sdb/XSingleSelectQueryComposer.hpp>
62 #include <com/sun/star/sdb/XSQLErrorBroadcaster.hpp>
63 #include <com/sun/star/sdb/XSQLErrorListener.hpp>
64 #include <com/sun/star/sdbc/XRowSetListener.hpp>
65 #include <com/sun/star/task/XInteractionHandler.hpp>
66 #include <com/sun/star/util/XModeSelector.hpp>
67 #include <com/sun/star/util/XModifyBroadcaster.hpp>
68 #include <com/sun/star/util/XModifyListener.hpp>
70 #include <comphelper/broadcasthelper.hxx>
71 #include <comphelper/componentcontext.hxx>
72 #include <comphelper/proparrhlp.hxx>
73 #include <comphelper/stl_types.hxx>
74 #include <cppuhelper/propshlp.hxx>
75 #include <vcl/timer.hxx>
77 #ifndef INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_22
78 #define INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_22
79 #define COMPHELPER_IMPLBASE_INTERFACE_NUMBER 22
80 #include <comphelper/implbase_var.hxx>
83 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
> , sal_Bool
>
85 sal_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
87 return reinterpret_cast<sal_Int64
>(x
.get()) < reinterpret_cast<sal_Int64
>(y
.get());
91 typedef ::std::map
< ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XTextComponent
>, OUString
, FmXTextComponentLess
> FmFilterRow
;
92 typedef ::std::vector
< FmFilterRow
> FmFilterRows
;
93 typedef ::std::vector
< ::com::sun::star::uno::Reference
< ::com::sun::star::form::runtime::XFormController
> > FmFormControllers
;
99 typedef ::std::vector
< ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XTextComponent
> > FilterComponents
;
100 class ControlBorderManager
;
103 typedef ::comphelper::WeakComponentImplHelper22
< ::com::sun::star::form::runtime::XFormController
104 , ::com::sun::star::form::runtime::XFilterController
105 , ::com::sun::star::awt::XFocusListener
106 , ::com::sun::star::form::XLoadListener
107 , ::com::sun::star::beans::XPropertyChangeListener
108 , ::com::sun::star::awt::XTextListener
109 , ::com::sun::star::awt::XItemListener
110 , ::com::sun::star::container::XContainerListener
111 , ::com::sun::star::util::XModifyListener
112 , ::com::sun::star::form::XConfirmDeleteListener
113 , ::com::sun::star::sdb::XSQLErrorListener
114 , ::com::sun::star::sdbc::XRowSetListener
115 , ::com::sun::star::sdb::XRowSetApproveListener
116 , ::com::sun::star::form::XDatabaseParameterListener
117 , ::com::sun::star::lang::XServiceInfo
118 , ::com::sun::star::form::XResetListener
119 , ::com::sun::star::frame::XDispatch
120 , ::com::sun::star::awt::XMouseListener
121 , ::com::sun::star::form::validation::XFormComponentValidityListener
122 , ::com::sun::star::task::XInteractionHandler
123 , ::com::sun::star::form::XGridControlListener
124 , ::com::sun::star::form::runtime::XFeatureInvalidation
125 > FormController_BASE
;
127 //==================================================================
129 //==================================================================
130 class ColumnInfoCache
;
131 class SAL_DLLPRIVATE FormController
:public ::comphelper::OBaseMutex
132 ,public FormController_BASE
133 ,public ::cppu::OPropertySetHelper
134 ,public DispatchInterceptor
135 ,public ::comphelper::OAggregationArrayUsageHelper
< FormController
>
136 ,public ::svxform::OSQLParserClient
138 typedef ::std::map
< sal_Int16
,
139 ::com::sun::star::uno::Reference
< ::com::sun::star::frame::XDispatch
>
140 > DispatcherContainer
;
142 ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XAggregation
> m_xAggregate
;
143 ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XTabController
> m_xTabController
;
144 ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XControl
> m_xActiveControl
, m_xCurrentControl
;
145 ::com::sun::star::uno::Reference
< ::com::sun::star::container::XIndexAccess
> m_xModelAsIndex
;
146 ::com::sun::star::uno::Reference
< ::com::sun::star::script::XEventAttacherManager
> m_xModelAsManager
;
147 ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XInterface
> m_xParent
;
148 ::comphelper::ComponentContext m_aContext
;
149 // Composer used for checking filter conditions
150 ::com::sun::star::uno::Reference
< ::com::sun::star::sdb::XSingleSelectQueryComposer
> m_xComposer
;
151 ::com::sun::star::uno::Reference
< ::com::sun::star::task::XInteractionHandler
> m_xInteractionHandler
;
152 ::com::sun::star::uno::Reference
< ::com::sun::star::form::runtime::XFormControllerContext
> m_xContext
;
154 ::com::sun::star::uno::Sequence
< ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XControl
> > m_aControls
;
155 ::cppu::OInterfaceContainerHelper
156 m_aActivateListeners
,
160 m_aRowSetApproveListeners
,
161 m_aParameterListeners
,
164 FmFormControllers m_aChildren
;
165 FilterComponents m_aFilterComponents
;
166 FmFilterRows m_aFilterRows
;
168 Timer m_aTabActivationTimer
;
169 Timer m_aFeatureInvalidationTimer
;
171 ::svxform::ControlBorderManager
*
172 m_pControlBorderManager
;
174 ::com::sun::star::uno::Reference
< ::com::sun::star::form::runtime::XFormOperations
>
176 DispatcherContainer m_aFeatureDispatchers
;
177 ::std::set
< sal_Int16
> m_aInvalidFeatures
; // for asynchronous feature invalidation
181 ::svxform::DelayedEvent m_aLoadEvent
;
182 ::svxform::DelayedEvent m_aToggleEvent
;
183 ::svxform::DelayedEvent m_aActivationEvent
;
184 ::svxform::DelayedEvent m_aDeactivationEvent
;
186 ::std::auto_ptr
< ColumnInfoCache
>
189 sal_Int32 m_nCurrentFilterPosition
; // current level for filtering (or-criteria)
191 sal_Bool m_bCurrentRecordModified
: 1;
192 sal_Bool m_bCurrentRecordNew
: 1;
193 sal_Bool m_bLocked
: 1;
194 sal_Bool m_bDBConnection
: 1; // Focuslistener nur fuer Datenbankformulare
195 sal_Bool m_bCycle
: 1;
196 sal_Bool m_bCanInsert
: 1;
197 sal_Bool m_bCanUpdate
: 1;
198 sal_Bool m_bCommitLock
: 1; // lock the committing of controls see focusGained
199 sal_Bool m_bModified
: 1; // ist der Inhalt eines Controls modifiziert ?
200 sal_Bool m_bControlsSorted
: 1;
201 sal_Bool m_bFiltering
: 1;
202 sal_Bool m_bAttachEvents
: 1;
203 sal_Bool m_bDetachEvents
: 1;
204 bool m_bAttemptedHandlerCreation
: 1;
205 bool m_bSuspendFilterTextListening
; // no bit field, passed around as reference
207 // as we want to intercept dispatches of _all_ controls we're responsible for, and an object implementing
208 // the ::com::sun::star::frame::XDispatchProviderInterceptor interface can intercept only _one_ objects dispatches, we need a helper class
209 DECLARE_STL_VECTOR(DispatchInterceptionMultiplexer
*, Interceptors
);
210 Interceptors m_aControlDispatchInterceptors
;
213 FormController( const ::com::sun::star::uno::Reference
< ::com::sun::star::lang::XMultiServiceFactory
> & _rxORB
);
219 virtual ::com::sun::star::uno::Any SAL_CALL
queryInterface( const ::com::sun::star::uno::Type
& type
) throw ( ::com::sun::star::uno::RuntimeException
);
220 virtual void SAL_CALL
acquire() throw ();
221 virtual void SAL_CALL
release() throw ();
224 virtual ::com::sun::star::uno::Sequence
< sal_Int8
> SAL_CALL
getImplementationId() throw(::com::sun::star::uno::RuntimeException
);
225 virtual ::com::sun::star::uno::Sequence
< ::com::sun::star::uno::Type
> SAL_CALL
getTypes( ) throw(::com::sun::star::uno::RuntimeException
);
228 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
);
229 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
);
230 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
);
232 // ::com::sun::star::container::XChild
233 virtual ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XInterface
> SAL_CALL
getParent(void) throw( ::com::sun::star::uno::RuntimeException
);
234 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
);
236 // ::com::sun::star::lang::XEventListener
237 virtual void SAL_CALL
disposing(const ::com::sun::star::lang::EventObject
& Source
) throw( ::com::sun::star::uno::RuntimeException
);
240 virtual void SAL_CALL
disposing();
242 // OPropertySetHelper
243 virtual sal_Bool SAL_CALL
convertFastPropertyValue( ::com::sun::star::uno::Any
& rConvertedValue
, ::com::sun::star::uno::Any
& rOldValue
,
244 sal_Int32 nHandle
, const ::com::sun::star::uno::Any
& rValue
)
245 throw( ::com::sun::star::lang::IllegalArgumentException
);
247 virtual void SAL_CALL
setFastPropertyValue_NoBroadcast( sal_Int32 nHandle
, const ::com::sun::star::uno::Any
& rValue
) throw( ::com::sun::star::uno::Exception
);
248 virtual void SAL_CALL
getFastPropertyValue( ::com::sun::star::uno::Any
& rValue
, sal_Int32 nHandle
) const;
250 virtual ::com::sun::star::uno::Reference
< ::com::sun::star::beans::XPropertySetInfo
> SAL_CALL
getPropertySetInfo() throw( ::com::sun::star::uno::RuntimeException
);
251 virtual ::cppu::IPropertyArrayHelper
& SAL_CALL
getInfoHelper();
253 using OPropertySetHelper::getFastPropertyValue
;
256 virtual ::sal_Int32 SAL_CALL
getFilterComponents() throw (::com::sun::star::uno::RuntimeException
);
257 virtual ::sal_Int32 SAL_CALL
getDisjunctiveTerms() throw (::com::sun::star::uno::RuntimeException
);
258 virtual void SAL_CALL
addFilterControllerListener( const ::com::sun::star::uno::Reference
< ::com::sun::star::form::runtime::XFilterControllerListener
>& _Listener
) throw( ::com::sun::star::uno::RuntimeException
);
259 virtual void SAL_CALL
removeFilterControllerListener( const ::com::sun::star::uno::Reference
< ::com::sun::star::form::runtime::XFilterControllerListener
>& _Listener
) throw( ::com::sun::star::uno::RuntimeException
);
260 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
);
261 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
);
262 virtual ::com::sun::star::uno::Sequence
< ::com::sun::star::uno::Sequence
< OUString
> > SAL_CALL
getPredicateExpressions() throw( ::com::sun::star::uno::RuntimeException
);
263 virtual void SAL_CALL
removeDisjunctiveTerm( ::sal_Int32 _Term
) throw (::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
);
264 virtual void SAL_CALL
appendEmptyDisjunctiveTerm() throw (::com::sun::star::uno::RuntimeException
);
265 virtual ::sal_Int32 SAL_CALL
getActiveTerm() throw (::com::sun::star::uno::RuntimeException
);
266 virtual void SAL_CALL
setActiveTerm( ::sal_Int32 _ActiveTerm
) throw (::com::sun::star::lang::IndexOutOfBoundsException
, ::com::sun::star::uno::RuntimeException
);
269 virtual ::com::sun::star::uno::Type SAL_CALL
getElementType(void) throw( ::com::sun::star::uno::RuntimeException
);
270 virtual sal_Bool SAL_CALL
hasElements(void) throw( ::com::sun::star::uno::RuntimeException
);
272 // ::com::sun::star::container::XEnumerationAccess
273 virtual ::com::sun::star::uno::Reference
< ::com::sun::star::container::XEnumeration
> SAL_CALL
createEnumeration(void) throw( ::com::sun::star::uno::RuntimeException
);
275 // ::com::sun::star::container::XContainerListener
276 virtual void SAL_CALL
elementInserted(const ::com::sun::star::container::ContainerEvent
& rEvent
) throw( ::com::sun::star::uno::RuntimeException
);
277 virtual void SAL_CALL
elementReplaced(const ::com::sun::star::container::ContainerEvent
& rEvent
) throw( ::com::sun::star::uno::RuntimeException
);
278 virtual void SAL_CALL
elementRemoved(const ::com::sun::star::container::ContainerEvent
& rEvent
) throw( ::com::sun::star::uno::RuntimeException
);
281 virtual void SAL_CALL
loaded(const ::com::sun::star::lang::EventObject
& rEvent
) throw( ::com::sun::star::uno::RuntimeException
);
282 virtual void SAL_CALL
unloaded(const ::com::sun::star::lang::EventObject
& rEvent
) throw( ::com::sun::star::uno::RuntimeException
);
283 virtual void SAL_CALL
unloading(const ::com::sun::star::lang::EventObject
& aEvent
) throw( ::com::sun::star::uno::RuntimeException
);
284 virtual void SAL_CALL
reloading(const ::com::sun::star::lang::EventObject
& aEvent
) throw( ::com::sun::star::uno::RuntimeException
);
285 virtual void SAL_CALL
reloaded(const ::com::sun::star::lang::EventObject
& aEvent
) throw( ::com::sun::star::uno::RuntimeException
);
288 virtual void SAL_CALL
setMode(const OUString
& Mode
) throw( ::com::sun::star::lang::NoSupportException
, ::com::sun::star::uno::RuntimeException
);
289 virtual OUString SAL_CALL
getMode(void) throw( ::com::sun::star::uno::RuntimeException
);
290 virtual ::com::sun::star::uno::Sequence
< OUString
> SAL_CALL
getSupportedModes(void) throw( ::com::sun::star::uno::RuntimeException
);
291 virtual sal_Bool SAL_CALL
supportsMode(const OUString
& Mode
) throw( ::com::sun::star::uno::RuntimeException
);
293 // ::com::sun::star::container::XIndexAccess
294 virtual sal_Int32 SAL_CALL
getCount(void) throw( ::com::sun::star::uno::RuntimeException
);
295 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
);
297 // XModifyBroadcaster
298 virtual void SAL_CALL
addModifyListener(const ::com::sun::star::uno::Reference
< ::com::sun::star::util::XModifyListener
>& l
) throw( ::com::sun::star::uno::RuntimeException
);
299 virtual void SAL_CALL
removeModifyListener(const ::com::sun::star::uno::Reference
< ::com::sun::star::util::XModifyListener
>& l
) throw( ::com::sun::star::uno::RuntimeException
);
302 virtual void SAL_CALL
focusGained(const ::com::sun::star::awt::FocusEvent
& e
) throw( ::com::sun::star::uno::RuntimeException
);
303 virtual void SAL_CALL
focusLost(const ::com::sun::star::awt::FocusEvent
& e
) throw( ::com::sun::star::uno::RuntimeException
);
306 virtual void SAL_CALL
mousePressed( const ::com::sun::star::awt::MouseEvent
& _rEvent
) throw (::com::sun::star::uno::RuntimeException
);
307 virtual void SAL_CALL
mouseReleased( const ::com::sun::star::awt::MouseEvent
& _rEvent
) throw (::com::sun::star::uno::RuntimeException
);
308 virtual void SAL_CALL
mouseEntered( const ::com::sun::star::awt::MouseEvent
& _rEvent
) throw (::com::sun::star::uno::RuntimeException
);
309 virtual void SAL_CALL
mouseExited( const ::com::sun::star::awt::MouseEvent
& _rEvent
) throw (::com::sun::star::uno::RuntimeException
);
311 // XFormComponentValidityListener
312 virtual void SAL_CALL
componentValidityChanged( const ::com::sun::star::lang::EventObject
& _rSource
) throw (::com::sun::star::uno::RuntimeException
);
314 // XInteractionHandler
315 virtual void SAL_CALL
handle( const ::com::sun::star::uno::Reference
< ::com::sun::star::task::XInteractionRequest
>& Request
) throw (::com::sun::star::uno::RuntimeException
);
317 // XGridControlListener
318 virtual void SAL_CALL
columnChanged( const ::com::sun::star::lang::EventObject
& _event
) throw (::com::sun::star::uno::RuntimeException
);
320 // ::com::sun::star::beans::XPropertyChangeListener -> aenderung der stati
321 virtual void SAL_CALL
propertyChange(const ::com::sun::star::beans::PropertyChangeEvent
& evt
) throw( ::com::sun::star::uno::RuntimeException
);
323 // XTextListener -> modify setzen
324 virtual void SAL_CALL
textChanged(const ::com::sun::star::awt::TextEvent
& rEvent
) throw( ::com::sun::star::uno::RuntimeException
);
326 // XItemListener -> modify setzen
327 virtual void SAL_CALL
itemStateChanged(const ::com::sun::star::awt::ItemEvent
& rEvent
) throw( ::com::sun::star::uno::RuntimeException
);
329 // XModifyListener -> modify setzen
330 virtual void SAL_CALL
modified(const ::com::sun::star::lang::EventObject
& rEvent
) throw( ::com::sun::star::uno::RuntimeException
);
333 virtual ::com::sun::star::uno::Reference
< ::com::sun::star::form::runtime::XFormOperations
> SAL_CALL
getFormOperations() throw (::com::sun::star::uno::RuntimeException
);
334 virtual ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XControl
> SAL_CALL
getCurrentControl(void) throw( ::com::sun::star::uno::RuntimeException
);
335 virtual void SAL_CALL
addActivateListener(const ::com::sun::star::uno::Reference
< ::com::sun::star::form::XFormControllerListener
>& l
) throw( ::com::sun::star::uno::RuntimeException
);
336 virtual void SAL_CALL
removeActivateListener(const ::com::sun::star::uno::Reference
< ::com::sun::star::form::XFormControllerListener
>& l
) throw( ::com::sun::star::uno::RuntimeException
);
337 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
);
339 virtual ::com::sun::star::uno::Reference
< ::com::sun::star::form::runtime::XFormControllerContext
> SAL_CALL
getContext() throw (::com::sun::star::uno::RuntimeException
);
340 virtual void SAL_CALL
setContext( const ::com::sun::star::uno::Reference
< ::com::sun::star::form::runtime::XFormControllerContext
>& _context
) throw (::com::sun::star::uno::RuntimeException
);
341 virtual ::com::sun::star::uno::Reference
< ::com::sun::star::task::XInteractionHandler
> SAL_CALL
getInteractionHandler() throw (::com::sun::star::uno::RuntimeException
);
342 virtual void SAL_CALL
setInteractionHandler( const ::com::sun::star::uno::Reference
< ::com::sun::star::task::XInteractionHandler
>& _interactionHandler
) throw (::com::sun::star::uno::RuntimeException
);
345 virtual ::com::sun::star::uno::Sequence
< ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XControl
> > SAL_CALL
getControls(void) throw( ::com::sun::star::uno::RuntimeException
);
347 virtual void SAL_CALL
setModel(const ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XTabControllerModel
>& Model
) throw( ::com::sun::star::uno::RuntimeException
);
348 virtual ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XTabControllerModel
> SAL_CALL
getModel() throw( ::com::sun::star::uno::RuntimeException
);
350 virtual void SAL_CALL
setContainer(const ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XControlContainer
>& Container
) throw( ::com::sun::star::uno::RuntimeException
);
351 virtual ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XControlContainer
> SAL_CALL
getContainer() throw( ::com::sun::star::uno::RuntimeException
);
353 virtual void SAL_CALL
autoTabOrder() throw( ::com::sun::star::uno::RuntimeException
);
354 virtual void SAL_CALL
activateTabOrder() throw( ::com::sun::star::uno::RuntimeException
);
356 virtual void SAL_CALL
activateFirst() throw( ::com::sun::star::uno::RuntimeException
);
357 virtual void SAL_CALL
activateLast() throw( ::com::sun::star::uno::RuntimeException
);
359 // com::sun::star::sdbc::XRowSetListener
360 virtual void SAL_CALL
cursorMoved(const ::com::sun::star::lang::EventObject
& event
) throw( ::com::sun::star::uno::RuntimeException
);
361 virtual void SAL_CALL
rowChanged(const ::com::sun::star::lang::EventObject
& event
) throw( ::com::sun::star::uno::RuntimeException
);
362 virtual void SAL_CALL
rowSetChanged(const ::com::sun::star::lang::EventObject
& event
) throw( ::com::sun::star::uno::RuntimeException
);
364 // XRowSetApproveListener
365 virtual sal_Bool SAL_CALL
approveCursorMove(const ::com::sun::star::lang::EventObject
& event
) throw( ::com::sun::star::uno::RuntimeException
);
366 virtual sal_Bool SAL_CALL
approveRowChange(const ::com::sun::star::sdb::RowChangeEvent
& event
) throw( ::com::sun::star::uno::RuntimeException
);
367 virtual sal_Bool SAL_CALL
approveRowSetChange(const ::com::sun::star::lang::EventObject
& event
) throw( ::com::sun::star::uno::RuntimeException
);
369 // XRowSetApproveBroadcaster
370 virtual void SAL_CALL
addRowSetApproveListener(const ::com::sun::star::uno::Reference
< ::com::sun::star::sdb::XRowSetApproveListener
>& listener
) throw( ::com::sun::star::uno::RuntimeException
);
371 virtual void SAL_CALL
removeRowSetApproveListener(const ::com::sun::star::uno::Reference
< ::com::sun::star::sdb::XRowSetApproveListener
>& listener
) throw( ::com::sun::star::uno::RuntimeException
);
373 // XSQLErrorBroadcaster
374 virtual void SAL_CALL
errorOccured(const ::com::sun::star::sdb::SQLErrorEvent
& aEvent
) throw( ::com::sun::star::uno::RuntimeException
);
377 virtual void SAL_CALL
addSQLErrorListener(const ::com::sun::star::uno::Reference
< ::com::sun::star::sdb::XSQLErrorListener
>& _rListener
) throw( ::com::sun::star::uno::RuntimeException
);
378 virtual void SAL_CALL
removeSQLErrorListener(const ::com::sun::star::uno::Reference
< ::com::sun::star::sdb::XSQLErrorListener
>& _rListener
) throw( ::com::sun::star::uno::RuntimeException
);
380 // XDatabaseParameterBroadcaster2
381 virtual void SAL_CALL
addDatabaseParameterListener(const ::com::sun::star::uno::Reference
< ::com::sun::star::form::XDatabaseParameterListener
>& aListener
) throw( ::com::sun::star::uno::RuntimeException
);
382 virtual void SAL_CALL
removeDatabaseParameterListener(const ::com::sun::star::uno::Reference
< ::com::sun::star::form::XDatabaseParameterListener
>& aListener
) throw( ::com::sun::star::uno::RuntimeException
);
384 // XDatabaseParameterBroadcaster
385 virtual void SAL_CALL
addParameterListener(const ::com::sun::star::uno::Reference
< ::com::sun::star::form::XDatabaseParameterListener
>& aListener
) throw( ::com::sun::star::uno::RuntimeException
);
386 virtual void SAL_CALL
removeParameterListener(const ::com::sun::star::uno::Reference
< ::com::sun::star::form::XDatabaseParameterListener
>& aListener
) throw( ::com::sun::star::uno::RuntimeException
);
388 // XDatabaseParameterListener
389 virtual sal_Bool SAL_CALL
approveParameter(const ::com::sun::star::form::DatabaseParameterEvent
& aEvent
) throw( ::com::sun::star::uno::RuntimeException
);
391 // XConfirmDeleteBroadcaster
392 virtual void SAL_CALL
addConfirmDeleteListener(const ::com::sun::star::uno::Reference
< ::com::sun::star::form::XConfirmDeleteListener
>& aListener
) throw( ::com::sun::star::uno::RuntimeException
);
393 virtual void SAL_CALL
removeConfirmDeleteListener(const ::com::sun::star::uno::Reference
< ::com::sun::star::form::XConfirmDeleteListener
>& aListener
) throw( ::com::sun::star::uno::RuntimeException
);
395 // XConfirmDeleteListener
396 virtual sal_Bool SAL_CALL
confirmDelete(const ::com::sun::star::sdb::RowChangeEvent
& aEvent
) throw( ::com::sun::star::uno::RuntimeException
);
399 virtual sal_Bool SAL_CALL
supportsService(const OUString
& ServiceName
) throw(::com::sun::star::uno::RuntimeException
);
400 virtual OUString SAL_CALL
getImplementationName() throw(::com::sun::star::uno::RuntimeException
);
401 virtual ::com::sun::star::uno::Sequence
< OUString
> SAL_CALL
getSupportedServiceNames(void) throw(::com::sun::star::uno::RuntimeException
);
404 virtual sal_Bool SAL_CALL
approveReset(const ::com::sun::star::lang::EventObject
& rEvent
) throw( ::com::sun::star::uno::RuntimeException
);
405 virtual void SAL_CALL
resetted(const ::com::sun::star::lang::EventObject
& rEvent
) throw( ::com::sun::star::uno::RuntimeException
);
407 // XFeatureInvalidation
408 virtual void SAL_CALL
invalidateFeatures( const ::com::sun::star::uno::Sequence
< ::sal_Int16
>& Features
) throw (::com::sun::star::uno::RuntimeException
);
409 virtual void SAL_CALL
invalidateAllFeatures( ) throw (::com::sun::star::uno::RuntimeException
);
411 // method for registration
412 static ::com::sun::star::uno::Sequence
< OUString
> getSupportedServiceNames_Static(void);
414 // comphelper::OPropertyArrayUsageHelper
415 virtual void fillProperties(
416 ::com::sun::star::uno::Sequence
< ::com::sun::star::beans::Property
>& /* [out] */ _rProps
,
417 ::com::sun::star::uno::Sequence
< ::com::sun::star::beans::Property
>& /* [out] */ _rAggregateProps
421 // DispatchInterceptor
422 virtual ::com::sun::star::uno::Reference
< ::com::sun::star::frame::XDispatch
>
423 interceptedQueryDispatch(
424 const ::com::sun::star::util::URL
& aURL
,
425 const OUString
& aTargetFrameName
,
426 sal_Int32 nSearchFlags
427 ) throw( ::com::sun::star::uno::RuntimeException
);
429 virtual ::osl::Mutex
* getInterceptorMutex() { return &m_aMutex
; }
431 /// update all our dispatchers
432 void updateAllDispatchers() const;
434 /** disposes all dispatchers in m_aFeatureDispatchers, and empties m_aFeatureDispatchers
436 void disposeAllFeaturesAndDispatchers() SAL_THROW(());
438 void startFiltering();
439 void stopFiltering();
440 void setFilter(::std::vector
<FmFieldInfo
>&);
441 void startListening();
442 void stopListening();
444 /** ensures that we have an interaction handler, if possible
446 If an interaction handler was provided at creation time (<member>initialize</member>), this
447 one will be used. Else, an attempt is made to create an <type scope="com::sun::star::sdb">InteractionHandler</type>
451 if and only if <member>m_xInteractionHandler</member> is valid when the method returns
453 bool ensureInteractionHandler();
455 /** replaces one of our controls with another one
457 Upon successful replacing, the old control will be disposed. Also, internal members pointing
458 to the current or active control will be adjusted. Yet more, if the replaced control was
459 the active control, the new control will be made active.
461 @param _rxExistentControl
462 The control to replace. Must be one of the controls in our ControlContainer.
464 The control which should replace the existent control.
466 <TRUE/> if and only if the control was successfully replaced
469 const ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XControl
>& _rxExistentControl
,
470 const ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XControl
>& _rxNewControl
473 // we're listening at all bound controls for modifications
474 void startControlModifyListening(const ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XControl
>& xControl
);
475 void stopControlModifyListening(const ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XControl
>& xControl
);
478 void setControlLock(const ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XControl
>& xControl
);
479 void addToEventAttacher(const ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XControl
>& xControl
);
480 void removeFromEventAttacher(const ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XControl
>& xControl
);
481 void toggleAutoFields(sal_Bool bAutoFields
);
482 void unload() throw( ::com::sun::star::uno::RuntimeException
);
483 void removeBoundFieldListener();
485 void startFormListening( const ::com::sun::star::uno::Reference
< ::com::sun::star::beans::XPropertySet
>& _rxForm
, sal_Bool _bPropertiesOnly
);
486 void stopFormListening( const ::com::sun::star::uno::Reference
< ::com::sun::star::beans::XPropertySet
>& _rxForm
, sal_Bool _bPropertiesOnly
);
488 ::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
, sal_Bool _bRemove
, sal_Bool _bOverWrite
) const;
490 void insertControl(const ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XControl
>& xControl
);
491 void removeControl(const ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XControl
>& xControl
);
493 /// called when a new control is to be handled by the controller
494 void implControlInserted( const ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XControl
>& _rxControl
, bool _bAddToEventAttacher
);
495 /// called when a control is not to be handled by the controller anymore
496 void implControlRemoved( const ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XControl
>& _rxControl
, bool _bRemoveFromEventAttacher
);
498 /** sets m_xCurrentControl, plus does administrative tasks depending on it
500 void implSetCurrentControl( const ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XControl
>& _rxControl
);
502 /** invalidates the FormFeatures which depend on the current control
504 void implInvalidateCurrentControlDependentFeatures();
506 bool impl_isDisposed_nofail() const { return FormController_BASE::rBHelper
.bDisposed
; }
507 void impl_checkDisposed_throw() const;
509 void impl_onModify();
511 /** adds the given filter row to m_aFilterRows, setting m_nCurrentFilterPosition to 0 if the newly added
512 row is the first one.
517 void impl_addFilterRow( const FmFilterRow
& _row
);
519 /** adds an empty filter row to m_aFilterRows, and notifies our listeners
521 void impl_appendEmptyFilterRow( ::osl::ClearableMutexGuard
& _rClearBeforeNotify
);
523 sal_Bool
isLocked() const {return m_bLocked
;}
524 sal_Bool
determineLockState() const;
526 Window
* getDialogParentWindow();
527 // returns the window which should be used as parent window for dialogs
529 ::com::sun::star::uno::Reference
< ::com::sun::star::frame::XDispatchProviderInterceptor
> createInterceptor(const ::com::sun::star::uno::Reference
< ::com::sun::star::frame::XDispatchProviderInterception
>& _xInterception
);
530 // create a new interceptor, register it on the given object
531 void deleteInterceptor(const ::com::sun::star::uno::Reference
< ::com::sun::star::frame::XDispatchProviderInterception
>& _xInterception
);
532 // if createInterceptor was called for the given object the according interceptor will be removed
533 // from the objects interceptor chain and released
535 /** checks all form controls belonging to our form for validity
537 If a form control supports the XValidatableFormComponent interface, this is used to determine
538 the validity of the control. If the interface is not supported, the control is supposed to be
541 @param _rFirstInvalidityExplanation
542 if the method returns <FALSE/> (i.e. if there is an invalid control), this string contains
543 the explanation for the invalidity, as obtained from the validator.
545 @param _rxFirstInvalidModel
546 if the method returns <FALSE/> (i.e. if there is an invalid control), this contains
550 <TRUE/> if and only if all controls belonging to our form are valid
552 bool checkFormComponentValidity(
553 OUString
& /* [out] */ _rFirstInvalidityExplanation
,
554 ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XControlModel
>& /* [out] */ _rxFirstInvalidModel
557 /** locates the control which belongs to a given model
559 ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XControl
>
560 locateControl( const ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XControlModel
>& _rxModel
) SAL_THROW(());
562 // set the text for all filters
563 void impl_setTextOnAllFilter_throw();
565 // in filter mode we do not listen for changes
566 sal_Bool
isListeningForChanges() const {return m_bDBConnection
&& !m_bFiltering
&& !isLocked();}
567 ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XControl
> isInList(const ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XWindowPeer
>& xPeer
) const;
569 DECL_LINK( OnActivateTabOrder
, void* );
570 DECL_LINK( OnInvalidateFeatures
, void* );
571 DECL_LINK( OnLoad
, void* );
572 DECL_LINK( OnToggleAutoFields
, void* );
573 DECL_LINK( OnActivated
, void* );
574 DECL_LINK( OnDeactivated
, void* );
577 } // namespace svxform
579 #endif // _SVX_FMCTRLER_HXX
581 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */