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