Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
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/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
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 .
18 : */
19 : #ifndef INCLUDED_SVX_SOURCE_INC_FORMCONTROLLER_HXX
20 : #define INCLUDED_SVX_SOURCE_INC_FORMCONTROLLER_HXX
21 :
22 : #include <sal/config.h>
23 :
24 : #include <vector>
25 :
26 : #include "delayedevent.hxx"
27 : #include "formdispatchinterceptor.hxx"
28 : #include "sqlparserclient.hxx"
29 :
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>
73 :
74 : #include <comphelper/broadcasthelper.hxx>
75 : #include <comphelper/proparrhlp.hxx>
76 : #include <cppuhelper/propshlp.hxx>
77 : #include <vcl/timer.hxx>
78 :
79 : #ifndef INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_22
80 : #define INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_22
81 : #define COMPHELPER_IMPLBASE_INTERFACE_NUMBER 22
82 : #include <comphelper/implbase_var.hxx>
83 : #endif
84 :
85 : 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>
86 : {
87 0 : 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
88 : {
89 0 : return reinterpret_cast<sal_Int64>(x.get()) < reinterpret_cast<sal_Int64>(y.get());
90 : }
91 : };
92 :
93 : typedef ::std::map< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent >, OUString, FmXTextComponentLess> FmFilterRow;
94 : typedef ::std::vector< FmFilterRow > FmFilterRows;
95 : typedef ::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > > FmFormControllers;
96 :
97 : class Window;
98 :
99 : namespace svxform
100 : {
101 : typedef ::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent > > FilterComponents;
102 : class ControlBorderManager;
103 : struct FmFieldInfo;
104 :
105 : typedef ::comphelper::WeakComponentImplHelper22 < ::com::sun::star::form::runtime::XFormController
106 : , ::com::sun::star::form::runtime::XFilterController
107 : , ::com::sun::star::awt::XFocusListener
108 : , ::com::sun::star::form::XLoadListener
109 : , ::com::sun::star::beans::XPropertyChangeListener
110 : , ::com::sun::star::awt::XTextListener
111 : , ::com::sun::star::awt::XItemListener
112 : , ::com::sun::star::container::XContainerListener
113 : , ::com::sun::star::util::XModifyListener
114 : , ::com::sun::star::form::XConfirmDeleteListener
115 : , ::com::sun::star::sdb::XSQLErrorListener
116 : , ::com::sun::star::sdbc::XRowSetListener
117 : , ::com::sun::star::sdb::XRowSetApproveListener
118 : , ::com::sun::star::form::XDatabaseParameterListener
119 : , ::com::sun::star::lang::XServiceInfo
120 : , ::com::sun::star::form::XResetListener
121 : , ::com::sun::star::frame::XDispatch
122 : , ::com::sun::star::awt::XMouseListener
123 : , ::com::sun::star::form::validation::XFormComponentValidityListener
124 : , ::com::sun::star::task::XInteractionHandler
125 : , ::com::sun::star::form::XGridControlListener
126 : , ::com::sun::star::form::runtime::XFeatureInvalidation
127 : > FormController_BASE;
128 :
129 :
130 : // FormController
131 :
132 : class ColumnInfoCache;
133 : class FormController :public ::comphelper::OBaseMutex
134 : ,public FormController_BASE
135 : ,public ::cppu::OPropertySetHelper
136 : ,public DispatchInterceptor
137 : ,public ::comphelper::OAggregationArrayUsageHelper< FormController >
138 : ,public ::svxform::OSQLParserClient
139 : {
140 : typedef ::std::map < sal_Int16,
141 : ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch >
142 : > DispatcherContainer;
143 :
144 : ::com::sun::star::uno::Reference< ::com::sun::star::uno::XAggregation> m_xAggregate;
145 : ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTabController> m_xTabController;
146 : ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> m_xActiveControl, m_xCurrentControl;
147 : ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess> m_xModelAsIndex;
148 : ::com::sun::star::uno::Reference< ::com::sun::star::script::XEventAttacherManager> m_xModelAsManager;
149 : ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface> m_xParent;
150 : ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext> m_xComponentContext;
151 : // Composer used for checking filter conditions
152 : ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSingleSelectQueryComposer > m_xComposer;
153 : ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler > m_xInteractionHandler;
154 : ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormControllerContext > m_xFormControllerContext;
155 :
156 : ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> > m_aControls;
157 : ::cppu::OInterfaceContainerHelper
158 : m_aActivateListeners,
159 : m_aModifyListeners,
160 : m_aErrorListeners,
161 : m_aDeleteListeners,
162 : m_aRowSetApproveListeners,
163 : m_aParameterListeners,
164 : m_aFilterListeners;
165 :
166 : FmFormControllers m_aChildren;
167 : FilterComponents m_aFilterComponents;
168 : FmFilterRows m_aFilterRows;
169 :
170 : Timer m_aTabActivationTimer;
171 : Timer m_aFeatureInvalidationTimer;
172 :
173 : ::svxform::ControlBorderManager*
174 : m_pControlBorderManager;
175 :
176 : ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormOperations >
177 : m_xFormOperations;
178 : DispatcherContainer m_aFeatureDispatchers;
179 : ::std::set< sal_Int16 > m_aInvalidFeatures; // for asynchronous feature invalidation
180 :
181 : OUString m_aMode;
182 :
183 : ::svxform::DelayedEvent m_aLoadEvent;
184 : ::svxform::DelayedEvent m_aToggleEvent;
185 : ::svxform::DelayedEvent m_aActivationEvent;
186 : ::svxform::DelayedEvent m_aDeactivationEvent;
187 :
188 : ::std::auto_ptr< ColumnInfoCache >
189 : m_pColumnInfoCache;
190 :
191 : sal_Int32 m_nCurrentFilterPosition; // current level for filtering (or-criteria)
192 :
193 : sal_Bool m_bCurrentRecordModified : 1;
194 : sal_Bool m_bCurrentRecordNew : 1;
195 : sal_Bool m_bLocked : 1;
196 : sal_Bool m_bDBConnection : 1; // Focuslistener nur fuer Datenbankformulare
197 : sal_Bool m_bCycle : 1;
198 : sal_Bool m_bCanInsert : 1;
199 : sal_Bool m_bCanUpdate : 1;
200 : sal_Bool m_bCommitLock : 1; // lock the committing of controls see focusGained
201 : sal_Bool m_bModified : 1; // ist der Inhalt eines Controls modifiziert ?
202 : sal_Bool m_bControlsSorted : 1;
203 : sal_Bool m_bFiltering : 1;
204 : sal_Bool m_bAttachEvents : 1;
205 : sal_Bool m_bDetachEvents : 1;
206 : bool m_bAttemptedHandlerCreation : 1;
207 : bool m_bSuspendFilterTextListening; // no bit field, passed around as reference
208 :
209 : // as we want to intercept dispatches of _all_ controls we're responsible for, and an object implementing
210 : // the ::com::sun::star::frame::XDispatchProviderInterceptor interface can intercept only _one_ objects dispatches, we need a helper class
211 : typedef std::vector<DispatchInterceptionMultiplexer*> Interceptors;
212 : Interceptors m_aControlDispatchInterceptors;
213 :
214 : public:
215 : FormController( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > & _rxORB );
216 :
217 : protected:
218 : virtual ~FormController();
219 :
220 : // XInterface
221 : 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;
222 : virtual void SAL_CALL acquire() throw () SAL_OVERRIDE;
223 : virtual void SAL_CALL release() throw () SAL_OVERRIDE;
224 :
225 : // XTypeProvider
226 : virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
227 : virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
228 :
229 : // XDispatch
230 : 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;
231 : 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;
232 : 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;
233 :
234 : // ::com::sun::star::container::XChild
235 : virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface> SAL_CALL getParent(void) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
236 : 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;
237 :
238 : // ::com::sun::star::lang::XEventListener
239 : virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
240 :
241 : // OComponentHelper
242 : virtual void SAL_CALL disposing() SAL_OVERRIDE;
243 :
244 : // OPropertySetHelper
245 : virtual sal_Bool SAL_CALL convertFastPropertyValue( ::com::sun::star::uno::Any & rConvertedValue, ::com::sun::star::uno::Any & rOldValue,
246 : sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue )
247 : throw( ::com::sun::star::lang::IllegalArgumentException ) SAL_OVERRIDE;
248 :
249 : 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;
250 : virtual void SAL_CALL getFastPropertyValue( ::com::sun::star::uno::Any& rValue, sal_Int32 nHandle ) const SAL_OVERRIDE;
251 :
252 : virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo> SAL_CALL getPropertySetInfo() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
253 : virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper() SAL_OVERRIDE;
254 :
255 : using OPropertySetHelper::getFastPropertyValue;
256 :
257 : // XFilterController
258 : virtual ::sal_Int32 SAL_CALL getFilterComponents() throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
259 : virtual ::sal_Int32 SAL_CALL getDisjunctiveTerms() throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
260 : 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;
261 : 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;
262 : 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;
263 : 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;
264 : 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;
265 : virtual void SAL_CALL removeDisjunctiveTerm( ::sal_Int32 _Term ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
266 : virtual void SAL_CALL appendEmptyDisjunctiveTerm() throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
267 : virtual ::sal_Int32 SAL_CALL getActiveTerm() throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
268 : virtual void SAL_CALL setActiveTerm( ::sal_Int32 _ActiveTerm ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
269 :
270 : // XElementAccess
271 : virtual ::com::sun::star::uno::Type SAL_CALL getElementType(void) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
272 : virtual sal_Bool SAL_CALL hasElements(void) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
273 :
274 : // ::com::sun::star::container::XEnumerationAccess
275 : virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration> SAL_CALL createEnumeration(void) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
276 :
277 : // ::com::sun::star::container::XContainerListener
278 : virtual void SAL_CALL elementInserted(const ::com::sun::star::container::ContainerEvent& rEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
279 : virtual void SAL_CALL elementReplaced(const ::com::sun::star::container::ContainerEvent& rEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
280 : virtual void SAL_CALL elementRemoved(const ::com::sun::star::container::ContainerEvent& rEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
281 :
282 : // XLoadListener
283 : virtual void SAL_CALL loaded(const ::com::sun::star::lang::EventObject& rEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
284 : virtual void SAL_CALL unloaded(const ::com::sun::star::lang::EventObject& rEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
285 : virtual void SAL_CALL unloading(const ::com::sun::star::lang::EventObject& aEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
286 : virtual void SAL_CALL reloading(const ::com::sun::star::lang::EventObject& aEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
287 : virtual void SAL_CALL reloaded(const ::com::sun::star::lang::EventObject& aEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
288 :
289 : // XModeSelector
290 : virtual void SAL_CALL setMode(const OUString& Mode) throw( ::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
291 : virtual OUString SAL_CALL getMode(void) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
292 : virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedModes(void) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
293 : virtual sal_Bool SAL_CALL supportsMode(const OUString& Mode) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
294 :
295 : // ::com::sun::star::container::XIndexAccess
296 : virtual sal_Int32 SAL_CALL getCount(void) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
297 : 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;
298 :
299 : // XModifyBroadcaster
300 : 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;
301 : 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;
302 :
303 : // XFocusListener
304 : virtual void SAL_CALL focusGained(const ::com::sun::star::awt::FocusEvent& e) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
305 : virtual void SAL_CALL focusLost(const ::com::sun::star::awt::FocusEvent& e) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
306 :
307 : // XMouseListener
308 : virtual void SAL_CALL mousePressed( const ::com::sun::star::awt::MouseEvent& _rEvent ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
309 : virtual void SAL_CALL mouseReleased( const ::com::sun::star::awt::MouseEvent& _rEvent ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
310 : virtual void SAL_CALL mouseEntered( const ::com::sun::star::awt::MouseEvent& _rEvent ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
311 : virtual void SAL_CALL mouseExited( const ::com::sun::star::awt::MouseEvent& _rEvent ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
312 :
313 : // XFormComponentValidityListener
314 : virtual void SAL_CALL componentValidityChanged( const ::com::sun::star::lang::EventObject& _rSource ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
315 :
316 : // XInteractionHandler
317 : 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;
318 :
319 : // XGridControlListener
320 : virtual void SAL_CALL columnChanged( const ::com::sun::star::lang::EventObject& _event ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
321 :
322 : // ::com::sun::star::beans::XPropertyChangeListener -> change of states
323 : virtual void SAL_CALL propertyChange(const ::com::sun::star::beans::PropertyChangeEvent& evt) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
324 :
325 : // XTextListener -> modify setzen
326 : virtual void SAL_CALL textChanged(const ::com::sun::star::awt::TextEvent& rEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
327 :
328 : // XItemListener -> modify setzen
329 : virtual void SAL_CALL itemStateChanged(const ::com::sun::star::awt::ItemEvent& rEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
330 :
331 : // XModifyListener -> modify setzen
332 : virtual void SAL_CALL modified(const ::com::sun::star::lang::EventObject& rEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
333 :
334 : // XFormController
335 : 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;
336 : virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> SAL_CALL getCurrentControl(void) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
337 : 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;
338 : 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;
339 : 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;
340 :
341 : 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;
342 : 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;
343 : virtual ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler > SAL_CALL getInteractionHandler() throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
344 : 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;
345 :
346 : // XTabController
347 : 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, std::exception ) SAL_OVERRIDE;
348 :
349 : 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;
350 : virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTabControllerModel> SAL_CALL getModel() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
351 :
352 : 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;
353 : virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer> SAL_CALL getContainer() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
354 :
355 : virtual void SAL_CALL autoTabOrder() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
356 : virtual void SAL_CALL activateTabOrder() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
357 :
358 : virtual void SAL_CALL activateFirst() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
359 : virtual void SAL_CALL activateLast() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
360 :
361 : // com::sun::star::sdbc::XRowSetListener
362 : virtual void SAL_CALL cursorMoved(const ::com::sun::star::lang::EventObject& event) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
363 : virtual void SAL_CALL rowChanged(const ::com::sun::star::lang::EventObject& event) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
364 : virtual void SAL_CALL rowSetChanged(const ::com::sun::star::lang::EventObject& event) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
365 :
366 : // XRowSetApproveListener
367 : virtual sal_Bool SAL_CALL approveCursorMove(const ::com::sun::star::lang::EventObject& event) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
368 : virtual sal_Bool SAL_CALL approveRowChange(const ::com::sun::star::sdb::RowChangeEvent& event) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
369 : virtual sal_Bool SAL_CALL approveRowSetChange(const ::com::sun::star::lang::EventObject& event) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
370 :
371 : // XRowSetApproveBroadcaster
372 : 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;
373 : 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;
374 :
375 : // XSQLErrorBroadcaster
376 : virtual void SAL_CALL errorOccured(const ::com::sun::star::sdb::SQLErrorEvent& aEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
377 :
378 : // XSQLErrorListener
379 : 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;
380 : 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;
381 :
382 : // XDatabaseParameterBroadcaster2
383 : 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;
384 : 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;
385 :
386 : // XDatabaseParameterBroadcaster
387 : 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;
388 : 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;
389 :
390 : // XDatabaseParameterListener
391 : virtual sal_Bool SAL_CALL approveParameter(const ::com::sun::star::form::DatabaseParameterEvent& aEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
392 :
393 : // XConfirmDeleteBroadcaster
394 : 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;
395 : 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;
396 :
397 : // XConfirmDeleteListener
398 : virtual sal_Bool SAL_CALL confirmDelete(const ::com::sun::star::sdb::RowChangeEvent& aEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
399 :
400 : // XServiceInfo
401 : virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
402 : virtual OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
403 : virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames(void) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
404 :
405 : // XResetListener
406 : virtual sal_Bool SAL_CALL approveReset(const ::com::sun::star::lang::EventObject& rEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
407 : virtual void SAL_CALL resetted(const ::com::sun::star::lang::EventObject& rEvent) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
408 :
409 : // XFeatureInvalidation
410 : virtual void SAL_CALL invalidateFeatures( const ::com::sun::star::uno::Sequence< ::sal_Int16 >& Features ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
411 : virtual void SAL_CALL invalidateAllFeatures( ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
412 :
413 : // method for registration
414 : static ::com::sun::star::uno::Sequence< OUString > getSupportedServiceNames_Static(void);
415 :
416 : // comphelper::OPropertyArrayUsageHelper
417 : virtual void fillProperties(
418 : ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rProps,
419 : ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& /* [out] */ _rAggregateProps
420 : ) const SAL_OVERRIDE;
421 :
422 : protected:
423 : // DispatchInterceptor
424 : virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch>
425 : interceptedQueryDispatch(
426 : const ::com::sun::star::util::URL& aURL,
427 : const OUString& aTargetFrameName,
428 : sal_Int32 nSearchFlags
429 : ) throw( ::com::sun::star::uno::RuntimeException ) SAL_OVERRIDE;
430 :
431 0 : virtual ::osl::Mutex* getInterceptorMutex() SAL_OVERRIDE { return &m_aMutex; }
432 :
433 : /// update all our dispatchers
434 : void updateAllDispatchers() const;
435 :
436 : /** disposes all dispatchers in m_aFeatureDispatchers, and empties m_aFeatureDispatchers
437 : */
438 : void disposeAllFeaturesAndDispatchers() SAL_THROW(());
439 :
440 : void startFiltering();
441 : void stopFiltering();
442 : void setFilter(::std::vector<FmFieldInfo>&);
443 : void startListening();
444 : void stopListening();
445 :
446 : /** ensures that we have an interaction handler, if possible
447 :
448 : If an interaction handler was provided at creation time (<member>initialize</member>), this
449 : one will be used. Else, an attempt is made to create an <type scope="com::sun::star::sdb">InteractionHandler</type>
450 : is made.
451 :
452 : @return <TRUE/>
453 : if and only if <member>m_xInteractionHandler</member> is valid when the method returns
454 : */
455 : bool ensureInteractionHandler();
456 :
457 : /** replaces one of our controls with another one
458 :
459 : Upon successful replacing, the old control will be disposed. Also, internal members pointing
460 : to the current or active control will be adjusted. Yet more, if the replaced control was
461 : the active control, the new control will be made active.
462 :
463 : @param _rxExistentControl
464 : The control to replace. Must be one of the controls in our ControlContainer.
465 : @param _rxNewControl
466 : The control which should replace the existent control.
467 : @return
468 : <TRUE/> if and only if the control was successfully replaced
469 : */
470 : bool replaceControl(
471 : const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >& _rxExistentControl,
472 : const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >& _rxNewControl
473 : );
474 :
475 : // we're listening at all bound controls for modifications
476 : void startControlModifyListening(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
477 : void stopControlModifyListening(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
478 :
479 : void setLocks();
480 : void setControlLock(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
481 : void addToEventAttacher(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
482 : void removeFromEventAttacher(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
483 : void toggleAutoFields(sal_Bool bAutoFields);
484 : void unload() throw( ::com::sun::star::uno::RuntimeException );
485 : void removeBoundFieldListener();
486 :
487 : void startFormListening( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxForm, sal_Bool _bPropertiesOnly );
488 : void stopFormListening( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxForm, sal_Bool _bPropertiesOnly );
489 :
490 : ::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;
491 :
492 : void insertControl(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
493 : void removeControl(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& xControl);
494 :
495 : /// called when a new control is to be handled by the controller
496 : void implControlInserted( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& _rxControl, bool _bAddToEventAttacher );
497 : /// called when a control is not to be handled by the controller anymore
498 : void implControlRemoved( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& _rxControl, bool _bRemoveFromEventAttacher );
499 :
500 : /** sets m_xCurrentControl, plus does administrative tasks depending on it
501 : */
502 : void implSetCurrentControl( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >& _rxControl );
503 :
504 : /** invalidates the FormFeatures which depend on the current control
505 : */
506 : void implInvalidateCurrentControlDependentFeatures();
507 :
508 0 : bool impl_isDisposed_nofail() const { return FormController_BASE::rBHelper.bDisposed; }
509 : void impl_checkDisposed_throw() const;
510 :
511 : void impl_onModify();
512 :
513 : /** adds the given filter row to m_aFilterRows, setting m_nCurrentFilterPosition to 0 if the newly added
514 : row is the first one.
515 :
516 : @precond
517 : our mutex is locked
518 : */
519 : void impl_addFilterRow( const FmFilterRow& _row );
520 :
521 : /** adds an empty filter row to m_aFilterRows, and notifies our listeners
522 : */
523 : void impl_appendEmptyFilterRow( ::osl::ClearableMutexGuard& _rClearBeforeNotify );
524 :
525 0 : sal_Bool isLocked() const {return m_bLocked;}
526 : sal_Bool determineLockState() const;
527 :
528 : Window* getDialogParentWindow();
529 : // returns the window which should be used as parent window for dialogs
530 :
531 : ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor> createInterceptor(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterception>& _xInterception);
532 : // create a new interceptor, register it on the given object
533 : void deleteInterceptor(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterception>& _xInterception);
534 : // if createInterceptor was called for the given object the according interceptor will be removed
535 : // from the objects interceptor chain and released
536 :
537 : /** checks all form controls belonging to our form for validity
538 :
539 : If a form control supports the XValidatableFormComponent interface, this is used to determine
540 : the validity of the control. If the interface is not supported, the control is supposed to be
541 : valid.
542 :
543 : @param _rFirstInvalidityExplanation
544 : if the method returns <FALSE/> (i.e. if there is an invalid control), this string contains
545 : the explanation for the invalidity, as obtained from the validator.
546 :
547 : @param _rxFirstInvalidModel
548 : if the method returns <FALSE/> (i.e. if there is an invalid control), this contains
549 : the control model
550 :
551 : @return
552 : <TRUE/> if and only if all controls belonging to our form are valid
553 : */
554 : bool checkFormComponentValidity(
555 : OUString& /* [out] */ _rFirstInvalidityExplanation,
556 : ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& /* [out] */ _rxFirstInvalidModel
557 : ) SAL_THROW(());
558 :
559 : /** locates the control which belongs to a given model
560 : */
561 : ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >
562 : locateControl( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& _rxModel ) SAL_THROW(());
563 :
564 : // set the text for all filters
565 : void impl_setTextOnAllFilter_throw();
566 :
567 : // in filter mode we do not listen for changes
568 0 : sal_Bool isListeningForChanges() const {return m_bDBConnection && !m_bFiltering && !isLocked();}
569 : ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl> isInList(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer>& xPeer) const;
570 :
571 : DECL_LINK( OnActivateTabOrder, void* );
572 : DECL_LINK( OnInvalidateFeatures, void* );
573 : DECL_LINK( OnLoad, void* );
574 : DECL_LINK( OnToggleAutoFields, void* );
575 : DECL_LINK( OnActivated, void* );
576 : DECL_LINK( OnDeactivated, void* );
577 : };
578 :
579 : } // namespace svxform
580 :
581 : #endif // INCLUDED_SVX_SOURCE_INC_FORMCONTROLLER_HXX
582 :
583 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|