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_FMGRIDIF_HXX 20 #define INCLUDED_SVX_FMGRIDIF_HXX 21 22 #include <svx/svxdllapi.h> 23 24 #include <com/sun/star/view/XSelectionSupplier.hpp> 25 #include <com/sun/star/beans/XPropertyChangeListener.hpp> 26 #include <com/sun/star/container/XEnumerationAccess.hpp> 27 #include <com/sun/star/container/XContainer.hpp> 28 #include <com/sun/star/container/XContainerListener.hpp> 29 #include <com/sun/star/sdbc/XRowSetListener.hpp> 30 #include <com/sun/star/sdb/XRowSetSupplier.hpp> 31 #include <com/sun/star/form/XResetListener.hpp> 32 #include <com/sun/star/form/XBoundComponent.hpp> 33 #include <com/sun/star/form/XLoadListener.hpp> 34 #include <com/sun/star/form/XGridControl.hpp> 35 #include <com/sun/star/form/XGridPeer.hpp> 36 #include <com/sun/star/frame/XDispatchProvider.hpp> 37 #include <com/sun/star/frame/XStatusListener.hpp> 38 #include <com/sun/star/frame/XDispatchProviderInterception.hpp> 39 #include <com/sun/star/view/XSelectionChangeListener.hpp> 40 #include <com/sun/star/util/XModeSelector.hpp> 41 #include <com/sun/star/util/XModifyListener.hpp> 42 #include <com/sun/star/util/XModifyBroadcaster.hpp> 43 44 #include <tools/wintypes.hxx> 45 #include <toolkit/controls/unocontrol.hxx> 46 #include <toolkit/awt/vclxwindow.hxx> 47 #include <comphelper/servicehelper.hxx> 48 #include <comphelper/uno3.hxx> 49 #include <cppuhelper/implbase.hxx> 50 #include <cppuhelper/implbase10.hxx> 51 #include <memory> 52 53 namespace com::sun::star::beans { class XPropertySet; } 54 namespace com::sun::star::uno { class XComponentContext; } 55 56 class DbGridColumn; 57 enum class DbGridControlNavigationBarState; 58 59 class SAL_WARN_UNUSED OWeakSubObject : public ::cppu::OWeakObject 60 { 61 protected: 62 ::cppu::OWeakObject& m_rParent; 63 64 public: OWeakSubObject(::cppu::OWeakObject & rParent)65 OWeakSubObject(::cppu::OWeakObject& rParent) : m_rParent(rParent) { } 66 acquire()67 virtual void SAL_CALL acquire() throw() override { m_rParent.acquire(); } release()68 virtual void SAL_CALL release() throw() override { m_rParent.release(); } 69 }; 70 71 72 // FmXModifyMultiplexer 73 74 class SAL_WARN_UNUSED FmXModifyMultiplexer final : public OWeakSubObject 75 ,public ::comphelper::OInterfaceContainerHelper2 76 ,public css::util::XModifyListener 77 { 78 public: 79 FmXModifyMultiplexer( ::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex ); 80 DECLARE_UNO3_DEFAULTS(FmXModifyMultiplexer,OWeakSubObject) 81 virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; 82 83 // css::lang::XEventListener 84 virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; 85 86 // css::util::XModifyListener 87 virtual void SAL_CALL modified(const css::lang::EventObject& Source) override; 88 89 // resolve ambiguity : both OWeakObject and OInterfaceContainerHelper2 have these memory operators 90 using OWeakSubObject::operator new; 91 using OWeakSubObject::operator delete; 92 }; 93 94 95 // FmXUpdateMultiplexer 96 97 class SAL_WARN_UNUSED FmXUpdateMultiplexer final : public OWeakSubObject, 98 public ::comphelper::OInterfaceContainerHelper2, 99 public css::form::XUpdateListener 100 { 101 public: 102 FmXUpdateMultiplexer( ::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex ); 103 DECLARE_UNO3_DEFAULTS(FmXUpdateMultiplexer,OWeakSubObject) 104 105 virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; 106 107 // css::lang::XEventListener 108 virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; 109 110 // css::form::XUpdateListener 111 virtual sal_Bool SAL_CALL approveUpdate(const css::lang::EventObject &) override; 112 virtual void SAL_CALL updated(const css::lang::EventObject &) override; 113 114 // resolve ambiguity : both OWeakObject and OInterfaceContainerHelper2 have these memory operators 115 using OWeakSubObject::operator new; 116 using OWeakSubObject::operator delete; 117 }; 118 119 120 // FmXSelectionMultiplexer 121 122 class SAL_WARN_UNUSED FmXSelectionMultiplexer final : public OWeakSubObject 123 ,public ::comphelper::OInterfaceContainerHelper2 124 ,public css::view::XSelectionChangeListener 125 { 126 public: 127 FmXSelectionMultiplexer( ::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex ); 128 DECLARE_UNO3_DEFAULTS(FmXSelectionMultiplexer, OWeakSubObject) 129 130 virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; 131 132 // css::lang::XEventListener 133 virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; 134 135 // css::view::XSelectionChangeListener 136 virtual void SAL_CALL selectionChanged( const css::lang::EventObject& aEvent ) override; 137 138 // resolve ambiguity : both OWeakObject and OInterfaceContainerHelper2 have these memory operators 139 using OWeakSubObject::operator new; 140 using OWeakSubObject::operator delete; 141 }; 142 143 144 // FmXGridControlMultiplexer 145 146 class SAL_WARN_UNUSED FmXGridControlMultiplexer final : public OWeakSubObject 147 ,public ::comphelper::OInterfaceContainerHelper2 148 ,public css::form::XGridControlListener 149 { 150 public: 151 FmXGridControlMultiplexer( ::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex ); 152 DECLARE_UNO3_DEFAULTS( FmXGridControlMultiplexer, OWeakSubObject ) 153 154 virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; 155 156 // css::lang::XEventListener 157 virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; 158 159 // css::view::XSelectionChangeListener 160 virtual void SAL_CALL columnChanged( const css::lang::EventObject& _event ) override; 161 162 // resolve ambiguity : both OWeakObject and OInterfaceContainerHelper2 have these memory operators 163 using OWeakSubObject::operator new; 164 using OWeakSubObject::operator delete; 165 }; 166 167 168 // FmXContainerMultiplexer 169 170 class SAL_WARN_UNUSED FmXContainerMultiplexer final : public OWeakSubObject, 171 public ::comphelper::OInterfaceContainerHelper2, 172 public css::container::XContainerListener 173 { 174 public: 175 FmXContainerMultiplexer( ::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex); 176 DECLARE_UNO3_DEFAULTS(FmXContainerMultiplexer,OWeakSubObject) 177 virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; 178 179 // css::lang::XEventListener 180 virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; 181 182 // css::container::XContainerListener 183 virtual void SAL_CALL elementInserted(const css::container::ContainerEvent& Event) override; 184 virtual void SAL_CALL elementRemoved(const css::container::ContainerEvent& Event) override; 185 virtual void SAL_CALL elementReplaced(const css::container::ContainerEvent& Event) override; 186 187 // resolve ambiguity : both OWeakObject and OInterfaceContainerHelper2 have these memory operators 188 using OWeakSubObject::operator new; 189 using OWeakSubObject::operator delete; 190 }; 191 192 193 // FmXGridControl 194 195 typedef ::cppu::ImplHelper10< css::form::XBoundComponent, 196 css::form::XGridControl, 197 css::util::XModifyBroadcaster, 198 css::container::XIndexAccess, 199 css::container::XEnumerationAccess, 200 css::util::XModeSelector, 201 css::container::XContainer, 202 css::frame::XDispatchProvider, 203 css::frame::XDispatchProviderInterception, 204 css::view::XSelectionSupplier 205 > FmXGridControl_BASE; 206 207 class FmXGridPeer; 208 class SAL_WARN_UNUSED SVX_DLLPUBLIC FmXGridControl :public UnoControl 209 ,public FmXGridControl_BASE 210 { 211 FmXModifyMultiplexer m_aModifyListeners; 212 FmXUpdateMultiplexer m_aUpdateListeners; 213 FmXContainerMultiplexer m_aContainerListeners; 214 FmXSelectionMultiplexer m_aSelectionListeners; 215 FmXGridControlMultiplexer m_aGridControlListeners; 216 217 protected: 218 bool m_bInDraw; 219 220 css::uno::Reference< css::uno::XComponentContext > m_xContext; 221 222 public: 223 FmXGridControl(const css::uno::Reference< css::uno::XComponentContext >&); 224 virtual ~FmXGridControl() override; 225 226 // UNO binding 227 DECLARE_UNO3_AGG_DEFAULTS(FmXGridControl, UnoControl) 228 virtual css::uno::Any SAL_CALL queryAggregation(const css::uno::Type& _rType) override; 229 230 // XTypeProvider 231 virtual css::uno::Sequence< css::uno::Type> SAL_CALL getTypes( ) override; 232 virtual css::uno::Sequence<sal_Int8> SAL_CALL getImplementationId( ) override; 233 234 // css::lang::XComponent 235 virtual void SAL_CALL dispose() override; 236 237 // css::lang::XServiceInfo 238 virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override; 239 virtual OUString SAL_CALL getImplementationName() override; 240 virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; 241 242 // css::awt::XControl 243 virtual void SAL_CALL createPeer(const css::uno::Reference< css::awt::XToolkit >& _rToolkit, const css::uno::Reference< css::awt::XWindowPeer >& Parent) override; 244 virtual sal_Bool SAL_CALL setModel(const css::uno::Reference< css::awt::XControlModel >& Model) override; 245 virtual void SAL_CALL setDesignMode(sal_Bool bOn) override; 246 247 // css::awt::XView 248 virtual void SAL_CALL draw( sal_Int32 x, sal_Int32 y ) override; 249 250 // css::form::XBoundComponent 251 virtual void SAL_CALL addUpdateListener(const css::uno::Reference< css::form::XUpdateListener >& l) override; 252 virtual void SAL_CALL removeUpdateListener(const css::uno::Reference< css::form::XUpdateListener >& l) override; 253 virtual sal_Bool SAL_CALL commit() override; 254 255 // css::container::XElementAccess 256 virtual css::uno::Type SAL_CALL getElementType( ) override; 257 virtual sal_Bool SAL_CALL hasElements( ) override; 258 259 // css::container::XEnumerationAccess 260 virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createEnumeration() override; 261 262 // css::container::XIndexAccess 263 virtual sal_Int32 SAL_CALL getCount() override; 264 virtual css::uno::Any SAL_CALL getByIndex(sal_Int32 _rIndex) override; 265 266 // css::form::XGridControl 267 virtual void SAL_CALL addGridControlListener( const css::uno::Reference< css::form::XGridControlListener >& _listener ) override; 268 virtual void SAL_CALL removeGridControlListener( const css::uno::Reference< css::form::XGridControlListener >& _listener ) override; 269 270 // css::form::XGrid (base of XGridControl) 271 virtual sal_Int16 SAL_CALL getCurrentColumnPosition() override; 272 virtual void SAL_CALL setCurrentColumnPosition(sal_Int16 nPos) override; 273 274 // css::form::XGridFieldDataSupplier (base of XGridControl) 275 virtual css::uno::Sequence< sal_Bool > SAL_CALL queryFieldDataType( const css::uno::Type& xType ) override; 276 virtual css::uno::Sequence< css::uno::Any > SAL_CALL queryFieldData( sal_Int32 nRow, const css::uno::Type& xType ) override; 277 278 // UnoControl 279 virtual OUString GetComponentServiceName() override; 280 281 // css::util::XModifyBroadcaster 282 virtual void SAL_CALL addModifyListener(const css::uno::Reference< css::util::XModifyListener >& l) override; 283 virtual void SAL_CALL removeModifyListener(const css::uno::Reference< css::util::XModifyListener >& l) override; 284 285 // css::util::XModeSelector 286 virtual void SAL_CALL setMode(const OUString& Mode) override; 287 virtual OUString SAL_CALL getMode() override; 288 virtual css::uno::Sequence< OUString> SAL_CALL getSupportedModes() override; 289 virtual sal_Bool SAL_CALL supportsMode(const OUString& Mode) override; 290 291 // css::container::XContainer 292 virtual void SAL_CALL addContainerListener(const css::uno::Reference< css::container::XContainerListener >& l) override; 293 virtual void SAL_CALL removeContainerListener(const css::uno::Reference< css::container::XContainerListener >& l) override; 294 295 // css::frame::XDispatchProvider 296 virtual css::uno::Reference< css::frame::XDispatch > SAL_CALL queryDispatch(const css::util::URL& aURL, const OUString& aTargetFrameName, sal_Int32 nSearchFlags) override; 297 virtual css::uno::Sequence< css::uno::Reference< css::frame::XDispatch > > SAL_CALL queryDispatches(const css::uno::Sequence< css::frame::DispatchDescriptor >& aDescripts) override; 298 299 // css::frame::XDispatchProviderInterception 300 virtual void SAL_CALL registerDispatchProviderInterceptor(const css::uno::Reference< css::frame::XDispatchProviderInterceptor >& xInterceptor) override; 301 virtual void SAL_CALL releaseDispatchProviderInterceptor(const css::uno::Reference< css::frame::XDispatchProviderInterceptor >& xInterceptor) override; 302 303 // css::view::XSelectionSupplier 304 virtual sal_Bool SAL_CALL select( const css::uno::Any& aSelection ) override; 305 virtual css::uno::Any SAL_CALL getSelection( ) override; 306 virtual void SAL_CALL addSelectionChangeListener( const css::uno::Reference< css::view::XSelectionChangeListener >& xListener ) override; 307 virtual void SAL_CALL removeSelectionChangeListener( const css::uno::Reference< css::view::XSelectionChangeListener >& xListener ) override; 308 309 protected: 310 virtual FmXGridPeer* imp_CreatePeer(vcl::Window* pParent); 311 // ImplCreatePeer would be better, but doesn't work because it's not exported 312 313 }; 314 315 316 // FmXGridPeer -> Peer for the Gridcontrol 317 318 class FmGridControl; 319 class SAL_WARN_UNUSED SVX_DLLPUBLIC FmXGridPeer: 320 public cppu::ImplInheritanceHelper< 321 VCLXWindow, 322 css::form::XGridPeer, 323 css::form::XBoundComponent, 324 css::form::XGridControl, 325 css::sdb::XRowSetSupplier, 326 css::util::XModifyBroadcaster, 327 css::beans::XPropertyChangeListener, 328 css::container::XContainerListener, 329 css::sdbc::XRowSetListener, 330 css::form::XLoadListener, 331 css::view::XSelectionChangeListener, 332 css::container::XIndexAccess, 333 css::container::XEnumerationAccess, 334 css::util::XModeSelector, 335 css::container::XContainer, 336 css::frame::XStatusListener, 337 css::frame::XDispatchProvider, 338 css::frame::XDispatchProviderInterception, 339 css::form::XResetListener, 340 css::view::XSelectionSupplier> 341 { 342 protected: 343 css::uno::Reference< css::uno::XComponentContext > m_xContext; 344 ::osl::Mutex m_aMutex; 345 346 private: 347 css::uno::Reference< css::container::XIndexContainer > m_xColumns; 348 css::uno::Reference< css::sdbc::XRowSet > m_xCursor; 349 ::comphelper::OInterfaceContainerHelper2 m_aModifyListeners, 350 m_aUpdateListeners, 351 m_aContainerListeners, 352 m_aSelectionListeners, 353 m_aGridControlListeners; 354 355 OUString m_aMode; 356 sal_Int32 m_nCursorListening; 357 358 css::uno::Reference< css::frame::XDispatchProviderInterceptor > m_xFirstDispatchInterceptor; 359 360 bool m_bInterceptingDispatch; 361 362 std::unique_ptr<bool[]> m_pStateCache; 363 // one bool for each supported url 364 std::unique_ptr<css::uno::Reference< css::frame::XDispatch >[]> m_pDispatchers; 365 // one dispatcher for each supported url 366 // (I would like to have a vector here but including the stl in an exported file seems 367 // very risky to me...) 368 369 class GridListenerDelegator; 370 friend class GridListenerDelegator; 371 std::unique_ptr<GridListenerDelegator> m_pGridListener; 372 373 public: 374 FmXGridPeer(const css::uno::Reference< css::uno::XComponentContext >&); 375 virtual ~FmXGridPeer() override; 376 377 // late constructor, to always be called after the real constructor! 378 void Create(vcl::Window* pParent, WinBits nStyle); 379 380 // css::lang::XUnoTunnel 381 UNO3_GETIMPLEMENTATION_DECL(FmXGridPeer) 382 383 // css::form::XGridPeer 384 virtual css::uno::Reference< css::container::XIndexContainer > SAL_CALL getColumns( ) override; 385 virtual void SAL_CALL setColumns( const css::uno::Reference< css::container::XIndexContainer >& aColumns ) override final; 386 387 // css::lang::XComponent 388 virtual void SAL_CALL dispose() override; 389 390 // css::lang::XEventListener 391 virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; 392 393 // css::form::XBoundComponent 394 virtual void SAL_CALL addUpdateListener(const css::uno::Reference< css::form::XUpdateListener >& l) override; 395 virtual void SAL_CALL removeUpdateListener(const css::uno::Reference< css::form::XUpdateListener >& l) override; 396 virtual sal_Bool SAL_CALL commit() override; 397 398 // css::container::XElementAccess 399 virtual css::uno::Type SAL_CALL getElementType( ) override; 400 virtual sal_Bool SAL_CALL hasElements( ) override; 401 402 // css::container::XEnumerationAccess 403 virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createEnumeration() override; 404 405 // css::container::XIndexAccess 406 virtual sal_Int32 SAL_CALL getCount() override; 407 virtual css::uno::Any SAL_CALL getByIndex(sal_Int32 _rIndex) override; 408 409 // css::beans::XPropertyChangeListener 410 virtual void SAL_CALL propertyChange(const css::beans::PropertyChangeEvent& evt) override; 411 412 // css::form::XLoadListener 413 virtual void SAL_CALL loaded(const css::lang::EventObject& rEvent) override; 414 virtual void SAL_CALL unloaded(const css::lang::EventObject& rEvent) override; 415 virtual void SAL_CALL unloading(const css::lang::EventObject& aEvent) override; 416 virtual void SAL_CALL reloading(const css::lang::EventObject& aEvent) override; 417 virtual void SAL_CALL reloaded(const css::lang::EventObject& aEvent) override; 418 419 // css::sdbc::XRowSetListener 420 virtual void SAL_CALL cursorMoved(const css::lang::EventObject& event) override; 421 virtual void SAL_CALL rowChanged(const css::lang::EventObject& event) override; 422 virtual void SAL_CALL rowSetChanged(const css::lang::EventObject& event) override; 423 424 // css::container::XContainerListener 425 virtual void SAL_CALL elementInserted(const css::container::ContainerEvent& Event) override; 426 virtual void SAL_CALL elementRemoved(const css::container::ContainerEvent& Event) override; 427 virtual void SAL_CALL elementReplaced(const css::container::ContainerEvent& Event) override; 428 429 // VCLXWindow 430 virtual void SAL_CALL setProperty( const OUString& PropertyName, const css::uno::Any& Value ) override; 431 virtual css::uno::Any SAL_CALL getProperty( const OUString& PropertyName ) override; 432 virtual css::uno::Reference< css::accessibility::XAccessibleContext > 433 CreateAccessibleContext() override; 434 435 // css::form::XGridControl 436 virtual void SAL_CALL addGridControlListener( const css::uno::Reference< css::form::XGridControlListener >& _listener ) override; 437 virtual void SAL_CALL removeGridControlListener( const css::uno::Reference< css::form::XGridControlListener >& _listener ) override; 438 439 // css::form::XGrid (base of XGridControl) 440 virtual sal_Int16 SAL_CALL getCurrentColumnPosition() override; 441 virtual void SAL_CALL setCurrentColumnPosition(sal_Int16 nPos) override; 442 443 // css::form::XGridFieldDataSupplier (base of XGridControl) 444 virtual css::uno::Sequence< sal_Bool > SAL_CALL queryFieldDataType( const css::uno::Type& xType ) override; 445 virtual css::uno::Sequence< css::uno::Any > SAL_CALL queryFieldData( sal_Int32 nRow, const css::uno::Type& xType ) override; 446 447 // css::sdb::XRowSetSupplier 448 virtual css::uno::Reference< css::sdbc::XRowSet > SAL_CALL getRowSet() override; 449 virtual void SAL_CALL setRowSet(const css::uno::Reference< css::sdbc::XRowSet >& xDataSource) override final; 450 451 // css::util::XModifyBroadcaster 452 virtual void SAL_CALL addModifyListener(const css::uno::Reference< css::util::XModifyListener >& l) override; 453 virtual void SAL_CALL removeModifyListener(const css::uno::Reference< css::util::XModifyListener >& l) override; 454 455 // UnoControl 456 virtual void SAL_CALL setDesignMode(sal_Bool bOn) override; 457 virtual sal_Bool SAL_CALL isDesignMode() override; 458 459 // css::view::XSelectionChangeListener 460 virtual void SAL_CALL selectionChanged(const css::lang::EventObject& aEvent) override; 461 462 void CellModified(); 463 464 // PropertyListening 465 void updateGrid(const css::uno::Reference< css::sdbc::XRowSet >& _rDatabaseCursor); 466 void startCursorListening(); 467 void stopCursorListening(); 468 469 // css::util::XModeSelector 470 virtual void SAL_CALL setMode(const OUString& Mode) override; 471 virtual OUString SAL_CALL getMode() override; 472 virtual css::uno::Sequence< OUString > SAL_CALL getSupportedModes() override; 473 virtual sal_Bool SAL_CALL supportsMode(const OUString& Mode) override; 474 475 // css::container::XContainer 476 virtual void SAL_CALL addContainerListener(const css::uno::Reference< css::container::XContainerListener >& l) override; 477 virtual void SAL_CALL removeContainerListener(const css::uno::Reference< css::container::XContainerListener >& l) override; 478 479 void columnVisible(DbGridColumn const * pColumn); 480 void columnHidden(DbGridColumn const * pColumn); 481 482 // css::awt::XView 483 virtual void SAL_CALL draw( sal_Int32 x, sal_Int32 y ) override; 484 485 // css::frame::XDispatchProvider 486 virtual css::uno::Reference< css::frame::XDispatch > SAL_CALL queryDispatch(const css::util::URL& aURL, const OUString& aTargetFrameName, sal_Int32 nSearchFlags) override; 487 virtual css::uno::Sequence< css::uno::Reference< css::frame::XDispatch > > SAL_CALL queryDispatches(const css::uno::Sequence< css::frame::DispatchDescriptor >& aDescripts) override; 488 489 // css::frame::XDispatchProviderInterception 490 virtual void SAL_CALL registerDispatchProviderInterceptor(const css::uno::Reference< css::frame::XDispatchProviderInterceptor >& xInterceptor) override; 491 virtual void SAL_CALL releaseDispatchProviderInterceptor(const css::uno::Reference< css::frame::XDispatchProviderInterceptor >& xInterceptor) override; 492 493 // css::frame::XStatusListener 494 virtual void SAL_CALL statusChanged(const css::frame::FeatureStateEvent& Event) override; 495 496 // css::form::XResetListener 497 virtual sal_Bool SAL_CALL approveReset(const css::lang::EventObject& rEvent) override; 498 virtual void SAL_CALL resetted(const css::lang::EventObject& rEvent) override; 499 500 // css::view::XSelectionSupplier 501 virtual sal_Bool SAL_CALL select( const css::uno::Any& aSelection ) override; 502 virtual css::uno::Any SAL_CALL getSelection( ) override; 503 virtual void SAL_CALL addSelectionChangeListener( const css::uno::Reference< css::view::XSelectionChangeListener >& xListener ) override; 504 virtual void SAL_CALL removeSelectionChangeListener( const css::uno::Reference< css::view::XSelectionChangeListener >& xListener ) override; 505 506 protected: 507 virtual VclPtr<FmGridControl> imp_CreateControl(vcl::Window* pParent, WinBits nStyle); 508 509 static css::uno::Sequence< css::util::URL>& getSupportedURLs(); 510 static const std::vector<DbGridControlNavigationBarState>& getSupportedGridSlots(); 511 void ConnectToDispatcher(); 512 void DisConnectFromDispatcher(); 513 void UpdateDispatches(); // will connect if not already connected and just update else 514 515 /** If a derived class wants to listen at some column properties, it doesn't have 516 to override all methods affecting columns (setColumns, elementInserted, elementRemoved ...) 517 Instead it may use addColumnListeners and removeColumnListeners which are called in all 518 the cases. 519 */ 520 void addColumnListeners(const css::uno::Reference< css::beans::XPropertySet >& xCol); 521 void removeColumnListeners(const css::uno::Reference< css::beans::XPropertySet >& xCol); 522 523 void selectionChanged(); 524 void columnChanged(); 525 526 DECL_LINK(OnQueryGridSlotState, DbGridControlNavigationBarState, int); 527 DECL_LINK(OnExecuteGridSlot, DbGridControlNavigationBarState, bool); 528 }; 529 530 531 #endif // _SVX_FMGRID_HXX 532 533 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 534