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