1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_dbaccess.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir 32*cdf0e10cSrcweir 33*cdf0e10cSrcweir #include "browserids.hxx" 34*cdf0e10cSrcweir #include "brwctrlr.hxx" 35*cdf0e10cSrcweir #include "brwview.hxx" 36*cdf0e10cSrcweir #include "dbu_brw.hrc" 37*cdf0e10cSrcweir #include "dbustrings.hrc" 38*cdf0e10cSrcweir #include "queryfilter.hxx" 39*cdf0e10cSrcweir #include "queryorder.hxx" 40*cdf0e10cSrcweir #include "sqlmessage.hxx" 41*cdf0e10cSrcweir 42*cdf0e10cSrcweir /** === begin UNO includes === **/ 43*cdf0e10cSrcweir #include <com/sun/star/beans/PropertyAttribute.hpp> 44*cdf0e10cSrcweir #include <com/sun/star/container/XNameContainer.hpp> 45*cdf0e10cSrcweir #include <com/sun/star/container/XNamed.hpp> 46*cdf0e10cSrcweir #include <com/sun/star/form/FormButtonType.hpp> 47*cdf0e10cSrcweir #include <com/sun/star/form/FormSubmitEncoding.hpp> 48*cdf0e10cSrcweir #include <com/sun/star/form/FormSubmitMethod.hpp> 49*cdf0e10cSrcweir #include <com/sun/star/form/XApproveActionBroadcaster.hpp> 50*cdf0e10cSrcweir #include <com/sun/star/form/XBoundControl.hpp> 51*cdf0e10cSrcweir #include <com/sun/star/form/XChangeBroadcaster.hpp> 52*cdf0e10cSrcweir #include <com/sun/star/form/XChangeListener.hpp> 53*cdf0e10cSrcweir #include <com/sun/star/form/XDatabaseParameterBroadcaster.hpp> 54*cdf0e10cSrcweir #include <com/sun/star/form/XLoadable.hpp> 55*cdf0e10cSrcweir #include <com/sun/star/form/XReset.hpp> 56*cdf0e10cSrcweir #include <com/sun/star/form/XResetListener.hpp> 57*cdf0e10cSrcweir #include <com/sun/star/form/XSubmit.hpp> 58*cdf0e10cSrcweir #include <com/sun/star/form/XSubmitListener.hpp> 59*cdf0e10cSrcweir #include <com/sun/star/form/runtime/XFormController.hpp> 60*cdf0e10cSrcweir #include <com/sun/star/sdb/CommandType.hpp> 61*cdf0e10cSrcweir #include <com/sun/star/sdb/ErrorCondition.hpp> 62*cdf0e10cSrcweir #include <com/sun/star/sdb/ParametersRequest.hpp> 63*cdf0e10cSrcweir #include <com/sun/star/sdb/SQLContext.hpp> 64*cdf0e10cSrcweir #include <com/sun/star/sdb/XInteractionSupplyParameters.hpp> 65*cdf0e10cSrcweir #include <com/sun/star/sdb/XSQLErrorBroadcaster.hpp> 66*cdf0e10cSrcweir #include <com/sun/star/sdb/XSingleSelectQueryComposer.hpp> 67*cdf0e10cSrcweir #include <com/sun/star/sdb/SQLFilterOperator.hpp> 68*cdf0e10cSrcweir #include <com/sun/star/sdbc/XConnection.hpp> 69*cdf0e10cSrcweir #include <com/sun/star/sdbc/XResultSetUpdate.hpp> 70*cdf0e10cSrcweir #include <com/sun/star/sdbc/XRowSetListener.hpp> 71*cdf0e10cSrcweir #include <com/sun/star/sdbc/XWarningsSupplier.hpp> 72*cdf0e10cSrcweir #include <com/sun/star/sdbcx/Privilege.hpp> 73*cdf0e10cSrcweir #include <com/sun/star/sdbcx/XRowLocate.hpp> 74*cdf0e10cSrcweir #include <com/sun/star/task/XInteractionHandler.hpp> 75*cdf0e10cSrcweir #include <com/sun/star/uno/TypeClass.hpp> 76*cdf0e10cSrcweir #include <com/sun/star/util/XCancellable.hpp> 77*cdf0e10cSrcweir /** === end UNO includes === **/ 78*cdf0e10cSrcweir 79*cdf0e10cSrcweir #include <comphelper/enumhelper.hxx> 80*cdf0e10cSrcweir #include <comphelper/extract.hxx> 81*cdf0e10cSrcweir #include <comphelper/interaction.hxx> 82*cdf0e10cSrcweir #include <comphelper/sequence.hxx> 83*cdf0e10cSrcweir #include <connectivity/dbexception.hxx> 84*cdf0e10cSrcweir #include <connectivity/dbtools.hxx> 85*cdf0e10cSrcweir #include <connectivity/sqlerror.hxx> 86*cdf0e10cSrcweir #include <cppuhelper/exc_hlp.hxx> 87*cdf0e10cSrcweir #include <cppuhelper/implbase2.hxx> 88*cdf0e10cSrcweir #include <cppuhelper/typeprovider.hxx> 89*cdf0e10cSrcweir #include <osl/mutex.hxx> 90*cdf0e10cSrcweir #include <rtl/logfile.hxx> 91*cdf0e10cSrcweir #include <sfx2/app.hxx> 92*cdf0e10cSrcweir #include <sfx2/sfx.hrc> 93*cdf0e10cSrcweir #include <svx/fmsearch.hxx> 94*cdf0e10cSrcweir #include <svx/svxdlg.hxx> 95*cdf0e10cSrcweir #include <tools/color.hxx> 96*cdf0e10cSrcweir #include <tools/diagnose_ex.h> 97*cdf0e10cSrcweir #include <vcl/msgbox.hxx> 98*cdf0e10cSrcweir #include <vcl/waitobj.hxx> 99*cdf0e10cSrcweir 100*cdf0e10cSrcweir using namespace ::com::sun::star::uno; 101*cdf0e10cSrcweir using namespace ::com::sun::star::awt; 102*cdf0e10cSrcweir using namespace ::com::sun::star::sdb; 103*cdf0e10cSrcweir using namespace ::com::sun::star::sdbc; 104*cdf0e10cSrcweir using namespace ::com::sun::star::sdbcx; 105*cdf0e10cSrcweir using namespace ::com::sun::star::task; 106*cdf0e10cSrcweir using namespace ::com::sun::star::beans; 107*cdf0e10cSrcweir using namespace ::com::sun::star::frame; 108*cdf0e10cSrcweir using namespace ::com::sun::star::form; 109*cdf0e10cSrcweir using namespace ::com::sun::star::util; 110*cdf0e10cSrcweir using namespace ::com::sun::star::lang; 111*cdf0e10cSrcweir using namespace ::com::sun::star::container; 112*cdf0e10cSrcweir using namespace ::dbtools; 113*cdf0e10cSrcweir using namespace ::comphelper; 114*cdf0e10cSrcweir using namespace ::svt; 115*cdf0e10cSrcweir 116*cdf0e10cSrcweir #define HANDLE_SQL_ERRORS( action, successflag, context, message ) \ 117*cdf0e10cSrcweir try \ 118*cdf0e10cSrcweir { \ 119*cdf0e10cSrcweir successflag = sal_False; \ 120*cdf0e10cSrcweir action; \ 121*cdf0e10cSrcweir successflag = sal_True; \ 122*cdf0e10cSrcweir } \ 123*cdf0e10cSrcweir catch(SQLException& e) \ 124*cdf0e10cSrcweir { \ 125*cdf0e10cSrcweir SQLException aError = ::dbtools::prependErrorInfo(e, *this, context); \ 126*cdf0e10cSrcweir ::com::sun::star::sdb::SQLErrorEvent aEvent; \ 127*cdf0e10cSrcweir aEvent.Reason <<= aError; \ 128*cdf0e10cSrcweir errorOccured(aEvent); \ 129*cdf0e10cSrcweir } \ 130*cdf0e10cSrcweir catch(Exception&) \ 131*cdf0e10cSrcweir { \ 132*cdf0e10cSrcweir DBG_UNHANDLED_EXCEPTION(); \ 133*cdf0e10cSrcweir } \ 134*cdf0e10cSrcweir 135*cdf0e10cSrcweir #define DO_SAFE( action, message ) try { action; } catch(Exception&) { DBG_ERROR(message); } ; 136*cdf0e10cSrcweir 137*cdf0e10cSrcweir //.................................................................. 138*cdf0e10cSrcweir namespace dbaui 139*cdf0e10cSrcweir { 140*cdf0e10cSrcweir //.................................................................. 141*cdf0e10cSrcweir 142*cdf0e10cSrcweir //================================================================== 143*cdf0e10cSrcweir // OParameterContinuation 144*cdf0e10cSrcweir //================================================================== 145*cdf0e10cSrcweir class OParameterContinuation : public OInteraction< XInteractionSupplyParameters > 146*cdf0e10cSrcweir { 147*cdf0e10cSrcweir Sequence< PropertyValue > m_aValues; 148*cdf0e10cSrcweir 149*cdf0e10cSrcweir public: 150*cdf0e10cSrcweir OParameterContinuation() { } 151*cdf0e10cSrcweir 152*cdf0e10cSrcweir Sequence< PropertyValue > getValues() const { return m_aValues; } 153*cdf0e10cSrcweir 154*cdf0e10cSrcweir // XInteractionSupplyParameters 155*cdf0e10cSrcweir virtual void SAL_CALL setParameters( const Sequence< PropertyValue >& _rValues ) throw(RuntimeException); 156*cdf0e10cSrcweir }; 157*cdf0e10cSrcweir 158*cdf0e10cSrcweir //------------------------------------------------------------------ 159*cdf0e10cSrcweir void SAL_CALL OParameterContinuation::setParameters( const Sequence< PropertyValue >& _rValues ) throw(RuntimeException) 160*cdf0e10cSrcweir { 161*cdf0e10cSrcweir m_aValues = _rValues; 162*cdf0e10cSrcweir } 163*cdf0e10cSrcweir 164*cdf0e10cSrcweir 165*cdf0e10cSrcweir //============================================================================== 166*cdf0e10cSrcweir // a helper class implementing a runtime::XFormController, will be aggregated by SbaXDataBrowserController 167*cdf0e10cSrcweir // (we can't derive from XFormController as it's base class is XTabController and the XTabController::getModel collides 168*cdf0e10cSrcweir // with the XController::getModel implemented in our base class SbaXDataBrowserController) 169*cdf0e10cSrcweir class SbaXDataBrowserController::FormControllerImpl 170*cdf0e10cSrcweir : public ::cppu::WeakAggImplHelper2< ::com::sun::star::form::runtime::XFormController, 171*cdf0e10cSrcweir ::com::sun::star::frame::XFrameActionListener > 172*cdf0e10cSrcweir { 173*cdf0e10cSrcweir friend class SbaXDataBrowserController; 174*cdf0e10cSrcweir ::cppu::OInterfaceContainerHelper m_aActivateListeners; 175*cdf0e10cSrcweir SbaXDataBrowserController* m_pOwner; 176*cdf0e10cSrcweir 177*cdf0e10cSrcweir public: 178*cdf0e10cSrcweir FormControllerImpl(SbaXDataBrowserController* pOwner); 179*cdf0e10cSrcweir 180*cdf0e10cSrcweir // XFormController 181*cdf0e10cSrcweir virtual ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormOperations > SAL_CALL getFormOperations() throw (::com::sun::star::uno::RuntimeException); 182*cdf0e10cSrcweir virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl > SAL_CALL getCurrentControl(void) throw( ::com::sun::star::uno::RuntimeException ); 183*cdf0e10cSrcweir virtual void SAL_CALL addActivateListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormControllerListener > & l) throw( ::com::sun::star::uno::RuntimeException ); 184*cdf0e10cSrcweir virtual void SAL_CALL removeActivateListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormControllerListener > & l) throw( ::com::sun::star::uno::RuntimeException ); 185*cdf0e10cSrcweir 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 ); 186*cdf0e10cSrcweir virtual ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormControllerContext > SAL_CALL getContext() throw (::com::sun::star::uno::RuntimeException); 187*cdf0e10cSrcweir virtual void SAL_CALL setContext( const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormControllerContext >& _context ) throw (::com::sun::star::uno::RuntimeException); 188*cdf0e10cSrcweir virtual ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler > SAL_CALL getInteractionHandler() throw (::com::sun::star::uno::RuntimeException); 189*cdf0e10cSrcweir virtual void SAL_CALL setInteractionHandler( const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& _interactionHandler ) throw (::com::sun::star::uno::RuntimeException); 190*cdf0e10cSrcweir 191*cdf0e10cSrcweir // XChild, base of XFormController 192*cdf0e10cSrcweir virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL getParent( ) throw (::com::sun::star::uno::RuntimeException); 193*cdf0e10cSrcweir 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); 194*cdf0e10cSrcweir 195*cdf0e10cSrcweir // XComponent, base of XFormController 196*cdf0e10cSrcweir virtual void SAL_CALL dispose( ) throw (::com::sun::star::uno::RuntimeException); 197*cdf0e10cSrcweir virtual void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& xListener ) throw (::com::sun::star::uno::RuntimeException); 198*cdf0e10cSrcweir virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& aListener ) throw (::com::sun::star::uno::RuntimeException); 199*cdf0e10cSrcweir 200*cdf0e10cSrcweir // XIndexAccess, base of XFormController 201*cdf0e10cSrcweir virtual ::sal_Int32 SAL_CALL getCount( ) throw (::com::sun::star::uno::RuntimeException); 202*cdf0e10cSrcweir 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); 203*cdf0e10cSrcweir 204*cdf0e10cSrcweir // XElementAccess, base of XIndexAccess 205*cdf0e10cSrcweir virtual ::com::sun::star::uno::Type SAL_CALL getElementType( ) throw (::com::sun::star::uno::RuntimeException); 206*cdf0e10cSrcweir virtual ::sal_Bool SAL_CALL hasElements( ) throw (::com::sun::star::uno::RuntimeException); 207*cdf0e10cSrcweir 208*cdf0e10cSrcweir // XEnumerationAccess, base of XElementAccess 209*cdf0e10cSrcweir virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL createEnumeration( ) throw (::com::sun::star::uno::RuntimeException); 210*cdf0e10cSrcweir 211*cdf0e10cSrcweir // XModifyBroadcaster, base of XFormController 212*cdf0e10cSrcweir virtual void SAL_CALL addModifyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener ) throw (::com::sun::star::uno::RuntimeException); 213*cdf0e10cSrcweir virtual void SAL_CALL removeModifyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener ) throw (::com::sun::star::uno::RuntimeException); 214*cdf0e10cSrcweir 215*cdf0e10cSrcweir // XConfirmDeleteBroadcaster, base of XFormController 216*cdf0e10cSrcweir virtual void SAL_CALL addConfirmDeleteListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XConfirmDeleteListener >& aListener ) throw (::com::sun::star::uno::RuntimeException); 217*cdf0e10cSrcweir virtual void SAL_CALL removeConfirmDeleteListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XConfirmDeleteListener >& aListener ) throw (::com::sun::star::uno::RuntimeException); 218*cdf0e10cSrcweir 219*cdf0e10cSrcweir // XSQLErrorBroadcaster, base of XFormController 220*cdf0e10cSrcweir virtual void SAL_CALL addSQLErrorListener( const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSQLErrorListener >& Listener ) throw (::com::sun::star::uno::RuntimeException); 221*cdf0e10cSrcweir virtual void SAL_CALL removeSQLErrorListener( const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSQLErrorListener >& Listener ) throw (::com::sun::star::uno::RuntimeException); 222*cdf0e10cSrcweir 223*cdf0e10cSrcweir // XRowSetApproveBroadcaster, base of XFormController 224*cdf0e10cSrcweir virtual void SAL_CALL addRowSetApproveListener( const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XRowSetApproveListener >& listener ) throw (::com::sun::star::uno::RuntimeException); 225*cdf0e10cSrcweir virtual void SAL_CALL removeRowSetApproveListener( const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XRowSetApproveListener >& listener ) throw (::com::sun::star::uno::RuntimeException); 226*cdf0e10cSrcweir 227*cdf0e10cSrcweir // XDatabaseParameterBroadcaster2, base of XFormController 228*cdf0e10cSrcweir virtual void SAL_CALL addDatabaseParameterListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener >& aListener ) throw (::com::sun::star::uno::RuntimeException); 229*cdf0e10cSrcweir virtual void SAL_CALL removeDatabaseParameterListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener >& aListener ) throw (::com::sun::star::uno::RuntimeException); 230*cdf0e10cSrcweir 231*cdf0e10cSrcweir // XDatabaseParameterBroadcaster, base of XDatabaseParameterBroadcaster2 232*cdf0e10cSrcweir virtual void SAL_CALL addParameterListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener >& aListener ) throw (::com::sun::star::uno::RuntimeException); 233*cdf0e10cSrcweir virtual void SAL_CALL removeParameterListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener >& aListener ) throw (::com::sun::star::uno::RuntimeException); 234*cdf0e10cSrcweir 235*cdf0e10cSrcweir // XModeSelector, base of XFormController 236*cdf0e10cSrcweir virtual void SAL_CALL setMode( const ::rtl::OUString& aMode ) throw (::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException); 237*cdf0e10cSrcweir virtual ::rtl::OUString SAL_CALL getMode( ) throw (::com::sun::star::uno::RuntimeException); 238*cdf0e10cSrcweir virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedModes( ) throw (::com::sun::star::uno::RuntimeException); 239*cdf0e10cSrcweir virtual ::sal_Bool SAL_CALL supportsMode( const ::rtl::OUString& aMode ) throw (::com::sun::star::uno::RuntimeException); 240*cdf0e10cSrcweir 241*cdf0e10cSrcweir // XTabController, base of XFormController 242*cdf0e10cSrcweir virtual void SAL_CALL setModel(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTabControllerModel > & Model) throw( ::com::sun::star::uno::RuntimeException ); 243*cdf0e10cSrcweir virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTabControllerModel > SAL_CALL getModel(void) throw( ::com::sun::star::uno::RuntimeException ); 244*cdf0e10cSrcweir virtual void SAL_CALL setContainer(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer > & _Container) throw( ::com::sun::star::uno::RuntimeException ); 245*cdf0e10cSrcweir virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer > SAL_CALL getContainer(void) throw( ::com::sun::star::uno::RuntimeException ); 246*cdf0e10cSrcweir 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 ); 247*cdf0e10cSrcweir virtual void SAL_CALL autoTabOrder(void) throw( ::com::sun::star::uno::RuntimeException ); 248*cdf0e10cSrcweir virtual void SAL_CALL activateTabOrder(void) throw( ::com::sun::star::uno::RuntimeException ); 249*cdf0e10cSrcweir virtual void SAL_CALL activateFirst(void) throw( ::com::sun::star::uno::RuntimeException ); 250*cdf0e10cSrcweir virtual void SAL_CALL activateLast(void) throw( ::com::sun::star::uno::RuntimeException ); 251*cdf0e10cSrcweir 252*cdf0e10cSrcweir // XFrameActionListener 253*cdf0e10cSrcweir virtual void SAL_CALL frameAction(const ::com::sun::star::frame::FrameActionEvent& aEvent) throw( ::com::sun::star::uno::RuntimeException ); 254*cdf0e10cSrcweir 255*cdf0e10cSrcweir // XEventListener 256*cdf0e10cSrcweir virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw( ::com::sun::star::uno::RuntimeException ); 257*cdf0e10cSrcweir 258*cdf0e10cSrcweir protected: 259*cdf0e10cSrcweir ~FormControllerImpl(); 260*cdf0e10cSrcweir }; 261*cdf0e10cSrcweir 262*cdf0e10cSrcweir 263*cdf0e10cSrcweir DBG_NAME(FormControllerImpl) 264*cdf0e10cSrcweir //------------------------------------------------------------------ 265*cdf0e10cSrcweir SbaXDataBrowserController::FormControllerImpl::FormControllerImpl(SbaXDataBrowserController* _pOwner) 266*cdf0e10cSrcweir :m_aActivateListeners(_pOwner->getMutex()) 267*cdf0e10cSrcweir ,m_pOwner(_pOwner) 268*cdf0e10cSrcweir { 269*cdf0e10cSrcweir DBG_CTOR(FormControllerImpl,NULL); 270*cdf0e10cSrcweir 271*cdf0e10cSrcweir OSL_ENSURE(m_pOwner, "SbaXDataBrowserController::FormControllerImpl::FormControllerImpl : invalid Owner !"); 272*cdf0e10cSrcweir } 273*cdf0e10cSrcweir 274*cdf0e10cSrcweir //------------------------------------------------------------------ 275*cdf0e10cSrcweir SbaXDataBrowserController::FormControllerImpl::~FormControllerImpl() 276*cdf0e10cSrcweir { 277*cdf0e10cSrcweir 278*cdf0e10cSrcweir DBG_DTOR(FormControllerImpl,NULL); 279*cdf0e10cSrcweir } 280*cdf0e10cSrcweir 281*cdf0e10cSrcweir //------------------------------------------------------------------ 282*cdf0e10cSrcweir Reference< runtime::XFormOperations > SAL_CALL SbaXDataBrowserController::FormControllerImpl::getFormOperations() throw (RuntimeException) 283*cdf0e10cSrcweir { 284*cdf0e10cSrcweir OSL_ENSURE( false, "SbaXDataBrowserController::FormControllerImpl::getFormOperations: not supported!" ); 285*cdf0e10cSrcweir return NULL; 286*cdf0e10cSrcweir } 287*cdf0e10cSrcweir 288*cdf0e10cSrcweir //------------------------------------------------------------------ 289*cdf0e10cSrcweir Reference< ::com::sun::star::awt::XControl > SbaXDataBrowserController::FormControllerImpl::getCurrentControl(void) throw( RuntimeException ) 290*cdf0e10cSrcweir { 291*cdf0e10cSrcweir return m_pOwner->getBrowserView() ? m_pOwner->getBrowserView()->getGridControl() : Reference< ::com::sun::star::awt::XControl > (); 292*cdf0e10cSrcweir } 293*cdf0e10cSrcweir 294*cdf0e10cSrcweir //------------------------------------------------------------------ 295*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::addActivateListener(const Reference< ::com::sun::star::form::XFormControllerListener > & l) throw( RuntimeException ) 296*cdf0e10cSrcweir { 297*cdf0e10cSrcweir m_aActivateListeners.addInterface(l); 298*cdf0e10cSrcweir } 299*cdf0e10cSrcweir 300*cdf0e10cSrcweir //------------------------------------------------------------------ 301*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::removeActivateListener(const Reference< ::com::sun::star::form::XFormControllerListener > & l) throw( RuntimeException ) 302*cdf0e10cSrcweir { 303*cdf0e10cSrcweir m_aActivateListeners.removeInterface(l); 304*cdf0e10cSrcweir } 305*cdf0e10cSrcweir 306*cdf0e10cSrcweir //------------------------------------------------------------------ 307*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::addChildController( const Reference< runtime::XFormController >& /*_ChildController*/ ) throw( RuntimeException, IllegalArgumentException ) 308*cdf0e10cSrcweir { 309*cdf0e10cSrcweir // not supported 310*cdf0e10cSrcweir throw IllegalArgumentException( ::rtl::OUString(), *this, 1 ); 311*cdf0e10cSrcweir } 312*cdf0e10cSrcweir 313*cdf0e10cSrcweir //------------------------------------------------------------------ 314*cdf0e10cSrcweir Reference< runtime::XFormControllerContext > SAL_CALL SbaXDataBrowserController::FormControllerImpl::getContext() throw (RuntimeException) 315*cdf0e10cSrcweir { 316*cdf0e10cSrcweir OSL_ENSURE( false, "SbaXDataBrowserController::FormControllerImpl::getContext: no support!!" ); 317*cdf0e10cSrcweir return NULL; 318*cdf0e10cSrcweir } 319*cdf0e10cSrcweir 320*cdf0e10cSrcweir //------------------------------------------------------------------ 321*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::setContext( const Reference< runtime::XFormControllerContext >& /*_context*/ ) throw (RuntimeException) 322*cdf0e10cSrcweir { 323*cdf0e10cSrcweir OSL_ENSURE( false, "SbaXDataBrowserController::FormControllerImpl::setContext: no support!!" ); 324*cdf0e10cSrcweir } 325*cdf0e10cSrcweir 326*cdf0e10cSrcweir //------------------------------------------------------------------ 327*cdf0e10cSrcweir Reference< XInteractionHandler > SAL_CALL SbaXDataBrowserController::FormControllerImpl::getInteractionHandler() throw (RuntimeException) 328*cdf0e10cSrcweir { 329*cdf0e10cSrcweir OSL_ENSURE( false, "SbaXDataBrowserController::FormControllerImpl::getInteractionHandler: no support!!" ); 330*cdf0e10cSrcweir return NULL; 331*cdf0e10cSrcweir } 332*cdf0e10cSrcweir 333*cdf0e10cSrcweir //------------------------------------------------------------------ 334*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::setInteractionHandler( const Reference< XInteractionHandler >& /*_interactionHandler*/ ) throw (RuntimeException) 335*cdf0e10cSrcweir { 336*cdf0e10cSrcweir OSL_ENSURE( false, "SbaXDataBrowserController::FormControllerImpl::setInteractionHandler: no support!!" ); 337*cdf0e10cSrcweir } 338*cdf0e10cSrcweir 339*cdf0e10cSrcweir //------------------------------------------------------------------ 340*cdf0e10cSrcweir Reference< XInterface > SAL_CALL SbaXDataBrowserController::FormControllerImpl::getParent( ) throw (RuntimeException) 341*cdf0e10cSrcweir { 342*cdf0e10cSrcweir // don't have any parent form controllers 343*cdf0e10cSrcweir return NULL; 344*cdf0e10cSrcweir } 345*cdf0e10cSrcweir 346*cdf0e10cSrcweir //------------------------------------------------------------------ 347*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::setParent( const Reference< XInterface >& /*Parent*/ ) throw (NoSupportException, RuntimeException) 348*cdf0e10cSrcweir { 349*cdf0e10cSrcweir throw NoSupportException( ::rtl::OUString(), *this ); 350*cdf0e10cSrcweir } 351*cdf0e10cSrcweir 352*cdf0e10cSrcweir //------------------------------------------------------------------ 353*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::dispose( ) throw (RuntimeException) 354*cdf0e10cSrcweir { 355*cdf0e10cSrcweir OSL_ENSURE( false, "SbaXDataBrowserController::FormControllerImpl::dispose: no, you do *not* want to do this!" ); 356*cdf0e10cSrcweir } 357*cdf0e10cSrcweir 358*cdf0e10cSrcweir //------------------------------------------------------------------ 359*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::addEventListener( const Reference< XEventListener >& /*xListener*/ ) throw (RuntimeException) 360*cdf0e10cSrcweir { 361*cdf0e10cSrcweir OSL_ENSURE( false, "SbaXDataBrowserController::FormControllerImpl::addEventListener: no support!!" ); 362*cdf0e10cSrcweir } 363*cdf0e10cSrcweir 364*cdf0e10cSrcweir //------------------------------------------------------------------ 365*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::removeEventListener( const Reference< XEventListener >& /*aListener*/ ) throw (RuntimeException) 366*cdf0e10cSrcweir { 367*cdf0e10cSrcweir OSL_ENSURE( false, "SbaXDataBrowserController::FormControllerImpl::removeEventListener: no support!!" ); 368*cdf0e10cSrcweir } 369*cdf0e10cSrcweir 370*cdf0e10cSrcweir //------------------------------------------------------------------ 371*cdf0e10cSrcweir ::sal_Int32 SAL_CALL SbaXDataBrowserController::FormControllerImpl::getCount( ) throw (RuntimeException) 372*cdf0e10cSrcweir { 373*cdf0e10cSrcweir // no sub controllers, never 374*cdf0e10cSrcweir return 0; 375*cdf0e10cSrcweir } 376*cdf0e10cSrcweir 377*cdf0e10cSrcweir //------------------------------------------------------------------ 378*cdf0e10cSrcweir Any SAL_CALL SbaXDataBrowserController::FormControllerImpl::getByIndex( ::sal_Int32 /*Index*/ ) throw (IndexOutOfBoundsException, WrappedTargetException, RuntimeException) 379*cdf0e10cSrcweir { 380*cdf0e10cSrcweir // no sub controllers, never 381*cdf0e10cSrcweir throw IndexOutOfBoundsException( ::rtl::OUString(), *this ); 382*cdf0e10cSrcweir } 383*cdf0e10cSrcweir 384*cdf0e10cSrcweir //------------------------------------------------------------------ 385*cdf0e10cSrcweir Type SAL_CALL SbaXDataBrowserController::FormControllerImpl::getElementType( ) throw (RuntimeException) 386*cdf0e10cSrcweir { 387*cdf0e10cSrcweir return ::cppu::UnoType< runtime::XFormController >::get(); 388*cdf0e10cSrcweir } 389*cdf0e10cSrcweir 390*cdf0e10cSrcweir //------------------------------------------------------------------ 391*cdf0e10cSrcweir ::sal_Bool SAL_CALL SbaXDataBrowserController::FormControllerImpl::hasElements( ) throw (RuntimeException) 392*cdf0e10cSrcweir { 393*cdf0e10cSrcweir // no sub controllers, never 394*cdf0e10cSrcweir return false; 395*cdf0e10cSrcweir } 396*cdf0e10cSrcweir 397*cdf0e10cSrcweir //------------------------------------------------------------------ 398*cdf0e10cSrcweir Reference< XEnumeration > SAL_CALL SbaXDataBrowserController::FormControllerImpl::createEnumeration( ) throw (RuntimeException) 399*cdf0e10cSrcweir { 400*cdf0e10cSrcweir return new ::comphelper::OEnumerationByIndex( this ); 401*cdf0e10cSrcweir } 402*cdf0e10cSrcweir 403*cdf0e10cSrcweir //------------------------------------------------------------------ 404*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::addModifyListener( const Reference< XModifyListener >& /*_Listener*/ ) throw (RuntimeException) 405*cdf0e10cSrcweir { 406*cdf0e10cSrcweir OSL_ENSURE( false, "SbaXDataBrowserController::FormControllerImpl::addModifyListener: no support!" ); 407*cdf0e10cSrcweir } 408*cdf0e10cSrcweir 409*cdf0e10cSrcweir //------------------------------------------------------------------ 410*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::removeModifyListener( const Reference< XModifyListener >& /*_Listener*/ ) throw (RuntimeException) 411*cdf0e10cSrcweir { 412*cdf0e10cSrcweir OSL_ENSURE( false, "SbaXDataBrowserController::FormControllerImpl::removeModifyListener: no support!" ); 413*cdf0e10cSrcweir } 414*cdf0e10cSrcweir 415*cdf0e10cSrcweir //------------------------------------------------------------------ 416*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::addConfirmDeleteListener( const Reference< XConfirmDeleteListener >& /*_Listener*/ ) throw (RuntimeException) 417*cdf0e10cSrcweir { 418*cdf0e10cSrcweir OSL_ENSURE( false, "SbaXDataBrowserController::FormControllerImpl::addConfirmDeleteListener: no support!" ); 419*cdf0e10cSrcweir } 420*cdf0e10cSrcweir 421*cdf0e10cSrcweir //------------------------------------------------------------------ 422*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::removeConfirmDeleteListener( const Reference< XConfirmDeleteListener >& /*_Listener*/ ) throw (RuntimeException) 423*cdf0e10cSrcweir { 424*cdf0e10cSrcweir OSL_ENSURE( false, "SbaXDataBrowserController::FormControllerImpl::removeConfirmDeleteListener: no support!" ); 425*cdf0e10cSrcweir } 426*cdf0e10cSrcweir 427*cdf0e10cSrcweir //------------------------------------------------------------------ 428*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::addSQLErrorListener( const Reference< XSQLErrorListener >& /*_Listener*/ ) throw (RuntimeException) 429*cdf0e10cSrcweir { 430*cdf0e10cSrcweir OSL_ENSURE( false, "SbaXDataBrowserController::FormControllerImpl::addSQLErrorListener: no support!" ); 431*cdf0e10cSrcweir } 432*cdf0e10cSrcweir 433*cdf0e10cSrcweir //------------------------------------------------------------------ 434*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::removeSQLErrorListener( const Reference< XSQLErrorListener >& /*_Listener*/ ) throw (RuntimeException) 435*cdf0e10cSrcweir { 436*cdf0e10cSrcweir OSL_ENSURE( false, "SbaXDataBrowserController::FormControllerImpl::removeSQLErrorListener: no support!" ); 437*cdf0e10cSrcweir } 438*cdf0e10cSrcweir 439*cdf0e10cSrcweir //------------------------------------------------------------------ 440*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::addRowSetApproveListener( const Reference< XRowSetApproveListener >& /*_Listener*/ ) throw (RuntimeException) 441*cdf0e10cSrcweir { 442*cdf0e10cSrcweir OSL_ENSURE( false, "SbaXDataBrowserController::FormControllerImpl::addRowSetApproveListener: no support!" ); 443*cdf0e10cSrcweir } 444*cdf0e10cSrcweir 445*cdf0e10cSrcweir //------------------------------------------------------------------ 446*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::removeRowSetApproveListener( const Reference< XRowSetApproveListener >& /*_Listener*/ ) throw (RuntimeException) 447*cdf0e10cSrcweir { 448*cdf0e10cSrcweir OSL_ENSURE( false, "SbaXDataBrowserController::FormControllerImpl::removeRowSetApproveListener: no support!" ); 449*cdf0e10cSrcweir } 450*cdf0e10cSrcweir 451*cdf0e10cSrcweir //------------------------------------------------------------------ 452*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::addDatabaseParameterListener( const Reference< XDatabaseParameterListener >& /*_Listener*/ ) throw (RuntimeException) 453*cdf0e10cSrcweir { 454*cdf0e10cSrcweir OSL_ENSURE( false, "SbaXDataBrowserController::FormControllerImpl::addDatabaseParameterListener: no support!" ); 455*cdf0e10cSrcweir } 456*cdf0e10cSrcweir 457*cdf0e10cSrcweir //------------------------------------------------------------------ 458*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::removeDatabaseParameterListener( const Reference< XDatabaseParameterListener >& /*_Listener*/ ) throw (RuntimeException) 459*cdf0e10cSrcweir { 460*cdf0e10cSrcweir OSL_ENSURE( false, "SbaXDataBrowserController::FormControllerImpl::removeDatabaseParameterListener: no support!" ); 461*cdf0e10cSrcweir } 462*cdf0e10cSrcweir 463*cdf0e10cSrcweir //------------------------------------------------------------------ 464*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::addParameterListener( const Reference< XDatabaseParameterListener >& /*_Listener*/ ) throw (RuntimeException) 465*cdf0e10cSrcweir { 466*cdf0e10cSrcweir OSL_ENSURE( false, "SbaXDataBrowserController::FormControllerImpl::addParameterListener: no support!" ); 467*cdf0e10cSrcweir } 468*cdf0e10cSrcweir 469*cdf0e10cSrcweir //------------------------------------------------------------------ 470*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::removeParameterListener( const Reference< XDatabaseParameterListener >& /*_Listener*/ ) throw (RuntimeException) 471*cdf0e10cSrcweir { 472*cdf0e10cSrcweir OSL_ENSURE( false, "SbaXDataBrowserController::FormControllerImpl::removeParameterListener: no support!" ); 473*cdf0e10cSrcweir } 474*cdf0e10cSrcweir 475*cdf0e10cSrcweir //------------------------------------------------------------------ 476*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::setMode( const ::rtl::OUString& _rMode ) throw (NoSupportException, RuntimeException) 477*cdf0e10cSrcweir { 478*cdf0e10cSrcweir if ( !supportsMode( _rMode ) ) 479*cdf0e10cSrcweir throw NoSupportException(); 480*cdf0e10cSrcweir } 481*cdf0e10cSrcweir 482*cdf0e10cSrcweir //------------------------------------------------------------------ 483*cdf0e10cSrcweir ::rtl::OUString SAL_CALL SbaXDataBrowserController::FormControllerImpl::getMode( ) throw (RuntimeException) 484*cdf0e10cSrcweir { 485*cdf0e10cSrcweir return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DataMode" ) ); 486*cdf0e10cSrcweir } 487*cdf0e10cSrcweir 488*cdf0e10cSrcweir //------------------------------------------------------------------ 489*cdf0e10cSrcweir Sequence< ::rtl::OUString > SAL_CALL SbaXDataBrowserController::FormControllerImpl::getSupportedModes( ) throw (RuntimeException) 490*cdf0e10cSrcweir { 491*cdf0e10cSrcweir Sequence< ::rtl::OUString > aModes(1); 492*cdf0e10cSrcweir aModes[1] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DataMode" ) ); 493*cdf0e10cSrcweir return aModes; 494*cdf0e10cSrcweir } 495*cdf0e10cSrcweir 496*cdf0e10cSrcweir //------------------------------------------------------------------ 497*cdf0e10cSrcweir ::sal_Bool SAL_CALL SbaXDataBrowserController::FormControllerImpl::supportsMode( const ::rtl::OUString& aMode ) throw (RuntimeException) 498*cdf0e10cSrcweir { 499*cdf0e10cSrcweir return aMode.compareToAscii( "DataMode" ) == 0; 500*cdf0e10cSrcweir } 501*cdf0e10cSrcweir 502*cdf0e10cSrcweir //------------------------------------------------------------------ 503*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::setModel(const Reference< ::com::sun::star::awt::XTabControllerModel > & /*Model*/) throw( RuntimeException ) 504*cdf0e10cSrcweir { 505*cdf0e10cSrcweir OSL_ENSURE(sal_False, "SbaXDataBrowserController::FormControllerImpl::setModel : invalid call, can't change my model !"); 506*cdf0e10cSrcweir } 507*cdf0e10cSrcweir 508*cdf0e10cSrcweir //------------------------------------------------------------------ 509*cdf0e10cSrcweir Reference< ::com::sun::star::awt::XTabControllerModel > SAL_CALL SbaXDataBrowserController::FormControllerImpl::getModel(void) throw( RuntimeException ) 510*cdf0e10cSrcweir { 511*cdf0e10cSrcweir return Reference< XTabControllerModel >(m_pOwner->getRowSet(), UNO_QUERY); 512*cdf0e10cSrcweir } 513*cdf0e10cSrcweir 514*cdf0e10cSrcweir //------------------------------------------------------------------ 515*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::setContainer(const Reference< ::com::sun::star::awt::XControlContainer > & /*_Container*/) throw( RuntimeException ) 516*cdf0e10cSrcweir { 517*cdf0e10cSrcweir OSL_ENSURE(sal_False, "SbaXDataBrowserController::FormControllerImpl::setContainer : invalid call, can't change my container !"); 518*cdf0e10cSrcweir } 519*cdf0e10cSrcweir 520*cdf0e10cSrcweir //------------------------------------------------------------------ 521*cdf0e10cSrcweir Reference< ::com::sun::star::awt::XControlContainer > SAL_CALL SbaXDataBrowserController::FormControllerImpl::getContainer(void) throw( RuntimeException ) 522*cdf0e10cSrcweir { 523*cdf0e10cSrcweir if (m_pOwner->getBrowserView()) 524*cdf0e10cSrcweir return m_pOwner->getBrowserView()->getContainer(); 525*cdf0e10cSrcweir return Reference< ::com::sun::star::awt::XControlContainer > (); 526*cdf0e10cSrcweir } 527*cdf0e10cSrcweir 528*cdf0e10cSrcweir //------------------------------------------------------------------ 529*cdf0e10cSrcweir Sequence< Reference< ::com::sun::star::awt::XControl > > SAL_CALL SbaXDataBrowserController::FormControllerImpl::getControls(void) throw( RuntimeException ) 530*cdf0e10cSrcweir { 531*cdf0e10cSrcweir if (m_pOwner->getBrowserView()) 532*cdf0e10cSrcweir { 533*cdf0e10cSrcweir Reference< ::com::sun::star::awt::XControl > xGrid = m_pOwner->getBrowserView()->getGridControl(); 534*cdf0e10cSrcweir return Sequence< Reference< ::com::sun::star::awt::XControl > >(&xGrid, 1); 535*cdf0e10cSrcweir } 536*cdf0e10cSrcweir return Sequence< Reference< ::com::sun::star::awt::XControl > >(); 537*cdf0e10cSrcweir } 538*cdf0e10cSrcweir 539*cdf0e10cSrcweir //------------------------------------------------------------------ 540*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::autoTabOrder(void) throw( RuntimeException ) 541*cdf0e10cSrcweir { 542*cdf0e10cSrcweir OSL_ENSURE(sal_False, "SbaXDataBrowserController::FormControllerImpl::autoTabOrder : nothing to do (always have only one control) !"); 543*cdf0e10cSrcweir } 544*cdf0e10cSrcweir 545*cdf0e10cSrcweir //------------------------------------------------------------------ 546*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::activateTabOrder(void) throw( RuntimeException ) 547*cdf0e10cSrcweir { 548*cdf0e10cSrcweir OSL_ENSURE(sal_False, "SbaXDataBrowserController::FormControllerImpl::activateTabOrder : nothing to do (always have only one control) !"); 549*cdf0e10cSrcweir } 550*cdf0e10cSrcweir 551*cdf0e10cSrcweir //------------------------------------------------------------------ 552*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::activateFirst(void) throw( RuntimeException ) 553*cdf0e10cSrcweir { 554*cdf0e10cSrcweir if (m_pOwner->getBrowserView()) 555*cdf0e10cSrcweir m_pOwner->getBrowserView()->getVclControl()->ActivateCell(); 556*cdf0e10cSrcweir } 557*cdf0e10cSrcweir 558*cdf0e10cSrcweir //------------------------------------------------------------------ 559*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::activateLast(void) throw( RuntimeException ) 560*cdf0e10cSrcweir { 561*cdf0e10cSrcweir if (m_pOwner->getBrowserView()) 562*cdf0e10cSrcweir m_pOwner->getBrowserView()->getVclControl()->ActivateCell(); 563*cdf0e10cSrcweir } 564*cdf0e10cSrcweir 565*cdf0e10cSrcweir //------------------------------------------------------------------ 566*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::frameAction(const ::com::sun::star::frame::FrameActionEvent& /*aEvent*/) throw( RuntimeException ) 567*cdf0e10cSrcweir { 568*cdf0e10cSrcweir } 569*cdf0e10cSrcweir 570*cdf0e10cSrcweir //------------------------------------------------------------------ 571*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::FormControllerImpl::disposing(const ::com::sun::star::lang::EventObject& /*Source*/) throw( RuntimeException ) 572*cdf0e10cSrcweir { 573*cdf0e10cSrcweir // nothing to do 574*cdf0e10cSrcweir // we don't add ourself as listener to any broadcasters, so we are not resposible for removing us 575*cdf0e10cSrcweir } 576*cdf0e10cSrcweir 577*cdf0e10cSrcweir //================================================================== 578*cdf0e10cSrcweir //= SbaXDataBrowserController 579*cdf0e10cSrcweir //================================================================== 580*cdf0e10cSrcweir //------------------------------------------------------------------ 581*cdf0e10cSrcweir Sequence< Type > SAL_CALL SbaXDataBrowserController::getTypes( ) throw (RuntimeException) 582*cdf0e10cSrcweir { 583*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::getTypes" ); 584*cdf0e10cSrcweir return ::comphelper::concatSequences( 585*cdf0e10cSrcweir SbaXDataBrowserController_Base::getTypes(), 586*cdf0e10cSrcweir m_pFormControllerImpl->getTypes() 587*cdf0e10cSrcweir ); 588*cdf0e10cSrcweir } 589*cdf0e10cSrcweir 590*cdf0e10cSrcweir //------------------------------------------------------------------ 591*cdf0e10cSrcweir Sequence< sal_Int8 > SAL_CALL SbaXDataBrowserController::getImplementationId( ) throw (RuntimeException) 592*cdf0e10cSrcweir { 593*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::getImplementationId" ); 594*cdf0e10cSrcweir static ::cppu::OImplementationId * pId = 0; 595*cdf0e10cSrcweir if (! pId) 596*cdf0e10cSrcweir { 597*cdf0e10cSrcweir ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); 598*cdf0e10cSrcweir if (! pId) 599*cdf0e10cSrcweir { 600*cdf0e10cSrcweir static ::cppu::OImplementationId aId; 601*cdf0e10cSrcweir pId = &aId; 602*cdf0e10cSrcweir } 603*cdf0e10cSrcweir } 604*cdf0e10cSrcweir return pId->getImplementationId(); 605*cdf0e10cSrcweir } 606*cdf0e10cSrcweir 607*cdf0e10cSrcweir //------------------------------------------------------------------ 608*cdf0e10cSrcweir Any SAL_CALL SbaXDataBrowserController::queryInterface(const Type& _rType) throw (RuntimeException) 609*cdf0e10cSrcweir { 610*cdf0e10cSrcweir // check for our additional interfaces 611*cdf0e10cSrcweir Any aRet = SbaXDataBrowserController_Base::queryInterface(_rType); 612*cdf0e10cSrcweir 613*cdf0e10cSrcweir // check for our aggregate (implementing the XFormController) 614*cdf0e10cSrcweir if (!aRet.hasValue()) 615*cdf0e10cSrcweir aRet = m_xFormControllerImpl->queryAggregation(_rType); 616*cdf0e10cSrcweir 617*cdf0e10cSrcweir // no more to offer 618*cdf0e10cSrcweir return aRet; 619*cdf0e10cSrcweir } 620*cdf0e10cSrcweir 621*cdf0e10cSrcweir DBG_NAME(SbaXDataBrowserController) 622*cdf0e10cSrcweir //------------------------------------------------------------------------------ 623*cdf0e10cSrcweir SbaXDataBrowserController::SbaXDataBrowserController(const Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rM) 624*cdf0e10cSrcweir :SbaXDataBrowserController_Base(_rM) 625*cdf0e10cSrcweir ,m_nRowSetPrivileges(0) 626*cdf0e10cSrcweir ,m_pClipbordNotifier( NULL ) 627*cdf0e10cSrcweir ,m_aAsyncGetCellFocus(LINK(this, SbaXDataBrowserController, OnAsyncGetCellFocus)) 628*cdf0e10cSrcweir ,m_aAsyncDisplayError( LINK( this, SbaXDataBrowserController, OnAsyncDisplayError ) ) 629*cdf0e10cSrcweir ,m_sStateSaveRecord(ModuleRes(RID_STR_SAVE_CURRENT_RECORD)) 630*cdf0e10cSrcweir ,m_sStateUndoRecord(ModuleRes(RID_STR_UNDO_MODIFY_RECORD)) 631*cdf0e10cSrcweir ,m_sModuleIdentifier( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.sdb.DataSourceBrowser" ) ) ) 632*cdf0e10cSrcweir ,m_pFormControllerImpl(NULL) 633*cdf0e10cSrcweir ,m_nPendingLoadFinished(0) 634*cdf0e10cSrcweir ,m_nFormActionNestingLevel(0) 635*cdf0e10cSrcweir ,m_bLoadCanceled( sal_False ) 636*cdf0e10cSrcweir ,m_bClosingKillOpen( sal_False ) 637*cdf0e10cSrcweir ,m_bCannotSelectUnfiltered( true ) 638*cdf0e10cSrcweir { 639*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::SbaXDataBrowserController" ); 640*cdf0e10cSrcweir DBG_CTOR(SbaXDataBrowserController,NULL); 641*cdf0e10cSrcweir 642*cdf0e10cSrcweir // create the form controller aggregate 643*cdf0e10cSrcweir ::comphelper::increment(m_refCount); 644*cdf0e10cSrcweir { 645*cdf0e10cSrcweir m_pFormControllerImpl = new FormControllerImpl(this); 646*cdf0e10cSrcweir m_xFormControllerImpl = m_pFormControllerImpl; 647*cdf0e10cSrcweir m_xFormControllerImpl->setDelegator(*this); 648*cdf0e10cSrcweir } 649*cdf0e10cSrcweir ::comphelper::decrement(m_refCount); 650*cdf0e10cSrcweir 651*cdf0e10cSrcweir m_aInvalidateClipboard.SetTimeoutHdl(LINK(this, SbaXDataBrowserController, OnInvalidateClipboard)); 652*cdf0e10cSrcweir m_aInvalidateClipboard.SetTimeout(300); 653*cdf0e10cSrcweir } 654*cdf0e10cSrcweir 655*cdf0e10cSrcweir //------------------------------------------------------------------------------ 656*cdf0e10cSrcweir SbaXDataBrowserController::~SbaXDataBrowserController() 657*cdf0e10cSrcweir { 658*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::~SbaXDataBrowserController" ); 659*cdf0e10cSrcweir // deleteView(); 660*cdf0e10cSrcweir // release the aggregated form controller 661*cdf0e10cSrcweir if (m_xFormControllerImpl.is()) 662*cdf0e10cSrcweir { 663*cdf0e10cSrcweir Reference< XInterface > xEmpty; 664*cdf0e10cSrcweir m_xFormControllerImpl->setDelegator(xEmpty); 665*cdf0e10cSrcweir } 666*cdf0e10cSrcweir 667*cdf0e10cSrcweir DBG_DTOR(SbaXDataBrowserController,NULL); 668*cdf0e10cSrcweir } 669*cdf0e10cSrcweir 670*cdf0e10cSrcweir // ----------------------------------------------------------------------- 671*cdf0e10cSrcweir void SbaXDataBrowserController::startFrameListening( const Reference< XFrame >& _rxFrame ) 672*cdf0e10cSrcweir { 673*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::startFrameListening" ); 674*cdf0e10cSrcweir SbaXDataBrowserController_Base::startFrameListening( _rxFrame ); 675*cdf0e10cSrcweir 676*cdf0e10cSrcweir Reference< XFrameActionListener > xAggListener; 677*cdf0e10cSrcweir if ( m_xFormControllerImpl.is() ) 678*cdf0e10cSrcweir m_xFormControllerImpl->queryAggregation( XFrameActionListener::static_type() ) >>= xAggListener; 679*cdf0e10cSrcweir 680*cdf0e10cSrcweir if ( _rxFrame.is() && xAggListener.is() ) 681*cdf0e10cSrcweir _rxFrame->addFrameActionListener( xAggListener ); 682*cdf0e10cSrcweir } 683*cdf0e10cSrcweir 684*cdf0e10cSrcweir // ----------------------------------------------------------------------- 685*cdf0e10cSrcweir void SbaXDataBrowserController::stopFrameListening( const Reference< XFrame >& _rxFrame ) 686*cdf0e10cSrcweir { 687*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::stopFrameListening" ); 688*cdf0e10cSrcweir SbaXDataBrowserController_Base::stopFrameListening( _rxFrame ); 689*cdf0e10cSrcweir 690*cdf0e10cSrcweir Reference< XFrameActionListener > xAggListener; 691*cdf0e10cSrcweir if ( m_xFormControllerImpl.is() ) 692*cdf0e10cSrcweir m_xFormControllerImpl->queryAggregation( XFrameActionListener::static_type() ) >>= xAggListener; 693*cdf0e10cSrcweir 694*cdf0e10cSrcweir if ( _rxFrame.is() && xAggListener.is() ) 695*cdf0e10cSrcweir _rxFrame->removeFrameActionListener( xAggListener ); 696*cdf0e10cSrcweir } 697*cdf0e10cSrcweir 698*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 699*cdf0e10cSrcweir void SbaXDataBrowserController::onStartLoading( const Reference< XLoadable >& _rxLoadable ) 700*cdf0e10cSrcweir { 701*cdf0e10cSrcweir m_bLoadCanceled = sal_False; 702*cdf0e10cSrcweir m_bCannotSelectUnfiltered = false; 703*cdf0e10cSrcweir 704*cdf0e10cSrcweir Reference< XWarningsSupplier > xWarnings( _rxLoadable, UNO_QUERY ); 705*cdf0e10cSrcweir if ( xWarnings.is() ) 706*cdf0e10cSrcweir xWarnings->clearWarnings(); 707*cdf0e10cSrcweir } 708*cdf0e10cSrcweir 709*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 710*cdf0e10cSrcweir void SbaXDataBrowserController::impl_checkForCannotSelectUnfiltered( const SQLExceptionInfo& _rError ) 711*cdf0e10cSrcweir { 712*cdf0e10cSrcweir ::connectivity::SQLError aError( getORB() ); 713*cdf0e10cSrcweir ::connectivity::ErrorCode nErrorCode( aError.getErrorCode( ErrorCondition::DATA_CANNOT_SELECT_UNFILTERED ) ); 714*cdf0e10cSrcweir if ( ((const SQLException*)_rError)->ErrorCode == nErrorCode ) 715*cdf0e10cSrcweir { 716*cdf0e10cSrcweir m_bCannotSelectUnfiltered = true; 717*cdf0e10cSrcweir InvalidateFeature( ID_BROWSER_FILTERCRIT ); 718*cdf0e10cSrcweir } 719*cdf0e10cSrcweir } 720*cdf0e10cSrcweir 721*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 722*cdf0e10cSrcweir sal_Bool SbaXDataBrowserController::reloadForm( const Reference< XLoadable >& _rxLoadable ) 723*cdf0e10cSrcweir { 724*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::reloadForm" ); 725*cdf0e10cSrcweir WaitObject aWO(getBrowserView()); 726*cdf0e10cSrcweir 727*cdf0e10cSrcweir onStartLoading( _rxLoadable ); 728*cdf0e10cSrcweir 729*cdf0e10cSrcweir FormErrorHelper aReportError(this); 730*cdf0e10cSrcweir if (_rxLoadable->isLoaded()) 731*cdf0e10cSrcweir _rxLoadable->reload(); 732*cdf0e10cSrcweir else 733*cdf0e10cSrcweir _rxLoadable->load(); 734*cdf0e10cSrcweir 735*cdf0e10cSrcweir m_xParser.clear(); 736*cdf0e10cSrcweir const Reference< XPropertySet > xFormSet(getRowSet(), UNO_QUERY); 737*cdf0e10cSrcweir if (::comphelper::getBOOL(xFormSet->getPropertyValue(PROPERTY_ESCAPE_PROCESSING))) 738*cdf0e10cSrcweir xFormSet->getPropertyValue(PROPERTY_SINGLESELECTQUERYCOMPOSER) >>= m_xParser; 739*cdf0e10cSrcweir #if 0 740*cdf0e10cSrcweir { 741*cdf0e10cSrcweir const Reference< XPropertySet > xRowSetProps( getRowSet(), UNO_QUERY ); 742*cdf0e10cSrcweir const Reference< XSingleSelectQueryAnalyzer > xAnalyzer( xRowSetProps->getPropertyValue( PROPERTY_SINGLESELECTQUERYCOMPOSER ), UNO_QUERY ); 743*cdf0e10cSrcweir if ( xAnalyzer.is() ) 744*cdf0e10cSrcweir { 745*cdf0e10cSrcweir const Reference< XIndexAccess > xOrderColumns( xAnalyzer->getOrderColumns(), UNO_SET_THROW ); 746*cdf0e10cSrcweir const sal_Int32 nOrderColumns( xOrderColumns->getCount() ); 747*cdf0e10cSrcweir for ( sal_Int32 c=0; c<nOrderColumns; ++c ) 748*cdf0e10cSrcweir { 749*cdf0e10cSrcweir const Reference< XPropertySet > xOrderColumn( xOrderColumns->getByIndex(c), UNO_QUERY_THROW ); 750*cdf0e10cSrcweir ::rtl::OUString sColumnName; 751*cdf0e10cSrcweir OSL_VERIFY( xOrderColumn->getPropertyValue( PROPERTY_NAME ) >>= sColumnName); 752*cdf0e10cSrcweir ::rtl::OUString sTableName; 753*cdf0e10cSrcweir OSL_VERIFY( xOrderColumn->getPropertyValue( PROPERTY_TABLENAME ) >>= sTableName); 754*cdf0e10cSrcweir (void)sColumnName; 755*cdf0e10cSrcweir (void)sTableName; 756*cdf0e10cSrcweir } 757*cdf0e10cSrcweir } 758*cdf0e10cSrcweir } 759*cdf0e10cSrcweir #endif 760*cdf0e10cSrcweir 761*cdf0e10cSrcweir Reference< XWarningsSupplier > xWarnings( _rxLoadable, UNO_QUERY ); 762*cdf0e10cSrcweir if ( xWarnings.is() ) 763*cdf0e10cSrcweir { 764*cdf0e10cSrcweir try 765*cdf0e10cSrcweir { 766*cdf0e10cSrcweir SQLExceptionInfo aInfo( xWarnings->getWarnings() ); 767*cdf0e10cSrcweir if ( aInfo.isValid() ) 768*cdf0e10cSrcweir { 769*cdf0e10cSrcweir showError( aInfo ); 770*cdf0e10cSrcweir impl_checkForCannotSelectUnfiltered( aInfo ); 771*cdf0e10cSrcweir } 772*cdf0e10cSrcweir } 773*cdf0e10cSrcweir catch(const SQLException& e) 774*cdf0e10cSrcweir { 775*cdf0e10cSrcweir (void)e; 776*cdf0e10cSrcweir } 777*cdf0e10cSrcweir } 778*cdf0e10cSrcweir 779*cdf0e10cSrcweir return _rxLoadable->isLoaded(); 780*cdf0e10cSrcweir } 781*cdf0e10cSrcweir 782*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 783*cdf0e10cSrcweir void SbaXDataBrowserController::initFormatter() 784*cdf0e10cSrcweir { 785*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::initFormatter" ); 786*cdf0e10cSrcweir // --------------------------------------------------------------- 787*cdf0e10cSrcweir // create a formatter working with the connections format supplier 788*cdf0e10cSrcweir Reference< ::com::sun::star::util::XNumberFormatsSupplier > xSupplier(::dbtools::getNumberFormats(::dbtools::getConnection(m_xRowSet), sal_True,getORB())); 789*cdf0e10cSrcweir 790*cdf0e10cSrcweir if(xSupplier.is()) 791*cdf0e10cSrcweir { 792*cdf0e10cSrcweir // create a new formatter 793*cdf0e10cSrcweir m_xFormatter = Reference< ::com::sun::star::util::XNumberFormatter > ( 794*cdf0e10cSrcweir getORB()->createInstance(::rtl::OUString::createFromAscii("com.sun.star.util.NumberFormatter")), UNO_QUERY); 795*cdf0e10cSrcweir if (m_xFormatter.is()) 796*cdf0e10cSrcweir m_xFormatter->attachNumberFormatsSupplier(xSupplier); 797*cdf0e10cSrcweir } 798*cdf0e10cSrcweir else // clear the formatter 799*cdf0e10cSrcweir m_xFormatter = NULL; 800*cdf0e10cSrcweir } 801*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 802*cdf0e10cSrcweir void SbaXDataBrowserController::describeSupportedFeatures() 803*cdf0e10cSrcweir { 804*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::describeSupportedFeatures" ); 805*cdf0e10cSrcweir SbaXDataBrowserController_Base::describeSupportedFeatures(); 806*cdf0e10cSrcweir implDescribeSupportedFeature( ".uno:FormSlots/undoRecord", ID_BROWSER_UNDORECORD, CommandGroup::CONTROLS ); 807*cdf0e10cSrcweir implDescribeSupportedFeature( ".uno:FormController/undoRecord", ID_BROWSER_UNDORECORD, CommandGroup::CONTROLS ); 808*cdf0e10cSrcweir implDescribeSupportedFeature( ".uno:RecUndo", ID_BROWSER_UNDORECORD, CommandGroup::CONTROLS ); 809*cdf0e10cSrcweir implDescribeSupportedFeature( ".uno:FormSlots/saveRecord", ID_BROWSER_SAVERECORD, CommandGroup::CONTROLS ); 810*cdf0e10cSrcweir implDescribeSupportedFeature( ".uno:FormController/saveRecord", ID_BROWSER_SAVERECORD, CommandGroup::CONTROLS ); 811*cdf0e10cSrcweir implDescribeSupportedFeature( ".uno:RecSave", ID_BROWSER_SAVERECORD, CommandGroup::CONTROLS ); 812*cdf0e10cSrcweir implDescribeSupportedFeature( ".uno:Save", ID_BROWSER_SAVERECORD, CommandGroup::DOCUMENT ); 813*cdf0e10cSrcweir implDescribeSupportedFeature( ".uno:RecSearch", SID_FM_SEARCH, CommandGroup::CONTROLS ); 814*cdf0e10cSrcweir implDescribeSupportedFeature( ".uno:AutoFilter", SID_FM_AUTOFILTER, CommandGroup::CONTROLS ); 815*cdf0e10cSrcweir implDescribeSupportedFeature( ".uno:Refresh", SID_FM_REFRESH, CommandGroup::CONTROLS ); 816*cdf0e10cSrcweir implDescribeSupportedFeature( ".uno:OrderCrit", SID_FM_ORDERCRIT, CommandGroup::CONTROLS ); 817*cdf0e10cSrcweir implDescribeSupportedFeature( ".uno:RemoveFilterSort", SID_FM_REMOVE_FILTER_SORT,CommandGroup::CONTROLS ); 818*cdf0e10cSrcweir implDescribeSupportedFeature( ".uno:FormFiltered", SID_FM_FORM_FILTERED, CommandGroup::CONTROLS ); 819*cdf0e10cSrcweir implDescribeSupportedFeature( ".uno:FilterCrit", SID_FM_FILTERCRIT, CommandGroup::CONTROLS ); 820*cdf0e10cSrcweir implDescribeSupportedFeature( ".uno:Sortup", ID_BROWSER_SORTUP, CommandGroup::CONTROLS ); 821*cdf0e10cSrcweir implDescribeSupportedFeature( ".uno:SortDown", ID_BROWSER_SORTDOWN, CommandGroup::CONTROLS ); 822*cdf0e10cSrcweir implDescribeSupportedFeature( ".uno:FormSlots/deleteRecord", SID_FM_DELETEROWS, CommandGroup::EDIT ); 823*cdf0e10cSrcweir implDescribeSupportedFeature( ".uno:FormSlots/insertRecord", ID_BROWSER_INSERT_ROW, CommandGroup::INSERT ); 824*cdf0e10cSrcweir } 825*cdf0e10cSrcweir //------------------------------------------------------------------------------ 826*cdf0e10cSrcweir sal_Bool SbaXDataBrowserController::Construct(Window* pParent) 827*cdf0e10cSrcweir { 828*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::Construct" ); 829*cdf0e10cSrcweir // --------------------------------------------- 830*cdf0e10cSrcweir // create/initialize the form and the grid model 831*cdf0e10cSrcweir m_xRowSet = CreateForm(); 832*cdf0e10cSrcweir if (!m_xRowSet.is()) 833*cdf0e10cSrcweir return sal_False; 834*cdf0e10cSrcweir 835*cdf0e10cSrcweir m_xColumnsSupplier.set(m_xRowSet,UNO_QUERY); 836*cdf0e10cSrcweir m_xLoadable.set(m_xRowSet,UNO_QUERY); 837*cdf0e10cSrcweir 838*cdf0e10cSrcweir Reference< XPropertySet > xFormProperties( m_xRowSet, UNO_QUERY ); 839*cdf0e10cSrcweir if ( !InitializeForm( xFormProperties ) ) 840*cdf0e10cSrcweir return sal_False; 841*cdf0e10cSrcweir 842*cdf0e10cSrcweir m_xGridModel = CreateGridModel(); 843*cdf0e10cSrcweir if (!m_xGridModel.is()) 844*cdf0e10cSrcweir return sal_False; 845*cdf0e10cSrcweir 846*cdf0e10cSrcweir // set the formatter if available 847*cdf0e10cSrcweir initFormatter(); 848*cdf0e10cSrcweir // --------------------------------------------------------------- 849*cdf0e10cSrcweir 850*cdf0e10cSrcweir // we want to have a grid with a "flat" border 851*cdf0e10cSrcweir Reference< XPropertySet > xGridSet(m_xGridModel, UNO_QUERY); 852*cdf0e10cSrcweir if ( xGridSet.is() ) 853*cdf0e10cSrcweir xGridSet->setPropertyValue(PROPERTY_BORDER, makeAny((sal_Int16)2)); 854*cdf0e10cSrcweir 855*cdf0e10cSrcweir // ---------- 856*cdf0e10cSrcweir // marry them 857*cdf0e10cSrcweir Reference< ::com::sun::star::container::XNameContainer > xNameCont(m_xRowSet, UNO_QUERY); 858*cdf0e10cSrcweir { 859*cdf0e10cSrcweir String sText(ModuleRes(STR_DATASOURCE_GRIDCONTROL_NAME)); 860*cdf0e10cSrcweir xNameCont->insertByName(::rtl::OUString(sText), makeAny(m_xGridModel)); 861*cdf0e10cSrcweir } 862*cdf0e10cSrcweir 863*cdf0e10cSrcweir // --------------- 864*cdf0e10cSrcweir // create the view 865*cdf0e10cSrcweir setView( * new UnoDataBrowserView( pParent, *this, getORB() ) ); 866*cdf0e10cSrcweir if (!getBrowserView()) 867*cdf0e10cSrcweir return sal_False; 868*cdf0e10cSrcweir 869*cdf0e10cSrcweir // late construction 870*cdf0e10cSrcweir sal_Bool bSuccess = sal_False; 871*cdf0e10cSrcweir try 872*cdf0e10cSrcweir { 873*cdf0e10cSrcweir getBrowserView()->Construct(getControlModel()); 874*cdf0e10cSrcweir bSuccess = sal_True; 875*cdf0e10cSrcweir } 876*cdf0e10cSrcweir catch(SQLException&) 877*cdf0e10cSrcweir { 878*cdf0e10cSrcweir } 879*cdf0e10cSrcweir catch(Exception&) 880*cdf0e10cSrcweir { 881*cdf0e10cSrcweir DBG_ERROR("SbaXDataBrowserController::Construct : the construction of UnoDataBrowserView failed !"); 882*cdf0e10cSrcweir } 883*cdf0e10cSrcweir 884*cdf0e10cSrcweir if (!bSuccess) 885*cdf0e10cSrcweir { 886*cdf0e10cSrcweir // deleteView(); 887*cdf0e10cSrcweir return sal_False; 888*cdf0e10cSrcweir } 889*cdf0e10cSrcweir 890*cdf0e10cSrcweir // now that we have a view we can create the clipboard listener 891*cdf0e10cSrcweir m_aSystemClipboard = TransferableDataHelper::CreateFromSystemClipboard( getView() ); 892*cdf0e10cSrcweir m_aSystemClipboard.StartClipboardListening( ); 893*cdf0e10cSrcweir 894*cdf0e10cSrcweir m_pClipbordNotifier = new TransferableClipboardListener( LINK( this, SbaXDataBrowserController, OnClipboardChanged ) ); 895*cdf0e10cSrcweir m_pClipbordNotifier->acquire(); 896*cdf0e10cSrcweir m_pClipbordNotifier->AddRemoveListener( getView(), sal_True ); 897*cdf0e10cSrcweir 898*cdf0e10cSrcweir // this call create the toolbox 899*cdf0e10cSrcweir SbaXDataBrowserController_Base::Construct(pParent); 900*cdf0e10cSrcweir 901*cdf0e10cSrcweir getBrowserView()->Show(); 902*cdf0e10cSrcweir 903*cdf0e10cSrcweir // set the callbacks for the grid control 904*cdf0e10cSrcweir SbaGridControl* pVclGrid = getBrowserView()->getVclControl(); 905*cdf0e10cSrcweir DBG_ASSERT(pVclGrid, "SbaXDataBrowserController::Construct : have no VCL control !"); 906*cdf0e10cSrcweir pVclGrid->SetMasterListener(this); 907*cdf0e10cSrcweir 908*cdf0e10cSrcweir // -------------------------- 909*cdf0e10cSrcweir // add listeners ... 910*cdf0e10cSrcweir 911*cdf0e10cSrcweir // ... to the form model 912*cdf0e10cSrcweir Reference< XPropertySet > xFormSet(getRowSet(), UNO_QUERY); 913*cdf0e10cSrcweir if (xFormSet.is()) 914*cdf0e10cSrcweir { 915*cdf0e10cSrcweir xFormSet->addPropertyChangeListener(PROPERTY_ISNEW, static_cast<XPropertyChangeListener*>(this)); 916*cdf0e10cSrcweir xFormSet->addPropertyChangeListener(PROPERTY_ISMODIFIED, static_cast<XPropertyChangeListener*>(this)); 917*cdf0e10cSrcweir xFormSet->addPropertyChangeListener(PROPERTY_ROWCOUNT, static_cast<XPropertyChangeListener*>(this)); 918*cdf0e10cSrcweir xFormSet->addPropertyChangeListener(PROPERTY_ACTIVECOMMAND, static_cast<XPropertyChangeListener*>(this)); 919*cdf0e10cSrcweir xFormSet->addPropertyChangeListener(PROPERTY_ORDER, static_cast<XPropertyChangeListener*>(this)); 920*cdf0e10cSrcweir xFormSet->addPropertyChangeListener(PROPERTY_FILTER, static_cast<XPropertyChangeListener*>(this)); 921*cdf0e10cSrcweir xFormSet->addPropertyChangeListener(PROPERTY_HAVING_CLAUSE, static_cast<XPropertyChangeListener*>(this)); 922*cdf0e10cSrcweir xFormSet->addPropertyChangeListener(PROPERTY_APPLYFILTER, static_cast<XPropertyChangeListener*>(this)); 923*cdf0e10cSrcweir } 924*cdf0e10cSrcweir Reference< ::com::sun::star::sdb::XSQLErrorBroadcaster > xFormError(getRowSet(), UNO_QUERY); 925*cdf0e10cSrcweir if (xFormError.is()) 926*cdf0e10cSrcweir xFormError->addSQLErrorListener((::com::sun::star::sdb::XSQLErrorListener*)this); 927*cdf0e10cSrcweir 928*cdf0e10cSrcweir if (m_xLoadable.is()) 929*cdf0e10cSrcweir m_xLoadable->addLoadListener(this); 930*cdf0e10cSrcweir 931*cdf0e10cSrcweir Reference< ::com::sun::star::form::XDatabaseParameterBroadcaster > xFormParameter(getRowSet(), UNO_QUERY); 932*cdf0e10cSrcweir if (xFormParameter.is()) 933*cdf0e10cSrcweir xFormParameter->addParameterListener((::com::sun::star::form::XDatabaseParameterListener*)this); 934*cdf0e10cSrcweir 935*cdf0e10cSrcweir addModelListeners(getControlModel()); 936*cdf0e10cSrcweir addControlListeners(getBrowserView()->getGridControl()); 937*cdf0e10cSrcweir 938*cdf0e10cSrcweir // ------------- 939*cdf0e10cSrcweir // load the form 940*cdf0e10cSrcweir return LoadForm(); 941*cdf0e10cSrcweir } 942*cdf0e10cSrcweir 943*cdf0e10cSrcweir //------------------------------------------------------------------------------ 944*cdf0e10cSrcweir sal_Bool SbaXDataBrowserController::LoadForm() 945*cdf0e10cSrcweir { 946*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::LoadForm" ); 947*cdf0e10cSrcweir reloadForm( m_xLoadable ); 948*cdf0e10cSrcweir return sal_True; 949*cdf0e10cSrcweir } 950*cdf0e10cSrcweir //------------------------------------------------------------------------------ 951*cdf0e10cSrcweir void SbaXDataBrowserController::AddColumnListener(const Reference< XPropertySet > & /*xCol*/) 952*cdf0e10cSrcweir { 953*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::AddColumnListener" ); 954*cdf0e10cSrcweir // we're not interested in any column properties ... 955*cdf0e10cSrcweir } 956*cdf0e10cSrcweir 957*cdf0e10cSrcweir //------------------------------------------------------------------------------ 958*cdf0e10cSrcweir void SbaXDataBrowserController::RemoveColumnListener(const Reference< XPropertySet > & /*xCol*/) 959*cdf0e10cSrcweir { 960*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::RemoveColumnListener" ); 961*cdf0e10cSrcweir } 962*cdf0e10cSrcweir //------------------------------------------------------------------------------ 963*cdf0e10cSrcweir Reference< XRowSet > SbaXDataBrowserController::CreateForm() 964*cdf0e10cSrcweir { 965*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::CreateForm" ); 966*cdf0e10cSrcweir return Reference< XRowSet > (getORB()->createInstance(::rtl::OUString::createFromAscii("com.sun.star.form.component.Form")), UNO_QUERY); 967*cdf0e10cSrcweir } 968*cdf0e10cSrcweir 969*cdf0e10cSrcweir //------------------------------------------------------------------------------ 970*cdf0e10cSrcweir Reference< ::com::sun::star::form::XFormComponent > SbaXDataBrowserController::CreateGridModel() 971*cdf0e10cSrcweir { 972*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::CreateGridModel" ); 973*cdf0e10cSrcweir return Reference< ::com::sun::star::form::XFormComponent > (getORB()->createInstance(::rtl::OUString::createFromAscii("com.sun.star.form.component.GridControl")), UNO_QUERY); 974*cdf0e10cSrcweir } 975*cdf0e10cSrcweir 976*cdf0e10cSrcweir // ------------------------------------------------------------------------- 977*cdf0e10cSrcweir void SbaXDataBrowserController::addModelListeners(const Reference< ::com::sun::star::awt::XControlModel > & _xGridControlModel) 978*cdf0e10cSrcweir { 979*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::addModelListeners" ); 980*cdf0e10cSrcweir // ... all the grid columns 981*cdf0e10cSrcweir addColumnListeners(_xGridControlModel); 982*cdf0e10cSrcweir 983*cdf0e10cSrcweir // (we are interested in all columns the grid has (and only in these) so we have to listen to the container, too) 984*cdf0e10cSrcweir Reference< ::com::sun::star::container::XContainer > xColContainer(_xGridControlModel, UNO_QUERY); 985*cdf0e10cSrcweir if (xColContainer.is()) 986*cdf0e10cSrcweir xColContainer->addContainerListener((::com::sun::star::container::XContainerListener*)this); 987*cdf0e10cSrcweir 988*cdf0e10cSrcweir Reference< ::com::sun::star::form::XReset > xReset(_xGridControlModel, UNO_QUERY); 989*cdf0e10cSrcweir if (xReset.is()) 990*cdf0e10cSrcweir xReset->addResetListener((::com::sun::star::form::XResetListener*)this); 991*cdf0e10cSrcweir } 992*cdf0e10cSrcweir 993*cdf0e10cSrcweir // ------------------------------------------------------------------------- 994*cdf0e10cSrcweir void SbaXDataBrowserController::removeModelListeners(const Reference< XControlModel > & _xGridControlModel) 995*cdf0e10cSrcweir { 996*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::removeModelListeners" ); 997*cdf0e10cSrcweir // every single column model 998*cdf0e10cSrcweir Reference< XIndexContainer > xColumns(_xGridControlModel, UNO_QUERY); 999*cdf0e10cSrcweir if (xColumns.is()) 1000*cdf0e10cSrcweir { 1001*cdf0e10cSrcweir sal_Int32 nCount = xColumns->getCount(); 1002*cdf0e10cSrcweir for (sal_uInt16 i=0; i < nCount; ++i) 1003*cdf0e10cSrcweir { 1004*cdf0e10cSrcweir Reference< XPropertySet > xCol(xColumns->getByIndex(i),UNO_QUERY); 1005*cdf0e10cSrcweir RemoveColumnListener(xCol); 1006*cdf0e10cSrcweir } 1007*cdf0e10cSrcweir } 1008*cdf0e10cSrcweir 1009*cdf0e10cSrcweir Reference< XContainer > xColContainer(_xGridControlModel, UNO_QUERY); 1010*cdf0e10cSrcweir if (xColContainer.is()) 1011*cdf0e10cSrcweir xColContainer->removeContainerListener( this ); 1012*cdf0e10cSrcweir 1013*cdf0e10cSrcweir Reference< XReset > xReset(_xGridControlModel, UNO_QUERY); 1014*cdf0e10cSrcweir if (xReset.is()) 1015*cdf0e10cSrcweir xReset->removeResetListener( this ); 1016*cdf0e10cSrcweir } 1017*cdf0e10cSrcweir 1018*cdf0e10cSrcweir // ------------------------------------------------------------------------- 1019*cdf0e10cSrcweir void SbaXDataBrowserController::addControlListeners(const Reference< ::com::sun::star::awt::XControl > & _xGridControl) 1020*cdf0e10cSrcweir { 1021*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::addControlListeners" ); 1022*cdf0e10cSrcweir // to ge the 'modified' for the current cell 1023*cdf0e10cSrcweir Reference< XModifyBroadcaster > xBroadcaster(getBrowserView()->getGridControl(), UNO_QUERY); 1024*cdf0e10cSrcweir if (xBroadcaster.is()) 1025*cdf0e10cSrcweir xBroadcaster->addModifyListener(static_cast<XModifyListener*>(this)); 1026*cdf0e10cSrcweir 1027*cdf0e10cSrcweir // introduce ourself as dispatch provider for the grid 1028*cdf0e10cSrcweir Reference< XDispatchProviderInterception > xInterception(getBrowserView()->getGridControl(), UNO_QUERY); 1029*cdf0e10cSrcweir if (xInterception.is()) 1030*cdf0e10cSrcweir xInterception->registerDispatchProviderInterceptor(static_cast<XDispatchProviderInterceptor*>(this)); 1031*cdf0e10cSrcweir 1032*cdf0e10cSrcweir // add as focus listener to the control (needed for the form controller functionality) 1033*cdf0e10cSrcweir Reference< XWindow > xWindow(_xGridControl, UNO_QUERY); 1034*cdf0e10cSrcweir if (xWindow.is()) 1035*cdf0e10cSrcweir xWindow->addFocusListener(this); 1036*cdf0e10cSrcweir } 1037*cdf0e10cSrcweir 1038*cdf0e10cSrcweir // ------------------------------------------------------------------------- 1039*cdf0e10cSrcweir void SbaXDataBrowserController::removeControlListeners(const Reference< ::com::sun::star::awt::XControl > & _xGridControl) 1040*cdf0e10cSrcweir { 1041*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::removeControlListeners" ); 1042*cdf0e10cSrcweir Reference< XModifyBroadcaster > xBroadcaster(_xGridControl, UNO_QUERY); 1043*cdf0e10cSrcweir if (xBroadcaster.is()) 1044*cdf0e10cSrcweir xBroadcaster->removeModifyListener(static_cast<XModifyListener*>(this)); 1045*cdf0e10cSrcweir 1046*cdf0e10cSrcweir Reference< XDispatchProviderInterception > xInterception(_xGridControl, UNO_QUERY); 1047*cdf0e10cSrcweir if (xInterception.is()) 1048*cdf0e10cSrcweir xInterception->releaseDispatchProviderInterceptor(static_cast<XDispatchProviderInterceptor*>(this)); 1049*cdf0e10cSrcweir 1050*cdf0e10cSrcweir Reference< XWindow > xWindow(_xGridControl, UNO_QUERY); 1051*cdf0e10cSrcweir if (xWindow.is()) 1052*cdf0e10cSrcweir xWindow->removeFocusListener(this); 1053*cdf0e10cSrcweir } 1054*cdf0e10cSrcweir 1055*cdf0e10cSrcweir //------------------------------------------------------------------ 1056*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::focusGained(const FocusEvent& /*e*/) throw( RuntimeException ) 1057*cdf0e10cSrcweir { 1058*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::focusGained" ); 1059*cdf0e10cSrcweir // notify our activate listeners (registered on the form controller aggregate) 1060*cdf0e10cSrcweir EventObject aEvt(*this); 1061*cdf0e10cSrcweir ::cppu::OInterfaceIteratorHelper aIter(m_pFormControllerImpl->m_aActivateListeners); 1062*cdf0e10cSrcweir while (aIter.hasMoreElements()) 1063*cdf0e10cSrcweir static_cast<XFormControllerListener*>(aIter.next())->formActivated(aEvt); 1064*cdf0e10cSrcweir } 1065*cdf0e10cSrcweir 1066*cdf0e10cSrcweir //------------------------------------------------------------------ 1067*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::focusLost(const FocusEvent& e) throw( RuntimeException ) 1068*cdf0e10cSrcweir { 1069*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::focusLost" ); 1070*cdf0e10cSrcweir // some general checks 1071*cdf0e10cSrcweir if (!getBrowserView() || !getBrowserView()->getGridControl().is()) 1072*cdf0e10cSrcweir return; 1073*cdf0e10cSrcweir Reference< XVclWindowPeer > xMyGridPeer(getBrowserView()->getGridControl()->getPeer(), UNO_QUERY); 1074*cdf0e10cSrcweir if (!xMyGridPeer.is()) 1075*cdf0e10cSrcweir return; 1076*cdf0e10cSrcweir Reference< XWindowPeer > xNextControlPeer(e.NextFocus, UNO_QUERY); 1077*cdf0e10cSrcweir if (!xNextControlPeer.is()) 1078*cdf0e10cSrcweir return; 1079*cdf0e10cSrcweir 1080*cdf0e10cSrcweir // don't do a notification if it remains in the family (i.e. a child of the grid control gets the focus) 1081*cdf0e10cSrcweir if (xMyGridPeer->isChild(xNextControlPeer)) 1082*cdf0e10cSrcweir return; 1083*cdf0e10cSrcweir 1084*cdf0e10cSrcweir if (xMyGridPeer == xNextControlPeer) 1085*cdf0e10cSrcweir return; 1086*cdf0e10cSrcweir 1087*cdf0e10cSrcweir // notify the listeners that the "form" we represent has been deactivated 1088*cdf0e10cSrcweir EventObject aEvt(*this); 1089*cdf0e10cSrcweir ::cppu::OInterfaceIteratorHelper aIter(m_pFormControllerImpl->m_aActivateListeners); 1090*cdf0e10cSrcweir while (aIter.hasMoreElements()) 1091*cdf0e10cSrcweir static_cast<XFormControllerListener*>(aIter.next())->formDeactivated(aEvt); 1092*cdf0e10cSrcweir 1093*cdf0e10cSrcweir // commit the changes of the grid control (as we're deactivated) 1094*cdf0e10cSrcweir Reference< XBoundComponent > xCommitable(getBrowserView()->getGridControl(), UNO_QUERY); 1095*cdf0e10cSrcweir if (xCommitable.is()) 1096*cdf0e10cSrcweir xCommitable->commit(); 1097*cdf0e10cSrcweir else 1098*cdf0e10cSrcweir OSL_ENSURE(sal_False, "SbaXDataBrowserController::focusLost : why is my control not commitable ?"); 1099*cdf0e10cSrcweir } 1100*cdf0e10cSrcweir 1101*cdf0e10cSrcweir // ------------------------------------------------------------------------- 1102*cdf0e10cSrcweir void SbaXDataBrowserController::disposingGridControl(const ::com::sun::star::lang::EventObject& /*Source*/) 1103*cdf0e10cSrcweir { 1104*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::disposingGridControl" ); 1105*cdf0e10cSrcweir removeControlListeners(getBrowserView()->getGridControl()); 1106*cdf0e10cSrcweir } 1107*cdf0e10cSrcweir 1108*cdf0e10cSrcweir // ------------------------------------------------------------------------- 1109*cdf0e10cSrcweir void SbaXDataBrowserController::disposingGridModel(const ::com::sun::star::lang::EventObject& /*Source*/) 1110*cdf0e10cSrcweir { 1111*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::disposingGridModel" ); 1112*cdf0e10cSrcweir removeModelListeners(getControlModel()); 1113*cdf0e10cSrcweir } 1114*cdf0e10cSrcweir 1115*cdf0e10cSrcweir // ------------------------------------------------------------------------- 1116*cdf0e10cSrcweir void SbaXDataBrowserController::disposingFormModel(const ::com::sun::star::lang::EventObject& Source) 1117*cdf0e10cSrcweir { 1118*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::disposingFormModel" ); 1119*cdf0e10cSrcweir Reference< XPropertySet > xSourceSet(Source.Source, UNO_QUERY); 1120*cdf0e10cSrcweir if (xSourceSet.is()) 1121*cdf0e10cSrcweir { 1122*cdf0e10cSrcweir xSourceSet->removePropertyChangeListener(PROPERTY_ISNEW, static_cast<XPropertyChangeListener*>(this)); 1123*cdf0e10cSrcweir xSourceSet->removePropertyChangeListener(PROPERTY_ISMODIFIED, static_cast<XPropertyChangeListener*>(this)); 1124*cdf0e10cSrcweir xSourceSet->removePropertyChangeListener(PROPERTY_ROWCOUNT, static_cast<XPropertyChangeListener*>(this)); 1125*cdf0e10cSrcweir xSourceSet->removePropertyChangeListener(PROPERTY_ACTIVECOMMAND, static_cast<XPropertyChangeListener*>(this)); 1126*cdf0e10cSrcweir xSourceSet->removePropertyChangeListener(PROPERTY_ORDER, static_cast<XPropertyChangeListener*>(this)); 1127*cdf0e10cSrcweir xSourceSet->removePropertyChangeListener(PROPERTY_FILTER, static_cast<XPropertyChangeListener*>(this)); 1128*cdf0e10cSrcweir xSourceSet->removePropertyChangeListener(PROPERTY_HAVING_CLAUSE, static_cast<XPropertyChangeListener*>(this)); 1129*cdf0e10cSrcweir xSourceSet->removePropertyChangeListener(PROPERTY_APPLYFILTER, static_cast<XPropertyChangeListener*>(this)); 1130*cdf0e10cSrcweir } 1131*cdf0e10cSrcweir 1132*cdf0e10cSrcweir Reference< ::com::sun::star::sdb::XSQLErrorBroadcaster > xFormError(Source.Source, UNO_QUERY); 1133*cdf0e10cSrcweir if (xFormError.is()) 1134*cdf0e10cSrcweir xFormError->removeSQLErrorListener((::com::sun::star::sdb::XSQLErrorListener*)this); 1135*cdf0e10cSrcweir 1136*cdf0e10cSrcweir if (m_xLoadable.is()) 1137*cdf0e10cSrcweir m_xLoadable->removeLoadListener(this); 1138*cdf0e10cSrcweir 1139*cdf0e10cSrcweir Reference< ::com::sun::star::form::XDatabaseParameterBroadcaster > xFormParameter(Source.Source, UNO_QUERY); 1140*cdf0e10cSrcweir if (xFormParameter.is()) 1141*cdf0e10cSrcweir xFormParameter->removeParameterListener((::com::sun::star::form::XDatabaseParameterListener*)this); 1142*cdf0e10cSrcweir } 1143*cdf0e10cSrcweir 1144*cdf0e10cSrcweir // ------------------------------------------------------------------------- 1145*cdf0e10cSrcweir void SbaXDataBrowserController::disposingColumnModel(const ::com::sun::star::lang::EventObject& Source) 1146*cdf0e10cSrcweir { 1147*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::disposingColumnModel" ); 1148*cdf0e10cSrcweir RemoveColumnListener(Reference< XPropertySet > (Source.Source, UNO_QUERY)); 1149*cdf0e10cSrcweir } 1150*cdf0e10cSrcweir 1151*cdf0e10cSrcweir // ------------------------------------------------------------------------- 1152*cdf0e10cSrcweir void SbaXDataBrowserController::disposing(const EventObject& Source) throw( RuntimeException ) 1153*cdf0e10cSrcweir { 1154*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::disposing" ); 1155*cdf0e10cSrcweir // if it's a component other than our aggregate, forward it to the aggregate 1156*cdf0e10cSrcweir if ( m_xFormControllerImpl != Source.Source ) 1157*cdf0e10cSrcweir { 1158*cdf0e10cSrcweir Reference< XEventListener > xAggListener; 1159*cdf0e10cSrcweir m_xFormControllerImpl->queryAggregation( ::getCppuType( &xAggListener ) ) >>= xAggListener; 1160*cdf0e10cSrcweir if ( xAggListener.is( )) 1161*cdf0e10cSrcweir xAggListener->disposing( Source ); 1162*cdf0e10cSrcweir } 1163*cdf0e10cSrcweir 1164*cdf0e10cSrcweir // is it the grid control ? 1165*cdf0e10cSrcweir if (getBrowserView()) 1166*cdf0e10cSrcweir { 1167*cdf0e10cSrcweir Reference< ::com::sun::star::awt::XControl > xSourceControl(Source.Source, UNO_QUERY); 1168*cdf0e10cSrcweir if (xSourceControl == getBrowserView()->getGridControl()) 1169*cdf0e10cSrcweir disposingGridControl(Source); 1170*cdf0e10cSrcweir } 1171*cdf0e10cSrcweir 1172*cdf0e10cSrcweir // it's model (the container of the columns) ? 1173*cdf0e10cSrcweir if (getControlModel() == Source.Source) 1174*cdf0e10cSrcweir disposingGridModel(Source); 1175*cdf0e10cSrcweir 1176*cdf0e10cSrcweir // the form's model ? 1177*cdf0e10cSrcweir if ((getRowSet() == Source.Source)) 1178*cdf0e10cSrcweir disposingFormModel(Source); 1179*cdf0e10cSrcweir 1180*cdf0e10cSrcweir // from a single column model ? 1181*cdf0e10cSrcweir Reference< XPropertySet > xSourceSet(Source.Source, UNO_QUERY); 1182*cdf0e10cSrcweir if (xSourceSet.is()) 1183*cdf0e10cSrcweir { 1184*cdf0e10cSrcweir Reference< XPropertySetInfo > xInfo = xSourceSet->getPropertySetInfo(); 1185*cdf0e10cSrcweir // we assume that columns have a Width property and all other sets we are listening to don't have 1186*cdf0e10cSrcweir if (xInfo->hasPropertyByName(PROPERTY_WIDTH)) 1187*cdf0e10cSrcweir disposingColumnModel(Source); 1188*cdf0e10cSrcweir } 1189*cdf0e10cSrcweir SbaXDataBrowserController_Base::OGenericUnoController::disposing( Source ); 1190*cdf0e10cSrcweir } 1191*cdf0e10cSrcweir 1192*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1193*cdf0e10cSrcweir void SAL_CALL SbaXDataBrowserController::setIdentifier( const ::rtl::OUString& _Identifier ) throw (RuntimeException) 1194*cdf0e10cSrcweir { 1195*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::setIdentifier" ); 1196*cdf0e10cSrcweir ::osl::MutexGuard aGuard( getMutex() ); 1197*cdf0e10cSrcweir m_sModuleIdentifier = _Identifier; 1198*cdf0e10cSrcweir } 1199*cdf0e10cSrcweir 1200*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1201*cdf0e10cSrcweir ::rtl::OUString SAL_CALL SbaXDataBrowserController::getIdentifier( ) throw (RuntimeException) 1202*cdf0e10cSrcweir { 1203*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::getIdentifier" ); 1204*cdf0e10cSrcweir ::osl::MutexGuard aGuard( getMutex() ); 1205*cdf0e10cSrcweir return m_sModuleIdentifier; 1206*cdf0e10cSrcweir } 1207*cdf0e10cSrcweir 1208*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1209*cdf0e10cSrcweir void SbaXDataBrowserController::propertyChange(const PropertyChangeEvent& evt) throw ( RuntimeException ) 1210*cdf0e10cSrcweir { 1211*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::propertyChange" ); 1212*cdf0e10cSrcweir Reference< XPropertySet > xSource(evt.Source, UNO_QUERY); 1213*cdf0e10cSrcweir if (!xSource.is()) 1214*cdf0e10cSrcweir return; 1215*cdf0e10cSrcweir 1216*cdf0e10cSrcweir ::vos::OGuard aGuard(Application::GetSolarMutex()); 1217*cdf0e10cSrcweir // the IsModified changed to sal_False ? 1218*cdf0e10cSrcweir if ( (evt.PropertyName.equals(PROPERTY_ISMODIFIED)) 1219*cdf0e10cSrcweir && (::comphelper::getBOOL(evt.NewValue) == sal_False) 1220*cdf0e10cSrcweir ) 1221*cdf0e10cSrcweir { // -> the current field isn't modified anymore, too 1222*cdf0e10cSrcweir setCurrentModified( sal_False ); 1223*cdf0e10cSrcweir } 1224*cdf0e10cSrcweir 1225*cdf0e10cSrcweir // switching to a new record ? 1226*cdf0e10cSrcweir if ( (evt.PropertyName.equals(PROPERTY_ISNEW)) 1227*cdf0e10cSrcweir && (::comphelper::getBOOL(evt.NewValue) == sal_True) 1228*cdf0e10cSrcweir ) 1229*cdf0e10cSrcweir { 1230*cdf0e10cSrcweir if (::comphelper::getINT32(xSource->getPropertyValue(PROPERTY_ROWCOUNT)) == 0) 1231*cdf0e10cSrcweir // if we're switching to a new record and didn't have any records before we need to invalidate 1232*cdf0e10cSrcweir // all slots (as the cursor was invalid before the mode change and so the slots were disabled) 1233*cdf0e10cSrcweir InvalidateAll(); 1234*cdf0e10cSrcweir } 1235*cdf0e10cSrcweir 1236*cdf0e10cSrcweir 1237*cdf0e10cSrcweir if (evt.PropertyName.equals(PROPERTY_FILTER)) 1238*cdf0e10cSrcweir { 1239*cdf0e10cSrcweir InvalidateFeature(ID_BROWSER_REMOVEFILTER); 1240*cdf0e10cSrcweir } 1241*cdf0e10cSrcweir else if (evt.PropertyName.equals(PROPERTY_HAVING_CLAUSE)) 1242*cdf0e10cSrcweir { 1243*cdf0e10cSrcweir InvalidateFeature(ID_BROWSER_REMOVEFILTER); 1244*cdf0e10cSrcweir } 1245*cdf0e10cSrcweir else if (evt.PropertyName.equals(PROPERTY_ORDER)) 1246*cdf0e10cSrcweir { 1247*cdf0e10cSrcweir InvalidateFeature(ID_BROWSER_REMOVEFILTER); 1248*cdf0e10cSrcweir } 1249*cdf0e10cSrcweir 1250*cdf0e10cSrcweir // a new record count ? -> may be our search availability has changed 1251*cdf0e10cSrcweir if (evt.PropertyName.equals(PROPERTY_ROWCOUNT)) 1252*cdf0e10cSrcweir { 1253*cdf0e10cSrcweir sal_Int32 nNewValue = 0, nOldValue = 0; 1254*cdf0e10cSrcweir evt.NewValue >>= nNewValue; 1255*cdf0e10cSrcweir evt.OldValue >>= nOldValue; 1256*cdf0e10cSrcweir if((nOldValue == 0 && nNewValue != 0) || (nOldValue != 0 && nNewValue == 0)) 1257*cdf0e10cSrcweir InvalidateAll(); 1258*cdf0e10cSrcweir } 1259*cdf0e10cSrcweir } 1260*cdf0e10cSrcweir 1261*cdf0e10cSrcweir //------------------------------------------------------------------------ 1262*cdf0e10cSrcweir void SbaXDataBrowserController::modified(const ::com::sun::star::lang::EventObject& /*aEvent*/) throw( RuntimeException ) 1263*cdf0e10cSrcweir { 1264*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::modified" ); 1265*cdf0e10cSrcweir setCurrentModified( sal_True ); 1266*cdf0e10cSrcweir } 1267*cdf0e10cSrcweir 1268*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1269*cdf0e10cSrcweir void SbaXDataBrowserController::elementInserted(const ::com::sun::star::container::ContainerEvent& evt) throw( RuntimeException ) 1270*cdf0e10cSrcweir { 1271*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::elementInserted" ); 1272*cdf0e10cSrcweir DBG_ASSERT(Reference< XInterface >(evt.Source, UNO_QUERY).get() == Reference< XInterface >(getControlModel(), UNO_QUERY).get(), 1273*cdf0e10cSrcweir "SbaXDataBrowserController::elementInserted: where did this come from (not from the grid model)?!"); 1274*cdf0e10cSrcweir Reference< XPropertySet > xNewColumn(evt.Element,UNO_QUERY); 1275*cdf0e10cSrcweir if ( xNewColumn.is() ) 1276*cdf0e10cSrcweir AddColumnListener(xNewColumn); 1277*cdf0e10cSrcweir } 1278*cdf0e10cSrcweir 1279*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1280*cdf0e10cSrcweir void SbaXDataBrowserController::elementRemoved(const ::com::sun::star::container::ContainerEvent& evt) throw( RuntimeException ) 1281*cdf0e10cSrcweir { 1282*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::elementRemoved" ); 1283*cdf0e10cSrcweir DBG_ASSERT(Reference< XInterface >(evt.Source, UNO_QUERY).get() == Reference< XInterface >(getControlModel(), UNO_QUERY).get(), 1284*cdf0e10cSrcweir "SbaXDataBrowserController::elementRemoved: where did this come from (not from the grid model)?!"); 1285*cdf0e10cSrcweir Reference< XPropertySet > xOldColumn(evt.Element,UNO_QUERY); 1286*cdf0e10cSrcweir if ( xOldColumn.is() ) 1287*cdf0e10cSrcweir RemoveColumnListener(xOldColumn); 1288*cdf0e10cSrcweir } 1289*cdf0e10cSrcweir 1290*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1291*cdf0e10cSrcweir void SbaXDataBrowserController::elementReplaced(const ::com::sun::star::container::ContainerEvent& evt) throw( RuntimeException ) 1292*cdf0e10cSrcweir { 1293*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::elementReplaced" ); 1294*cdf0e10cSrcweir DBG_ASSERT(Reference< XInterface >(evt.Source, UNO_QUERY).get() == Reference< XInterface >(getControlModel(), UNO_QUERY).get(), 1295*cdf0e10cSrcweir "SbaXDataBrowserController::elementReplaced: where did this come from (not from the grid model)?!"); 1296*cdf0e10cSrcweir Reference< XPropertySet > xOldColumn(evt.ReplacedElement,UNO_QUERY); 1297*cdf0e10cSrcweir if ( xOldColumn.is() ) 1298*cdf0e10cSrcweir RemoveColumnListener(xOldColumn); 1299*cdf0e10cSrcweir 1300*cdf0e10cSrcweir Reference< XPropertySet > xNewColumn(evt.Element,UNO_QUERY); 1301*cdf0e10cSrcweir if ( xNewColumn.is() ) 1302*cdf0e10cSrcweir AddColumnListener(xNewColumn); 1303*cdf0e10cSrcweir } 1304*cdf0e10cSrcweir 1305*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1306*cdf0e10cSrcweir sal_Bool SbaXDataBrowserController::suspend(sal_Bool /*bSuspend*/) throw( RuntimeException ) 1307*cdf0e10cSrcweir { 1308*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::suspend" ); 1309*cdf0e10cSrcweir DBG_ASSERT(m_nPendingLoadFinished == 0, "SbaXDataBrowserController::suspend : there shouldn't be a pending load !"); 1310*cdf0e10cSrcweir 1311*cdf0e10cSrcweir m_aAsyncGetCellFocus.CancelCall(); 1312*cdf0e10cSrcweir m_aAsyncDisplayError.CancelCall(); 1313*cdf0e10cSrcweir m_aAsyncInvalidateAll.CancelCall(); 1314*cdf0e10cSrcweir 1315*cdf0e10cSrcweir sal_Bool bSuccess = SaveModified(); 1316*cdf0e10cSrcweir return bSuccess; 1317*cdf0e10cSrcweir } 1318*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1319*cdf0e10cSrcweir void SbaXDataBrowserController::disposing() 1320*cdf0e10cSrcweir { 1321*cdf0e10cSrcweir // the base class 1322*cdf0e10cSrcweir SbaXDataBrowserController_Base::OGenericUnoController::disposing(); 1323*cdf0e10cSrcweir 1324*cdf0e10cSrcweir // the data source 1325*cdf0e10cSrcweir Reference< XPropertySet > xFormSet(getRowSet(), UNO_QUERY); 1326*cdf0e10cSrcweir if (xFormSet.is()) 1327*cdf0e10cSrcweir { 1328*cdf0e10cSrcweir xFormSet->removePropertyChangeListener(PROPERTY_ISNEW, static_cast<XPropertyChangeListener*>(this)); 1329*cdf0e10cSrcweir xFormSet->removePropertyChangeListener(PROPERTY_ISMODIFIED, static_cast<XPropertyChangeListener*>(this)); 1330*cdf0e10cSrcweir xFormSet->removePropertyChangeListener(PROPERTY_ROWCOUNT, static_cast<XPropertyChangeListener*>(this)); 1331*cdf0e10cSrcweir xFormSet->removePropertyChangeListener(PROPERTY_ACTIVECOMMAND, static_cast<XPropertyChangeListener*>(this)); 1332*cdf0e10cSrcweir xFormSet->removePropertyChangeListener(PROPERTY_ORDER, static_cast<XPropertyChangeListener*>(this)); 1333*cdf0e10cSrcweir xFormSet->removePropertyChangeListener(PROPERTY_FILTER, static_cast<XPropertyChangeListener*>(this)); 1334*cdf0e10cSrcweir xFormSet->removePropertyChangeListener(PROPERTY_HAVING_CLAUSE, static_cast<XPropertyChangeListener*>(this)); 1335*cdf0e10cSrcweir xFormSet->removePropertyChangeListener(PROPERTY_APPLYFILTER, static_cast<XPropertyChangeListener*>(this)); 1336*cdf0e10cSrcweir } 1337*cdf0e10cSrcweir 1338*cdf0e10cSrcweir Reference< ::com::sun::star::sdb::XSQLErrorBroadcaster > xFormError(getRowSet(), UNO_QUERY); 1339*cdf0e10cSrcweir if (xFormError.is()) 1340*cdf0e10cSrcweir xFormError->removeSQLErrorListener((::com::sun::star::sdb::XSQLErrorListener*)this); 1341*cdf0e10cSrcweir 1342*cdf0e10cSrcweir if (m_xLoadable.is()) 1343*cdf0e10cSrcweir m_xLoadable->removeLoadListener(this); 1344*cdf0e10cSrcweir 1345*cdf0e10cSrcweir Reference< ::com::sun::star::form::XDatabaseParameterBroadcaster > xFormParameter(getRowSet(), UNO_QUERY); 1346*cdf0e10cSrcweir if (xFormParameter.is()) 1347*cdf0e10cSrcweir xFormParameter->removeParameterListener((::com::sun::star::form::XDatabaseParameterListener*)this); 1348*cdf0e10cSrcweir 1349*cdf0e10cSrcweir removeModelListeners(getControlModel()); 1350*cdf0e10cSrcweir 1351*cdf0e10cSrcweir if ( getView() && m_pClipbordNotifier ) 1352*cdf0e10cSrcweir { 1353*cdf0e10cSrcweir m_pClipbordNotifier->ClearCallbackLink(); 1354*cdf0e10cSrcweir m_pClipbordNotifier->AddRemoveListener( getView(), sal_False ); 1355*cdf0e10cSrcweir m_pClipbordNotifier->release(); 1356*cdf0e10cSrcweir m_pClipbordNotifier = NULL; 1357*cdf0e10cSrcweir } 1358*cdf0e10cSrcweir 1359*cdf0e10cSrcweir if (getBrowserView()) 1360*cdf0e10cSrcweir { 1361*cdf0e10cSrcweir removeControlListeners(getBrowserView()->getGridControl()); 1362*cdf0e10cSrcweir // don't delete explicitly, this is done by the owner (and user) of this controller (me hopes ...) 1363*cdf0e10cSrcweir clearView(); 1364*cdf0e10cSrcweir } 1365*cdf0e10cSrcweir 1366*cdf0e10cSrcweir if(m_aInvalidateClipboard.IsActive()) 1367*cdf0e10cSrcweir m_aInvalidateClipboard.Stop(); 1368*cdf0e10cSrcweir 1369*cdf0e10cSrcweir // dispose the row set 1370*cdf0e10cSrcweir try 1371*cdf0e10cSrcweir { 1372*cdf0e10cSrcweir ::comphelper::disposeComponent(m_xRowSet); 1373*cdf0e10cSrcweir 1374*cdf0e10cSrcweir m_xRowSet = NULL; 1375*cdf0e10cSrcweir m_xColumnsSupplier = NULL; 1376*cdf0e10cSrcweir m_xLoadable = NULL; 1377*cdf0e10cSrcweir } 1378*cdf0e10cSrcweir catch(Exception&) 1379*cdf0e10cSrcweir { 1380*cdf0e10cSrcweir DBG_UNHANDLED_EXCEPTION(); 1381*cdf0e10cSrcweir } 1382*cdf0e10cSrcweir m_xParser.clear(); 1383*cdf0e10cSrcweir // don't dispose, just reset - it's owned by the RowSet 1384*cdf0e10cSrcweir } 1385*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1386*cdf0e10cSrcweir void SbaXDataBrowserController::frameAction(const ::com::sun::star::frame::FrameActionEvent& aEvent) throw( RuntimeException ) 1387*cdf0e10cSrcweir { 1388*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::frameAction" ); 1389*cdf0e10cSrcweir ::osl::MutexGuard aGuard( getMutex() ); 1390*cdf0e10cSrcweir 1391*cdf0e10cSrcweir SbaXDataBrowserController_Base::frameAction( aEvent ); 1392*cdf0e10cSrcweir 1393*cdf0e10cSrcweir if ( aEvent.Source == getFrame() ) 1394*cdf0e10cSrcweir switch ( aEvent.Action ) 1395*cdf0e10cSrcweir { 1396*cdf0e10cSrcweir case FrameAction_FRAME_ACTIVATED: 1397*cdf0e10cSrcweir case FrameAction_FRAME_UI_ACTIVATED: 1398*cdf0e10cSrcweir // ensure that the active cell (if any) has the focus 1399*cdf0e10cSrcweir m_aAsyncGetCellFocus.Call(); 1400*cdf0e10cSrcweir // start the clipboard timer 1401*cdf0e10cSrcweir if (getBrowserView() && getBrowserView()->getVclControl() && !m_aInvalidateClipboard.IsActive()) 1402*cdf0e10cSrcweir { 1403*cdf0e10cSrcweir m_aInvalidateClipboard.Start(); 1404*cdf0e10cSrcweir OnInvalidateClipboard( NULL ); 1405*cdf0e10cSrcweir } 1406*cdf0e10cSrcweir break; 1407*cdf0e10cSrcweir case FrameAction_FRAME_DEACTIVATING: 1408*cdf0e10cSrcweir case FrameAction_FRAME_UI_DEACTIVATING: 1409*cdf0e10cSrcweir // stop the clipboard invalidator 1410*cdf0e10cSrcweir if (getBrowserView() && getBrowserView()->getVclControl() && m_aInvalidateClipboard.IsActive()) 1411*cdf0e10cSrcweir { 1412*cdf0e10cSrcweir m_aInvalidateClipboard.Stop(); 1413*cdf0e10cSrcweir OnInvalidateClipboard( NULL ); 1414*cdf0e10cSrcweir } 1415*cdf0e10cSrcweir // remove the "get cell focus"-event 1416*cdf0e10cSrcweir m_aAsyncGetCellFocus.CancelCall(); 1417*cdf0e10cSrcweir break; 1418*cdf0e10cSrcweir default: 1419*cdf0e10cSrcweir break; 1420*cdf0e10cSrcweir } 1421*cdf0e10cSrcweir } 1422*cdf0e10cSrcweir 1423*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1424*cdf0e10cSrcweir IMPL_LINK( SbaXDataBrowserController, OnAsyncDisplayError, void*, /* _pNotInterestedIn */ ) 1425*cdf0e10cSrcweir { 1426*cdf0e10cSrcweir if ( m_aCurrentError.isValid() ) 1427*cdf0e10cSrcweir { 1428*cdf0e10cSrcweir OSQLMessageBox aDlg( getBrowserView(), m_aCurrentError ); 1429*cdf0e10cSrcweir aDlg.Execute(); 1430*cdf0e10cSrcweir } 1431*cdf0e10cSrcweir return 0L; 1432*cdf0e10cSrcweir } 1433*cdf0e10cSrcweir 1434*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1435*cdf0e10cSrcweir void SbaXDataBrowserController::errorOccured(const ::com::sun::star::sdb::SQLErrorEvent& aEvent) throw( RuntimeException ) 1436*cdf0e10cSrcweir { 1437*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::errorOccured" ); 1438*cdf0e10cSrcweir ::osl::MutexGuard aGuard( getMutex() ); 1439*cdf0e10cSrcweir 1440*cdf0e10cSrcweir SQLExceptionInfo aInfo( aEvent.Reason ); 1441*cdf0e10cSrcweir if ( !aInfo.isValid() ) 1442*cdf0e10cSrcweir return; 1443*cdf0e10cSrcweir 1444*cdf0e10cSrcweir if ( m_nFormActionNestingLevel ) 1445*cdf0e10cSrcweir { 1446*cdf0e10cSrcweir OSL_ENSURE( !m_aCurrentError.isValid(), "SbaXDataBrowserController::errorOccured: can handle one error per transaction only!" ); 1447*cdf0e10cSrcweir m_aCurrentError = aInfo; 1448*cdf0e10cSrcweir } 1449*cdf0e10cSrcweir else 1450*cdf0e10cSrcweir { 1451*cdf0e10cSrcweir m_aCurrentError = aInfo; 1452*cdf0e10cSrcweir m_aAsyncDisplayError.Call(); 1453*cdf0e10cSrcweir } 1454*cdf0e10cSrcweir } 1455*cdf0e10cSrcweir 1456*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1457*cdf0e10cSrcweir sal_Bool SbaXDataBrowserController::approveParameter(const ::com::sun::star::form::DatabaseParameterEvent& aEvent) throw( RuntimeException ) 1458*cdf0e10cSrcweir { 1459*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::approveParameter" ); 1460*cdf0e10cSrcweir if (aEvent.Source != getRowSet()) 1461*cdf0e10cSrcweir { 1462*cdf0e10cSrcweir // not my data source -> allow anything 1463*cdf0e10cSrcweir DBG_ERROR("SbaXDataBrowserController::approveParameter : invalid event source !"); 1464*cdf0e10cSrcweir return sal_True; 1465*cdf0e10cSrcweir } 1466*cdf0e10cSrcweir 1467*cdf0e10cSrcweir Reference< ::com::sun::star::container::XIndexAccess > xParameters = aEvent.Parameters; 1468*cdf0e10cSrcweir ::vos::OGuard aSolarGuard(Application::GetSolarMutex()); 1469*cdf0e10cSrcweir // this may be executed in a non-main thread and we want to use vcl ... 1470*cdf0e10cSrcweir Window* pParent = Application::GetDefDialogParent(); 1471*cdf0e10cSrcweir // don't use the content as parent if it isn't visible 1472*cdf0e10cSrcweir // (and don't use NULL as parent : this may be displayed in the beamer and really shouldn't be task-local) 1473*cdf0e10cSrcweir // 69297 - FS - 25.10.99 1474*cdf0e10cSrcweir if (getBrowserView() && getBrowserView()->IsVisible()) 1475*cdf0e10cSrcweir pParent = getBrowserView(); 1476*cdf0e10cSrcweir 1477*cdf0e10cSrcweir // default handling: instantiate an interaction handler and let it handle the parameter request 1478*cdf0e10cSrcweir try 1479*cdf0e10cSrcweir { 1480*cdf0e10cSrcweir // two continuations allowed: OK and Cancel 1481*cdf0e10cSrcweir OParameterContinuation* pParamValues = new OParameterContinuation; 1482*cdf0e10cSrcweir OInteractionAbort* pAbort = new OInteractionAbort; 1483*cdf0e10cSrcweir // the request 1484*cdf0e10cSrcweir ParametersRequest aRequest; 1485*cdf0e10cSrcweir aRequest.Parameters = xParameters; 1486*cdf0e10cSrcweir aRequest.Connection = getConnection(Reference< XRowSet >(aEvent.Source, UNO_QUERY)); 1487*cdf0e10cSrcweir OInteractionRequest* pParamRequest = new OInteractionRequest(makeAny(aRequest)); 1488*cdf0e10cSrcweir Reference< XInteractionRequest > xParamRequest(pParamRequest); 1489*cdf0e10cSrcweir // some knittings 1490*cdf0e10cSrcweir pParamRequest->addContinuation(pParamValues); 1491*cdf0e10cSrcweir pParamRequest->addContinuation(pAbort); 1492*cdf0e10cSrcweir 1493*cdf0e10cSrcweir // create the handler, let it handle the request 1494*cdf0e10cSrcweir Reference< XInteractionHandler > xHandler(getORB()->createInstance(SERVICE_TASK_INTERACTION_HANDLER), UNO_QUERY); 1495*cdf0e10cSrcweir if (xHandler.is()) 1496*cdf0e10cSrcweir xHandler->handle(xParamRequest); 1497*cdf0e10cSrcweir 1498*cdf0e10cSrcweir if (!pParamValues->wasSelected()) 1499*cdf0e10cSrcweir { // canceled 1500*cdf0e10cSrcweir setLoadingCancelled(); 1501*cdf0e10cSrcweir return sal_False; 1502*cdf0e10cSrcweir } 1503*cdf0e10cSrcweir 1504*cdf0e10cSrcweir // transfer the values into the parameter supplier 1505*cdf0e10cSrcweir Sequence< PropertyValue > aFinalValues = pParamValues->getValues(); 1506*cdf0e10cSrcweir if (aFinalValues.getLength() != aRequest.Parameters->getCount()) 1507*cdf0e10cSrcweir { 1508*cdf0e10cSrcweir DBG_ERROR("SbaXDataBrowserController::approveParameter: the InteractionHandler returned nonsense!"); 1509*cdf0e10cSrcweir setLoadingCancelled(); 1510*cdf0e10cSrcweir return sal_False; 1511*cdf0e10cSrcweir } 1512*cdf0e10cSrcweir const PropertyValue* pFinalValues = aFinalValues.getConstArray(); 1513*cdf0e10cSrcweir for (sal_Int32 i=0; i<aFinalValues.getLength(); ++i, ++pFinalValues) 1514*cdf0e10cSrcweir { 1515*cdf0e10cSrcweir Reference< XPropertySet > xParam; 1516*cdf0e10cSrcweir ::cppu::extractInterface(xParam, aRequest.Parameters->getByIndex(i)); 1517*cdf0e10cSrcweir DBG_ASSERT(xParam.is(), "SbaXDataBrowserController::approveParameter: one of the parameters is no property set!"); 1518*cdf0e10cSrcweir if (xParam.is()) 1519*cdf0e10cSrcweir { 1520*cdf0e10cSrcweir #ifdef DBG_UTIL 1521*cdf0e10cSrcweir ::rtl::OUString sName; 1522*cdf0e10cSrcweir xParam->getPropertyValue(PROPERTY_NAME) >>= sName; 1523*cdf0e10cSrcweir DBG_ASSERT(sName.equals(pFinalValues->Name), "SbaXDataBrowserController::approveParameter: suspicious value names!"); 1524*cdf0e10cSrcweir #endif 1525*cdf0e10cSrcweir try { xParam->setPropertyValue(PROPERTY_VALUE, pFinalValues->Value); } 1526*cdf0e10cSrcweir catch(Exception&) 1527*cdf0e10cSrcweir { 1528*cdf0e10cSrcweir DBG_ERROR("SbaXDataBrowserController::approveParameter: setting one of the properties failed!"); 1529*cdf0e10cSrcweir } 1530*cdf0e10cSrcweir } 1531*cdf0e10cSrcweir } 1532*cdf0e10cSrcweir } 1533*cdf0e10cSrcweir catch( const Exception& ) 1534*cdf0e10cSrcweir { 1535*cdf0e10cSrcweir DBG_UNHANDLED_EXCEPTION(); 1536*cdf0e10cSrcweir } 1537*cdf0e10cSrcweir 1538*cdf0e10cSrcweir return sal_True; 1539*cdf0e10cSrcweir } 1540*cdf0e10cSrcweir 1541*cdf0e10cSrcweir 1542*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1543*cdf0e10cSrcweir sal_Bool SbaXDataBrowserController::approveReset(const ::com::sun::star::lang::EventObject& /*rEvent*/) throw( RuntimeException ) 1544*cdf0e10cSrcweir { 1545*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::approveReset" ); 1546*cdf0e10cSrcweir return sal_True; 1547*cdf0e10cSrcweir } 1548*cdf0e10cSrcweir 1549*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1550*cdf0e10cSrcweir void SbaXDataBrowserController::resetted(const ::com::sun::star::lang::EventObject& rEvent) throw( RuntimeException ) 1551*cdf0e10cSrcweir { 1552*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::resetted" ); 1553*cdf0e10cSrcweir DBG_ASSERT(rEvent.Source == getControlModel(), "SbaXDataBrowserController::resetted : where did this come from ?"); 1554*cdf0e10cSrcweir (void)rEvent; 1555*cdf0e10cSrcweir setCurrentModified( sal_False ); 1556*cdf0e10cSrcweir } 1557*cdf0e10cSrcweir 1558*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1559*cdf0e10cSrcweir sal_Bool SbaXDataBrowserController::confirmDelete(const ::com::sun::star::sdb::RowChangeEvent& /*aEvent*/) throw( RuntimeException ) 1560*cdf0e10cSrcweir { 1561*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::confirmDelete" ); 1562*cdf0e10cSrcweir if (QueryBox(getBrowserView(), ModuleRes(QUERY_BRW_DELETE_ROWS)).Execute() != RET_YES) 1563*cdf0e10cSrcweir return sal_False; 1564*cdf0e10cSrcweir 1565*cdf0e10cSrcweir return sal_True; 1566*cdf0e10cSrcweir } 1567*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1568*cdf0e10cSrcweir FeatureState SbaXDataBrowserController::GetState(sal_uInt16 nId) const 1569*cdf0e10cSrcweir { 1570*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::GetState" ); 1571*cdf0e10cSrcweir FeatureState aReturn; 1572*cdf0e10cSrcweir // (disabled automatically) 1573*cdf0e10cSrcweir 1574*cdf0e10cSrcweir try 1575*cdf0e10cSrcweir { 1576*cdf0e10cSrcweir // no chance without a view 1577*cdf0e10cSrcweir if (!getBrowserView() || !getBrowserView()->getVclControl()) 1578*cdf0e10cSrcweir return aReturn; 1579*cdf0e10cSrcweir 1580*cdf0e10cSrcweir switch (nId) 1581*cdf0e10cSrcweir { 1582*cdf0e10cSrcweir case ID_BROWSER_REMOVEFILTER: 1583*cdf0e10cSrcweir if (!m_xParser.is()) 1584*cdf0e10cSrcweir { 1585*cdf0e10cSrcweir aReturn.bEnabled = false; 1586*cdf0e10cSrcweir return aReturn; 1587*cdf0e10cSrcweir } 1588*cdf0e10cSrcweir // any filter or sort order set ? 1589*cdf0e10cSrcweir aReturn.bEnabled = m_xParser->getFilter().getLength() || m_xParser->getHavingClause().getLength() || m_xParser->getOrder().getLength(); 1590*cdf0e10cSrcweir return aReturn; 1591*cdf0e10cSrcweir } 1592*cdf0e10cSrcweir // no chance without valid models 1593*cdf0e10cSrcweir if (isValid() && !isValidCursor()) 1594*cdf0e10cSrcweir return aReturn; 1595*cdf0e10cSrcweir 1596*cdf0e10cSrcweir switch (nId) 1597*cdf0e10cSrcweir { 1598*cdf0e10cSrcweir case ID_BROWSER_SEARCH: 1599*cdf0e10cSrcweir { 1600*cdf0e10cSrcweir Reference< XPropertySet > xFormSet(getRowSet(), UNO_QUERY); 1601*cdf0e10cSrcweir sal_Int32 nCount = ::comphelper::getINT32(xFormSet->getPropertyValue(PROPERTY_ROWCOUNT)); 1602*cdf0e10cSrcweir aReturn.bEnabled = nCount != 0; 1603*cdf0e10cSrcweir } 1604*cdf0e10cSrcweir break; 1605*cdf0e10cSrcweir case ID_BROWSER_INSERT_ROW: 1606*cdf0e10cSrcweir { 1607*cdf0e10cSrcweir // check if it is available 1608*cdf0e10cSrcweir sal_Bool bInsertPrivilege = ( m_nRowSetPrivileges & Privilege::INSERT) != 0; 1609*cdf0e10cSrcweir sal_Bool bAllowInsertions = sal_True; 1610*cdf0e10cSrcweir try 1611*cdf0e10cSrcweir { 1612*cdf0e10cSrcweir Reference< XPropertySet > xRowSetProps( getRowSet(), UNO_QUERY_THROW ); 1613*cdf0e10cSrcweir OSL_VERIFY( xRowSetProps->getPropertyValue( ::rtl::OUString::createFromAscii( "AllowInserts" ) ) >>= bAllowInsertions ); 1614*cdf0e10cSrcweir } 1615*cdf0e10cSrcweir catch( const Exception& ) 1616*cdf0e10cSrcweir { 1617*cdf0e10cSrcweir DBG_UNHANDLED_EXCEPTION(); 1618*cdf0e10cSrcweir } 1619*cdf0e10cSrcweir aReturn.bEnabled = bInsertPrivilege && bAllowInsertions; 1620*cdf0e10cSrcweir } 1621*cdf0e10cSrcweir break; 1622*cdf0e10cSrcweir case SID_FM_DELETEROWS: 1623*cdf0e10cSrcweir { 1624*cdf0e10cSrcweir // check if it is available 1625*cdf0e10cSrcweir sal_Bool bDeletePrivilege = ( m_nRowSetPrivileges & Privilege::INSERT) != 0; 1626*cdf0e10cSrcweir sal_Bool bAllowDeletions = sal_True; 1627*cdf0e10cSrcweir sal_Int32 nRowCount = 0; 1628*cdf0e10cSrcweir sal_Bool bInsertionRow = sal_False; 1629*cdf0e10cSrcweir try 1630*cdf0e10cSrcweir { 1631*cdf0e10cSrcweir Reference< XPropertySet > xRowSetProps( getRowSet(), UNO_QUERY_THROW ); 1632*cdf0e10cSrcweir OSL_VERIFY( xRowSetProps->getPropertyValue( ::rtl::OUString::createFromAscii( "AllowDeletes" ) ) >>= bAllowDeletions ); 1633*cdf0e10cSrcweir OSL_VERIFY( xRowSetProps->getPropertyValue( PROPERTY_ROWCOUNT ) >>= nRowCount ); 1634*cdf0e10cSrcweir OSL_VERIFY( xRowSetProps->getPropertyValue( PROPERTY_ISNEW ) >>= bInsertionRow ); 1635*cdf0e10cSrcweir } 1636*cdf0e10cSrcweir catch( const Exception& ) 1637*cdf0e10cSrcweir { 1638*cdf0e10cSrcweir DBG_UNHANDLED_EXCEPTION(); 1639*cdf0e10cSrcweir } 1640*cdf0e10cSrcweir aReturn.bEnabled = bDeletePrivilege && bAllowDeletions && ( nRowCount != 0 ) && !bInsertionRow; 1641*cdf0e10cSrcweir } 1642*cdf0e10cSrcweir break; 1643*cdf0e10cSrcweir 1644*cdf0e10cSrcweir case ID_BROWSER_COPY: 1645*cdf0e10cSrcweir if ( getBrowserView()->getVclControl()->GetSelectRowCount() ) 1646*cdf0e10cSrcweir { 1647*cdf0e10cSrcweir aReturn.bEnabled = m_aCurrentFrame.isActive(); 1648*cdf0e10cSrcweir break; 1649*cdf0e10cSrcweir } 1650*cdf0e10cSrcweir // run through 1651*cdf0e10cSrcweir case ID_BROWSER_PASTE: 1652*cdf0e10cSrcweir case ID_BROWSER_CUT: 1653*cdf0e10cSrcweir { 1654*cdf0e10cSrcweir CellControllerRef xCurrentController = getBrowserView()->getVclControl()->Controller(); 1655*cdf0e10cSrcweir if (xCurrentController.Is() && xCurrentController->ISA(EditCellController)) 1656*cdf0e10cSrcweir { 1657*cdf0e10cSrcweir Edit& rEdit = (Edit&)xCurrentController->GetWindow(); 1658*cdf0e10cSrcweir sal_Bool bHasLen = (rEdit.GetSelection().Len() != 0); 1659*cdf0e10cSrcweir sal_Bool bIsReadOnly = rEdit.IsReadOnly(); 1660*cdf0e10cSrcweir switch (nId) 1661*cdf0e10cSrcweir { 1662*cdf0e10cSrcweir case ID_BROWSER_CUT: aReturn.bEnabled = m_aCurrentFrame.isActive() && bHasLen && !bIsReadOnly; break; 1663*cdf0e10cSrcweir case SID_COPY : aReturn.bEnabled = m_aCurrentFrame.isActive() && bHasLen; break; 1664*cdf0e10cSrcweir case ID_BROWSER_PASTE: 1665*cdf0e10cSrcweir aReturn.bEnabled = m_aCurrentFrame.isActive() && !bIsReadOnly; 1666*cdf0e10cSrcweir if(aReturn.bEnabled) 1667*cdf0e10cSrcweir { 1668*cdf0e10cSrcweir aReturn.bEnabled = aReturn.bEnabled && IsFormatSupported( m_aSystemClipboard.GetDataFlavorExVector(), FORMAT_STRING ); 1669*cdf0e10cSrcweir } 1670*cdf0e10cSrcweir break; 1671*cdf0e10cSrcweir } 1672*cdf0e10cSrcweir } 1673*cdf0e10cSrcweir } 1674*cdf0e10cSrcweir break; 1675*cdf0e10cSrcweir 1676*cdf0e10cSrcweir case ID_BROWSER_SORTUP: 1677*cdf0e10cSrcweir case ID_BROWSER_SORTDOWN: 1678*cdf0e10cSrcweir case ID_BROWSER_AUTOFILTER: 1679*cdf0e10cSrcweir { 1680*cdf0e10cSrcweir // a native statement can't be filtered or sorted 1681*cdf0e10cSrcweir const Reference< XPropertySet > xFormSet(getRowSet(), UNO_QUERY); 1682*cdf0e10cSrcweir if ( !::comphelper::getBOOL(xFormSet->getPropertyValue(PROPERTY_ESCAPE_PROCESSING)) || !m_xParser.is() ) 1683*cdf0e10cSrcweir break; 1684*cdf0e10cSrcweir 1685*cdf0e10cSrcweir Reference< XPropertySet > xCurrentField = getBoundField(); 1686*cdf0e10cSrcweir if (!xCurrentField.is()) 1687*cdf0e10cSrcweir break; 1688*cdf0e10cSrcweir 1689*cdf0e10cSrcweir aReturn.bEnabled = ::comphelper::getBOOL(xCurrentField->getPropertyValue(PROPERTY_ISSEARCHABLE)); 1690*cdf0e10cSrcweir const Reference< XRowSet > xRow = getRowSet(); 1691*cdf0e10cSrcweir aReturn.bEnabled = aReturn.bEnabled 1692*cdf0e10cSrcweir && xRow.is() 1693*cdf0e10cSrcweir && !xRow->isBeforeFirst() 1694*cdf0e10cSrcweir && !xRow->isAfterLast() 1695*cdf0e10cSrcweir && !xRow->rowDeleted() 1696*cdf0e10cSrcweir && ( ::comphelper::getINT32( xFormSet->getPropertyValue( PROPERTY_ROWCOUNT ) ) != 0 ); 1697*cdf0e10cSrcweir } 1698*cdf0e10cSrcweir break; 1699*cdf0e10cSrcweir 1700*cdf0e10cSrcweir case ID_BROWSER_FILTERCRIT: 1701*cdf0e10cSrcweir if ( m_bCannotSelectUnfiltered && m_xParser.is() ) 1702*cdf0e10cSrcweir { 1703*cdf0e10cSrcweir aReturn.bEnabled = sal_True; 1704*cdf0e10cSrcweir break; 1705*cdf0e10cSrcweir } 1706*cdf0e10cSrcweir // no break 1707*cdf0e10cSrcweir case ID_BROWSER_ORDERCRIT: 1708*cdf0e10cSrcweir { 1709*cdf0e10cSrcweir const Reference< XPropertySet > xFormSet(getRowSet(), UNO_QUERY); 1710*cdf0e10cSrcweir if ( !::comphelper::getBOOL(xFormSet->getPropertyValue(PROPERTY_ESCAPE_PROCESSING)) || !m_xParser.is() ) 1711*cdf0e10cSrcweir break; 1712*cdf0e10cSrcweir 1713*cdf0e10cSrcweir aReturn.bEnabled = getRowSet().is() 1714*cdf0e10cSrcweir && ( ::comphelper::getINT32( xFormSet->getPropertyValue( PROPERTY_ROWCOUNT ) ) != 0 ); 1715*cdf0e10cSrcweir } 1716*cdf0e10cSrcweir break; 1717*cdf0e10cSrcweir 1718*cdf0e10cSrcweir case ID_BROWSER_REFRESH: 1719*cdf0e10cSrcweir aReturn.bEnabled = sal_True; 1720*cdf0e10cSrcweir break; 1721*cdf0e10cSrcweir 1722*cdf0e10cSrcweir case ID_BROWSER_REDO: 1723*cdf0e10cSrcweir aReturn.bEnabled = sal_False; // simply forget it ;). no redo possible. 1724*cdf0e10cSrcweir break; 1725*cdf0e10cSrcweir 1726*cdf0e10cSrcweir case ID_BROWSER_UNDORECORD: 1727*cdf0e10cSrcweir case ID_BROWSER_SAVERECORD: 1728*cdf0e10cSrcweir { 1729*cdf0e10cSrcweir if (!m_bCurrentlyModified) 1730*cdf0e10cSrcweir { 1731*cdf0e10cSrcweir Reference< XPropertySet > xFormSet(getRowSet(), UNO_QUERY); 1732*cdf0e10cSrcweir if (xFormSet.is()) 1733*cdf0e10cSrcweir aReturn.bEnabled = ::comphelper::getBOOL(xFormSet->getPropertyValue(PROPERTY_ISMODIFIED)); 1734*cdf0e10cSrcweir } 1735*cdf0e10cSrcweir else 1736*cdf0e10cSrcweir aReturn.bEnabled = sal_True; 1737*cdf0e10cSrcweir 1738*cdf0e10cSrcweir aReturn.sTitle = (ID_BROWSER_UNDORECORD == nId) ? m_sStateUndoRecord : m_sStateSaveRecord; 1739*cdf0e10cSrcweir } 1740*cdf0e10cSrcweir break; 1741*cdf0e10cSrcweir case ID_BROWSER_EDITDOC: 1742*cdf0e10cSrcweir { 1743*cdf0e10cSrcweir // check if it is available 1744*cdf0e10cSrcweir Reference< XPropertySet > xDataSourceSet(getRowSet(), UNO_QUERY); 1745*cdf0e10cSrcweir if (!xDataSourceSet.is()) 1746*cdf0e10cSrcweir break; // no datasource -> no edit mode 1747*cdf0e10cSrcweir 1748*cdf0e10cSrcweir sal_Int32 nDataSourcePrivileges = ::comphelper::getINT32(xDataSourceSet->getPropertyValue(PROPERTY_PRIVILEGES)); 1749*cdf0e10cSrcweir sal_Bool bInsertAllowedAndPossible = ((nDataSourcePrivileges & ::com::sun::star::sdbcx::Privilege::INSERT) != 0) && ::comphelper::getBOOL(xDataSourceSet->getPropertyValue(::rtl::OUString::createFromAscii("AllowInserts"))); 1750*cdf0e10cSrcweir sal_Bool bUpdateAllowedAndPossible = ((nDataSourcePrivileges & ::com::sun::star::sdbcx::Privilege::UPDATE) != 0) && ::comphelper::getBOOL(xDataSourceSet->getPropertyValue(::rtl::OUString::createFromAscii("AllowUpdates"))); 1751*cdf0e10cSrcweir sal_Bool bDeleteAllowedAndPossible = ((nDataSourcePrivileges & ::com::sun::star::sdbcx::Privilege::DELETE) != 0) && ::comphelper::getBOOL(xDataSourceSet->getPropertyValue(::rtl::OUString::createFromAscii("AllowDeletes"))); 1752*cdf0e10cSrcweir if (!bInsertAllowedAndPossible && !bUpdateAllowedAndPossible && !bDeleteAllowedAndPossible) 1753*cdf0e10cSrcweir break; // no insert/update/delete -> no edit mode 1754*cdf0e10cSrcweir 1755*cdf0e10cSrcweir if (!isValidCursor() || !isLoaded()) 1756*cdf0e10cSrcweir break; // no cursor -> no edit mode 1757*cdf0e10cSrcweir 1758*cdf0e10cSrcweir aReturn.bEnabled = sal_True; 1759*cdf0e10cSrcweir 1760*cdf0e10cSrcweir sal_Int16 nGridMode = getBrowserView()->getVclControl()->GetOptions(); 1761*cdf0e10cSrcweir aReturn.bChecked = nGridMode > DbGridControl::OPT_READONLY; 1762*cdf0e10cSrcweir } 1763*cdf0e10cSrcweir break; 1764*cdf0e10cSrcweir case ID_BROWSER_FILTERED: 1765*cdf0e10cSrcweir { 1766*cdf0e10cSrcweir aReturn.bEnabled = sal_False; 1767*cdf0e10cSrcweir Reference< XPropertySet > xActiveSet(getRowSet(), UNO_QUERY); 1768*cdf0e10cSrcweir ::rtl::OUString aFilter = ::comphelper::getString(xActiveSet->getPropertyValue(PROPERTY_FILTER)); 1769*cdf0e10cSrcweir ::rtl::OUString aHaving = ::comphelper::getString(xActiveSet->getPropertyValue(PROPERTY_HAVING_CLAUSE)); 1770*cdf0e10cSrcweir if ( aFilter.getLength() || aHaving.getLength() ) 1771*cdf0e10cSrcweir { 1772*cdf0e10cSrcweir xActiveSet->getPropertyValue( PROPERTY_APPLYFILTER ) >>= aReturn.bChecked; 1773*cdf0e10cSrcweir aReturn.bEnabled = sal_True; 1774*cdf0e10cSrcweir } 1775*cdf0e10cSrcweir else 1776*cdf0e10cSrcweir { 1777*cdf0e10cSrcweir aReturn.bChecked = sal_False; 1778*cdf0e10cSrcweir aReturn.bEnabled = sal_False; 1779*cdf0e10cSrcweir } 1780*cdf0e10cSrcweir } 1781*cdf0e10cSrcweir break; 1782*cdf0e10cSrcweir default: 1783*cdf0e10cSrcweir return SbaXDataBrowserController_Base::GetState(nId); 1784*cdf0e10cSrcweir } 1785*cdf0e10cSrcweir } 1786*cdf0e10cSrcweir catch(const Exception& ) 1787*cdf0e10cSrcweir { 1788*cdf0e10cSrcweir DBG_UNHANDLED_EXCEPTION(); 1789*cdf0e10cSrcweir } 1790*cdf0e10cSrcweir 1791*cdf0e10cSrcweir return aReturn; 1792*cdf0e10cSrcweir } 1793*cdf0e10cSrcweir 1794*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1795*cdf0e10cSrcweir void SbaXDataBrowserController::applyParserOrder(const ::rtl::OUString& _rOldOrder,const Reference< XSingleSelectQueryComposer >& _xParser) 1796*cdf0e10cSrcweir { 1797*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::applyParserOrder" ); 1798*cdf0e10cSrcweir Reference< XPropertySet > xFormSet(getRowSet(), UNO_QUERY); 1799*cdf0e10cSrcweir if (!m_xLoadable.is()) 1800*cdf0e10cSrcweir { 1801*cdf0e10cSrcweir OSL_ENSURE(sal_False, "SbaXDataBrowserController::applyParserOrder: invalid row set!"); 1802*cdf0e10cSrcweir return; 1803*cdf0e10cSrcweir } 1804*cdf0e10cSrcweir 1805*cdf0e10cSrcweir sal_uInt16 nPos = getCurrentColumnPosition(); 1806*cdf0e10cSrcweir sal_Bool bSuccess = sal_False; 1807*cdf0e10cSrcweir try 1808*cdf0e10cSrcweir { 1809*cdf0e10cSrcweir xFormSet->setPropertyValue(PROPERTY_ORDER, makeAny(_xParser->getOrder())); 1810*cdf0e10cSrcweir bSuccess = reloadForm(m_xLoadable); 1811*cdf0e10cSrcweir } 1812*cdf0e10cSrcweir catch(Exception&) 1813*cdf0e10cSrcweir { 1814*cdf0e10cSrcweir } 1815*cdf0e10cSrcweir 1816*cdf0e10cSrcweir if (!bSuccess) 1817*cdf0e10cSrcweir { 1818*cdf0e10cSrcweir xFormSet->setPropertyValue(PROPERTY_ORDER, makeAny(_rOldOrder)); 1819*cdf0e10cSrcweir //DO_SAFE( _xParser->setOrder(_rOldOrder), "SbaXDataBrowserController::applyParserOrder: could not restore the old order of my parser !" ); 1820*cdf0e10cSrcweir 1821*cdf0e10cSrcweir try 1822*cdf0e10cSrcweir { 1823*cdf0e10cSrcweir if (loadingCancelled() || !reloadForm(m_xLoadable)) 1824*cdf0e10cSrcweir criticalFail(); 1825*cdf0e10cSrcweir } 1826*cdf0e10cSrcweir catch(Exception&) 1827*cdf0e10cSrcweir { 1828*cdf0e10cSrcweir criticalFail(); 1829*cdf0e10cSrcweir } 1830*cdf0e10cSrcweir InvalidateAll(); 1831*cdf0e10cSrcweir } 1832*cdf0e10cSrcweir InvalidateFeature(ID_BROWSER_REMOVEFILTER); 1833*cdf0e10cSrcweir 1834*cdf0e10cSrcweir setCurrentColumnPosition(nPos); 1835*cdf0e10cSrcweir } 1836*cdf0e10cSrcweir 1837*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1838*cdf0e10cSrcweir void SbaXDataBrowserController::applyParserFilter(const ::rtl::OUString& _rOldFilter, sal_Bool _bOldFilterApplied,const ::rtl::OUString& _sOldHaving,const Reference< XSingleSelectQueryComposer >& _xParser) 1839*cdf0e10cSrcweir { 1840*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::applyParserFilter" ); 1841*cdf0e10cSrcweir Reference< XPropertySet > xFormSet(getRowSet(), UNO_QUERY); 1842*cdf0e10cSrcweir if (!m_xLoadable.is()) 1843*cdf0e10cSrcweir { 1844*cdf0e10cSrcweir OSL_ENSURE(sal_False, "SbaXDataBrowserController::applyParserFilter: invalid row set!"); 1845*cdf0e10cSrcweir return; 1846*cdf0e10cSrcweir } 1847*cdf0e10cSrcweir 1848*cdf0e10cSrcweir sal_uInt16 nPos = getCurrentColumnPosition(); 1849*cdf0e10cSrcweir 1850*cdf0e10cSrcweir sal_Bool bSuccess = sal_False; 1851*cdf0e10cSrcweir try 1852*cdf0e10cSrcweir { 1853*cdf0e10cSrcweir FormErrorHelper aError(this); 1854*cdf0e10cSrcweir xFormSet->setPropertyValue(PROPERTY_FILTER, makeAny(_xParser->getFilter())); 1855*cdf0e10cSrcweir xFormSet->setPropertyValue(PROPERTY_HAVING_CLAUSE, makeAny(_xParser->getHavingClause())); 1856*cdf0e10cSrcweir xFormSet->setPropertyValue(PROPERTY_APPLYFILTER, ::comphelper::makeBoolAny(sal_Bool(sal_True))); 1857*cdf0e10cSrcweir 1858*cdf0e10cSrcweir bSuccess = reloadForm(m_xLoadable); 1859*cdf0e10cSrcweir } 1860*cdf0e10cSrcweir catch(Exception&) 1861*cdf0e10cSrcweir { 1862*cdf0e10cSrcweir } 1863*cdf0e10cSrcweir 1864*cdf0e10cSrcweir if (!bSuccess) 1865*cdf0e10cSrcweir { 1866*cdf0e10cSrcweir xFormSet->setPropertyValue(PROPERTY_FILTER, makeAny(_rOldFilter)); 1867*cdf0e10cSrcweir xFormSet->setPropertyValue(PROPERTY_HAVING_CLAUSE, makeAny(_sOldHaving)); 1868*cdf0e10cSrcweir xFormSet->setPropertyValue(PROPERTY_APPLYFILTER, ::comphelper::makeBoolAny(_bOldFilterApplied)); 1869*cdf0e10cSrcweir 1870*cdf0e10cSrcweir try 1871*cdf0e10cSrcweir { 1872*cdf0e10cSrcweir if (loadingCancelled() || !reloadForm(m_xLoadable)) 1873*cdf0e10cSrcweir criticalFail(); 1874*cdf0e10cSrcweir } 1875*cdf0e10cSrcweir catch(Exception&) 1876*cdf0e10cSrcweir { 1877*cdf0e10cSrcweir criticalFail(); 1878*cdf0e10cSrcweir } 1879*cdf0e10cSrcweir InvalidateAll(); 1880*cdf0e10cSrcweir } 1881*cdf0e10cSrcweir InvalidateFeature(ID_BROWSER_REMOVEFILTER); 1882*cdf0e10cSrcweir 1883*cdf0e10cSrcweir setCurrentColumnPosition(nPos); 1884*cdf0e10cSrcweir } 1885*cdf0e10cSrcweir 1886*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1887*cdf0e10cSrcweir Reference< XSingleSelectQueryComposer > SbaXDataBrowserController::createParser_nothrow() 1888*cdf0e10cSrcweir { 1889*cdf0e10cSrcweir Reference< XSingleSelectQueryComposer > xComposer; 1890*cdf0e10cSrcweir try 1891*cdf0e10cSrcweir { 1892*cdf0e10cSrcweir const Reference< XPropertySet > xRowSetProps( getRowSet(), UNO_QUERY_THROW ); 1893*cdf0e10cSrcweir const Reference< XMultiServiceFactory > xFactory( 1894*cdf0e10cSrcweir xRowSetProps->getPropertyValue( PROPERTY_ACTIVE_CONNECTION ), UNO_QUERY_THROW ); 1895*cdf0e10cSrcweir xComposer.set( xFactory->createInstance( SERVICE_NAME_SINGLESELECTQUERYCOMPOSER ), UNO_QUERY_THROW ); 1896*cdf0e10cSrcweir 1897*cdf0e10cSrcweir ::rtl::OUString sActiveCommand; 1898*cdf0e10cSrcweir OSL_VERIFY( xRowSetProps->getPropertyValue( PROPERTY_ACTIVECOMMAND ) >>= sActiveCommand ); 1899*cdf0e10cSrcweir if ( sActiveCommand.getLength() > 0 ) 1900*cdf0e10cSrcweir { 1901*cdf0e10cSrcweir xComposer->setElementaryQuery( sActiveCommand ); 1902*cdf0e10cSrcweir } 1903*cdf0e10cSrcweir else 1904*cdf0e10cSrcweir { 1905*cdf0e10cSrcweir ::rtl::OUString sCommand; 1906*cdf0e10cSrcweir OSL_VERIFY( xRowSetProps->getPropertyValue( PROPERTY_COMMAND ) >>= sCommand ); 1907*cdf0e10cSrcweir sal_Int32 nCommandType = CommandType::COMMAND; 1908*cdf0e10cSrcweir OSL_VERIFY( xRowSetProps->getPropertyValue( PROPERTY_COMMAND_TYPE ) >>= nCommandType ); 1909*cdf0e10cSrcweir xComposer->setCommand( sCommand, nCommandType ); 1910*cdf0e10cSrcweir } 1911*cdf0e10cSrcweir 1912*cdf0e10cSrcweir ::rtl::OUString sFilter; 1913*cdf0e10cSrcweir OSL_VERIFY( xRowSetProps->getPropertyValue( PROPERTY_FILTER ) >>= sFilter ); 1914*cdf0e10cSrcweir xComposer->setFilter( sFilter ); 1915*cdf0e10cSrcweir 1916*cdf0e10cSrcweir ::rtl::OUString sHavingClause; 1917*cdf0e10cSrcweir OSL_VERIFY( xRowSetProps->getPropertyValue( PROPERTY_HAVING_CLAUSE ) >>= sHavingClause ); 1918*cdf0e10cSrcweir xComposer->setHavingClause( sHavingClause ); 1919*cdf0e10cSrcweir 1920*cdf0e10cSrcweir ::rtl::OUString sOrder; 1921*cdf0e10cSrcweir OSL_VERIFY( xRowSetProps->getPropertyValue( PROPERTY_ORDER ) >>= sOrder ); 1922*cdf0e10cSrcweir xComposer->setOrder( sOrder ); 1923*cdf0e10cSrcweir } 1924*cdf0e10cSrcweir catch ( const Exception& ) 1925*cdf0e10cSrcweir { 1926*cdf0e10cSrcweir DBG_UNHANDLED_EXCEPTION(); 1927*cdf0e10cSrcweir } 1928*cdf0e10cSrcweir return xComposer; 1929*cdf0e10cSrcweir } 1930*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1931*cdf0e10cSrcweir void SbaXDataBrowserController::ExecuteFilterSortCrit(sal_Bool bFilter) 1932*cdf0e10cSrcweir { 1933*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::ExecuteFilterSortCrit" ); 1934*cdf0e10cSrcweir if (!SaveModified()) 1935*cdf0e10cSrcweir return; 1936*cdf0e10cSrcweir 1937*cdf0e10cSrcweir Reference< XPropertySet > xFormSet(getRowSet(), UNO_QUERY); 1938*cdf0e10cSrcweir 1939*cdf0e10cSrcweir const ::rtl::OUString sOldVal = bFilter ? m_xParser->getFilter() : m_xParser->getOrder(); 1940*cdf0e10cSrcweir const ::rtl::OUString sOldHaving = m_xParser->getHavingClause(); 1941*cdf0e10cSrcweir Reference< XSingleSelectQueryComposer > xParser = createParser_nothrow(); 1942*cdf0e10cSrcweir try 1943*cdf0e10cSrcweir { 1944*cdf0e10cSrcweir Reference< ::com::sun::star::sdbcx::XColumnsSupplier> xSup = getColumnsSupplier(); 1945*cdf0e10cSrcweir Reference< XConnection> xCon(xFormSet->getPropertyValue(PROPERTY_ACTIVE_CONNECTION),UNO_QUERY); 1946*cdf0e10cSrcweir if(bFilter) 1947*cdf0e10cSrcweir { 1948*cdf0e10cSrcweir DlgFilterCrit aDlg( getBrowserView(), getORB(), xCon, xParser, xSup->getColumns() ); 1949*cdf0e10cSrcweir String aFilter; 1950*cdf0e10cSrcweir if ( !aDlg.Execute() ) 1951*cdf0e10cSrcweir return; // if so we don't need to update the grid 1952*cdf0e10cSrcweir aDlg.BuildWherePart(); 1953*cdf0e10cSrcweir } 1954*cdf0e10cSrcweir else 1955*cdf0e10cSrcweir { 1956*cdf0e10cSrcweir DlgOrderCrit aDlg( getBrowserView(),xCon,xParser,xSup->getColumns() ); 1957*cdf0e10cSrcweir String aOrder; 1958*cdf0e10cSrcweir if(!aDlg.Execute()) 1959*cdf0e10cSrcweir { 1960*cdf0e10cSrcweir return; // if so we don't need to actualize the grid 1961*cdf0e10cSrcweir } 1962*cdf0e10cSrcweir aDlg.BuildOrderPart(); 1963*cdf0e10cSrcweir } 1964*cdf0e10cSrcweir } 1965*cdf0e10cSrcweir catch(const SQLException& ) 1966*cdf0e10cSrcweir { 1967*cdf0e10cSrcweir SQLExceptionInfo aError( ::cppu::getCaughtException() ); 1968*cdf0e10cSrcweir showError( aError ); 1969*cdf0e10cSrcweir return; 1970*cdf0e10cSrcweir } 1971*cdf0e10cSrcweir catch(Exception&) 1972*cdf0e10cSrcweir { 1973*cdf0e10cSrcweir return; 1974*cdf0e10cSrcweir } 1975*cdf0e10cSrcweir 1976*cdf0e10cSrcweir ::rtl::OUString sNewVal = bFilter ? xParser->getFilter() : xParser->getOrder(); 1977*cdf0e10cSrcweir sal_Bool bOldFilterApplied(sal_False); 1978*cdf0e10cSrcweir if (bFilter) 1979*cdf0e10cSrcweir { 1980*cdf0e10cSrcweir try { bOldFilterApplied = ::comphelper::getBOOL(xFormSet->getPropertyValue(PROPERTY_APPLYFILTER)); } catch(Exception&) { } ; 1981*cdf0e10cSrcweir } 1982*cdf0e10cSrcweir 1983*cdf0e10cSrcweir ::rtl::OUString sNewHaving = xParser->getHavingClause(); 1984*cdf0e10cSrcweir if ( sOldVal.equals(sNewVal) && (!bFilter || sOldHaving.equals(sNewHaving)) ) 1985*cdf0e10cSrcweir // nothing to be done 1986*cdf0e10cSrcweir return; 1987*cdf0e10cSrcweir 1988*cdf0e10cSrcweir if (bFilter) 1989*cdf0e10cSrcweir applyParserFilter(sOldVal, bOldFilterApplied,sOldHaving,xParser); 1990*cdf0e10cSrcweir else 1991*cdf0e10cSrcweir applyParserOrder(sOldVal,xParser); 1992*cdf0e10cSrcweir 1993*cdf0e10cSrcweir ::comphelper::disposeComponent(xParser); 1994*cdf0e10cSrcweir } 1995*cdf0e10cSrcweir 1996*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1997*cdf0e10cSrcweir void SbaXDataBrowserController::ExecuteSearch() 1998*cdf0e10cSrcweir { 1999*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::ExecuteSearch" ); 2000*cdf0e10cSrcweir // calculate the control source of the active field 2001*cdf0e10cSrcweir Reference< ::com::sun::star::form::XGrid > xGrid(getBrowserView()->getGridControl(), UNO_QUERY); 2002*cdf0e10cSrcweir DBG_ASSERT(xGrid.is(), "SbaXDataBrowserController::ExecuteSearch : the control should have an ::com::sun::star::form::XGrid interface !"); 2003*cdf0e10cSrcweir 2004*cdf0e10cSrcweir Reference< ::com::sun::star::form::XGridPeer > xGridPeer(getBrowserView()->getGridControl()->getPeer(), UNO_QUERY); 2005*cdf0e10cSrcweir Reference< ::com::sun::star::container::XIndexContainer > xColumns = xGridPeer->getColumns(); 2006*cdf0e10cSrcweir DBG_ASSERT(xGridPeer.is() && xColumns.is(), "SbaXDataBrowserController::ExecuteSearch : invalid peer !"); 2007*cdf0e10cSrcweir 2008*cdf0e10cSrcweir sal_Int16 nViewCol = xGrid->getCurrentColumnPosition(); 2009*cdf0e10cSrcweir sal_Int16 nModelCol = getBrowserView()->View2ModelPos(nViewCol); 2010*cdf0e10cSrcweir 2011*cdf0e10cSrcweir Reference< XPropertySet > xCurrentCol(xColumns->getByIndex(nModelCol),UNO_QUERY); 2012*cdf0e10cSrcweir String sActiveField = ::comphelper::getString(xCurrentCol->getPropertyValue(PROPERTY_CONTROLSOURCE)); 2013*cdf0e10cSrcweir 2014*cdf0e10cSrcweir // the text within the current cell 2015*cdf0e10cSrcweir String sInitialText; 2016*cdf0e10cSrcweir Reference< ::com::sun::star::container::XIndexAccess > xColControls(xGridPeer, UNO_QUERY); 2017*cdf0e10cSrcweir Reference< XInterface > xCurControl(xColControls->getByIndex(nViewCol),UNO_QUERY); 2018*cdf0e10cSrcweir ::rtl::OUString aInitialText; 2019*cdf0e10cSrcweir if (IsSearchableControl(xCurControl, &aInitialText)) 2020*cdf0e10cSrcweir sInitialText = (const sal_Unicode*)aInitialText; 2021*cdf0e10cSrcweir 2022*cdf0e10cSrcweir // prohibit the synchronization of the grid's display with the cursor's position 2023*cdf0e10cSrcweir Reference< XPropertySet > xModelSet(getControlModel(), UNO_QUERY); 2024*cdf0e10cSrcweir DBG_ASSERT(xModelSet.is(), "SbaXDataBrowserController::ExecuteSearch : no model set ?!"); 2025*cdf0e10cSrcweir xModelSet->setPropertyValue(::rtl::OUString::createFromAscii("DisplayIsSynchron"), ::comphelper::makeBoolAny(sal_Bool(sal_False))); 2026*cdf0e10cSrcweir xModelSet->setPropertyValue(::rtl::OUString::createFromAscii("AlwaysShowCursor"), ::comphelper::makeBoolAny(sal_Bool(sal_True))); 2027*cdf0e10cSrcweir xModelSet->setPropertyValue(::rtl::OUString::createFromAscii("CursorColor"), makeAny(sal_Int32(COL_LIGHTRED))); 2028*cdf0e10cSrcweir 2029*cdf0e10cSrcweir Reference< ::com::sun::star::util::XNumberFormatsSupplier > xNFS(::dbtools::getNumberFormats(::dbtools::getConnection(m_xRowSet), sal_True,getORB())); 2030*cdf0e10cSrcweir 2031*cdf0e10cSrcweir SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); 2032*cdf0e10cSrcweir AbstractFmSearchDialog* pDialog = NULL; 2033*cdf0e10cSrcweir if ( pFact ) 2034*cdf0e10cSrcweir { 2035*cdf0e10cSrcweir ::std::vector< String > aContextNames; 2036*cdf0e10cSrcweir aContextNames.push_back( String::CreateFromAscii("Standard") ); 2037*cdf0e10cSrcweir pDialog = pFact->CreateFmSearchDialog(getBrowserView(), sInitialText, aContextNames, 0, LINK(this, SbaXDataBrowserController, OnSearchContextRequest)); 2038*cdf0e10cSrcweir } 2039*cdf0e10cSrcweir DBG_ASSERT( pDialog, "SbaXDataBrowserController::ExecuteSearch: could not get the search dialog!" ); 2040*cdf0e10cSrcweir if ( pDialog ) 2041*cdf0e10cSrcweir { 2042*cdf0e10cSrcweir pDialog->SetActiveField( sActiveField ); 2043*cdf0e10cSrcweir pDialog->SetFoundHandler( LINK( this, SbaXDataBrowserController, OnFoundData ) ); 2044*cdf0e10cSrcweir pDialog->SetCanceledNotFoundHdl( LINK( this, SbaXDataBrowserController, OnCanceledNotFound ) ); 2045*cdf0e10cSrcweir pDialog->Execute(); 2046*cdf0e10cSrcweir delete pDialog; 2047*cdf0e10cSrcweir } 2048*cdf0e10cSrcweir 2049*cdf0e10cSrcweir // restore the grid's normal operating state 2050*cdf0e10cSrcweir xModelSet->setPropertyValue(::rtl::OUString::createFromAscii("DisplayIsSynchron"), ::comphelper::makeBoolAny(sal_Bool(sal_True))); 2051*cdf0e10cSrcweir xModelSet->setPropertyValue(::rtl::OUString::createFromAscii("AlwaysShowCursor"), ::comphelper::makeBoolAny(sal_Bool(sal_False))); 2052*cdf0e10cSrcweir xModelSet->setPropertyValue(::rtl::OUString::createFromAscii("CursorColor"), Any()); 2053*cdf0e10cSrcweir } 2054*cdf0e10cSrcweir 2055*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2056*cdf0e10cSrcweir void SbaXDataBrowserController::Execute(sal_uInt16 nId, const Sequence< PropertyValue >& _rArgs) 2057*cdf0e10cSrcweir { 2058*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::Execute" ); 2059*cdf0e10cSrcweir sal_Bool bSortUp = sal_True; 2060*cdf0e10cSrcweir 2061*cdf0e10cSrcweir switch (nId) 2062*cdf0e10cSrcweir { 2063*cdf0e10cSrcweir default: 2064*cdf0e10cSrcweir SbaXDataBrowserController_Base::Execute( nId, _rArgs ); 2065*cdf0e10cSrcweir return; 2066*cdf0e10cSrcweir 2067*cdf0e10cSrcweir case ID_BROWSER_INSERT_ROW: 2068*cdf0e10cSrcweir try 2069*cdf0e10cSrcweir { 2070*cdf0e10cSrcweir if (SaveModified()) 2071*cdf0e10cSrcweir { 2072*cdf0e10cSrcweir getRowSet()->afterLast(); 2073*cdf0e10cSrcweir // check if it is available 2074*cdf0e10cSrcweir Reference< XResultSetUpdate > xUpdateCursor(getRowSet(), UNO_QUERY_THROW); 2075*cdf0e10cSrcweir xUpdateCursor->moveToInsertRow(); 2076*cdf0e10cSrcweir } 2077*cdf0e10cSrcweir } 2078*cdf0e10cSrcweir catch(Exception&) 2079*cdf0e10cSrcweir { 2080*cdf0e10cSrcweir OSL_ENSURE(0,"Exception caught!"); 2081*cdf0e10cSrcweir } 2082*cdf0e10cSrcweir break; 2083*cdf0e10cSrcweir case SID_FM_DELETEROWS: 2084*cdf0e10cSrcweir 2085*cdf0e10cSrcweir if (SaveModified()) 2086*cdf0e10cSrcweir { 2087*cdf0e10cSrcweir SbaGridControl* pVclGrid = getBrowserView()->getVclControl(); 2088*cdf0e10cSrcweir if ( pVclGrid ) 2089*cdf0e10cSrcweir { 2090*cdf0e10cSrcweir if( !pVclGrid->GetSelectRowCount() ) 2091*cdf0e10cSrcweir { 2092*cdf0e10cSrcweir pVclGrid->DeactivateCell(); 2093*cdf0e10cSrcweir pVclGrid->SelectRow(pVclGrid->GetCurRow()); 2094*cdf0e10cSrcweir } 2095*cdf0e10cSrcweir pVclGrid->DeleteSelectedRows(); 2096*cdf0e10cSrcweir } 2097*cdf0e10cSrcweir } 2098*cdf0e10cSrcweir break; 2099*cdf0e10cSrcweir 2100*cdf0e10cSrcweir case ID_BROWSER_FILTERED: 2101*cdf0e10cSrcweir if (SaveModified()) 2102*cdf0e10cSrcweir { 2103*cdf0e10cSrcweir Reference< XPropertySet > xActiveSet(getRowSet(), UNO_QUERY); 2104*cdf0e10cSrcweir sal_Bool bApplied = ::comphelper::getBOOL(xActiveSet->getPropertyValue(PROPERTY_APPLYFILTER)); 2105*cdf0e10cSrcweir xActiveSet->setPropertyValue(PROPERTY_APPLYFILTER, ::comphelper::makeBoolAny(sal_Bool(!bApplied))); 2106*cdf0e10cSrcweir reloadForm(m_xLoadable); 2107*cdf0e10cSrcweir } 2108*cdf0e10cSrcweir InvalidateFeature(ID_BROWSER_FILTERED); 2109*cdf0e10cSrcweir break; 2110*cdf0e10cSrcweir case ID_BROWSER_EDITDOC: 2111*cdf0e10cSrcweir { 2112*cdf0e10cSrcweir sal_Int16 nGridMode = getBrowserView()->getVclControl()->GetOptions(); 2113*cdf0e10cSrcweir if (nGridMode == DbGridControl::OPT_READONLY) 2114*cdf0e10cSrcweir getBrowserView()->getVclControl()->SetOptions(DbGridControl::OPT_UPDATE | DbGridControl::OPT_INSERT | DbGridControl::OPT_DELETE); 2115*cdf0e10cSrcweir // the options not supported by the data source will be removed automatically 2116*cdf0e10cSrcweir else 2117*cdf0e10cSrcweir { 2118*cdf0e10cSrcweir if ( !SaveModified( ) ) 2119*cdf0e10cSrcweir // give the user a chance to save the current record (if neccessary) 2120*cdf0e10cSrcweir break; 2121*cdf0e10cSrcweir 2122*cdf0e10cSrcweir // maybe the user wanted to reject the modified record ? 2123*cdf0e10cSrcweir if (GetState(ID_BROWSER_UNDORECORD).bEnabled) 2124*cdf0e10cSrcweir Execute(ID_BROWSER_UNDORECORD,Sequence<PropertyValue>()); 2125*cdf0e10cSrcweir 2126*cdf0e10cSrcweir getBrowserView()->getVclControl()->SetOptions(DbGridControl::OPT_READONLY); 2127*cdf0e10cSrcweir } 2128*cdf0e10cSrcweir InvalidateFeature(ID_BROWSER_EDITDOC); 2129*cdf0e10cSrcweir } 2130*cdf0e10cSrcweir break; 2131*cdf0e10cSrcweir 2132*cdf0e10cSrcweir case ID_BROWSER_SEARCH: 2133*cdf0e10cSrcweir if ( SaveModified( ) ) 2134*cdf0e10cSrcweir ExecuteSearch(); 2135*cdf0e10cSrcweir break; 2136*cdf0e10cSrcweir 2137*cdf0e10cSrcweir case ID_BROWSER_COPY: 2138*cdf0e10cSrcweir if ( getBrowserView()->getVclControl()->GetSelectRowCount() > 0 ) 2139*cdf0e10cSrcweir { 2140*cdf0e10cSrcweir getBrowserView()->getVclControl()->CopySelectedRowsToClipboard(); 2141*cdf0e10cSrcweir break; 2142*cdf0e10cSrcweir } 2143*cdf0e10cSrcweir // run through 2144*cdf0e10cSrcweir case ID_BROWSER_CUT: 2145*cdf0e10cSrcweir case ID_BROWSER_PASTE: 2146*cdf0e10cSrcweir { 2147*cdf0e10cSrcweir CellControllerRef xCurrentController = getBrowserView()->getVclControl()->Controller(); 2148*cdf0e10cSrcweir if (!xCurrentController.Is()) 2149*cdf0e10cSrcweir // should be intercepted by GetState. Normally. 2150*cdf0e10cSrcweir // Unfortunately ID_BROWSER_PASTE is a 'fast call' slot, which means it may be executed without checking if it is 2151*cdf0e10cSrcweir // enabled. This would be really deadly herein if the current cell has no controller ... 2152*cdf0e10cSrcweir // (FS - 13.04.99 - #64694#) 2153*cdf0e10cSrcweir return; 2154*cdf0e10cSrcweir 2155*cdf0e10cSrcweir Edit& rEdit = (Edit&)xCurrentController->GetWindow(); 2156*cdf0e10cSrcweir switch (nId) 2157*cdf0e10cSrcweir { 2158*cdf0e10cSrcweir case ID_BROWSER_CUT : rEdit.Cut(); break; 2159*cdf0e10cSrcweir case SID_COPY : rEdit.Copy(); break; 2160*cdf0e10cSrcweir case ID_BROWSER_PASTE : rEdit.Paste(); break; 2161*cdf0e10cSrcweir } 2162*cdf0e10cSrcweir if (ID_BROWSER_CUT == nId || ID_BROWSER_PASTE == nId) 2163*cdf0e10cSrcweir { 2164*cdf0e10cSrcweir xCurrentController->SetModified(); 2165*cdf0e10cSrcweir rEdit.Modify(); 2166*cdf0e10cSrcweir } 2167*cdf0e10cSrcweir } 2168*cdf0e10cSrcweir break; 2169*cdf0e10cSrcweir 2170*cdf0e10cSrcweir case ID_BROWSER_SORTDOWN: 2171*cdf0e10cSrcweir bSortUp = sal_False; 2172*cdf0e10cSrcweir // DON'T break 2173*cdf0e10cSrcweir case ID_BROWSER_SORTUP: 2174*cdf0e10cSrcweir { 2175*cdf0e10cSrcweir if (!SaveModified()) 2176*cdf0e10cSrcweir break; 2177*cdf0e10cSrcweir 2178*cdf0e10cSrcweir if (!isValidCursor()) 2179*cdf0e10cSrcweir break; 2180*cdf0e10cSrcweir 2181*cdf0e10cSrcweir // only one sort order 2182*cdf0e10cSrcweir Reference< XPropertySet > xField(getBoundField(), UNO_QUERY); 2183*cdf0e10cSrcweir if (!xField.is()) 2184*cdf0e10cSrcweir break; 2185*cdf0e10cSrcweir 2186*cdf0e10cSrcweir Reference< XSingleSelectQueryComposer > xParser = createParser_nothrow(); 2187*cdf0e10cSrcweir const ::rtl::OUString sOldSort = xParser->getOrder(); 2188*cdf0e10cSrcweir sal_Bool bParserSuccess = sal_False; 2189*cdf0e10cSrcweir HANDLE_SQL_ERRORS( 2190*cdf0e10cSrcweir xParser->setOrder(::rtl::OUString()); xParser->appendOrderByColumn(xField, bSortUp), 2191*cdf0e10cSrcweir bParserSuccess, 2192*cdf0e10cSrcweir UniString(ModuleRes(SBA_BROWSER_SETTING_ORDER)), 2193*cdf0e10cSrcweir "SbaXDataBrowserController::Execute : caught an exception while composing the new filter !" 2194*cdf0e10cSrcweir ) 2195*cdf0e10cSrcweir 2196*cdf0e10cSrcweir if (bParserSuccess) 2197*cdf0e10cSrcweir applyParserOrder(sOldSort,xParser); 2198*cdf0e10cSrcweir } 2199*cdf0e10cSrcweir break; 2200*cdf0e10cSrcweir 2201*cdf0e10cSrcweir case ID_BROWSER_AUTOFILTER: 2202*cdf0e10cSrcweir { 2203*cdf0e10cSrcweir if (!SaveModified()) 2204*cdf0e10cSrcweir break; 2205*cdf0e10cSrcweir 2206*cdf0e10cSrcweir if (!isValidCursor()) 2207*cdf0e10cSrcweir break; 2208*cdf0e10cSrcweir 2209*cdf0e10cSrcweir Reference< XPropertySet > xField(getBoundField(), UNO_QUERY); 2210*cdf0e10cSrcweir if (!xField.is()) 2211*cdf0e10cSrcweir break; 2212*cdf0e10cSrcweir 2213*cdf0e10cSrcweir // check if the column is a aggregate function 2214*cdf0e10cSrcweir sal_Bool bHaving = sal_False; 2215*cdf0e10cSrcweir ::rtl::OUString sName; 2216*cdf0e10cSrcweir xField->getPropertyValue(PROPERTY_NAME) >>= sName; 2217*cdf0e10cSrcweir Reference< XColumnsSupplier > xColumnsSupplier(m_xParser, UNO_QUERY); 2218*cdf0e10cSrcweir Reference< ::com::sun::star::container::XNameAccess > xCols = xColumnsSupplier.is() ? xColumnsSupplier->getColumns() : Reference< ::com::sun::star::container::XNameAccess > (); 2219*cdf0e10cSrcweir if ( xCols.is() && xCols->hasByName(sName) ) 2220*cdf0e10cSrcweir { 2221*cdf0e10cSrcweir Reference<XPropertySet> xProp(xCols->getByName(sName),UNO_QUERY); 2222*cdf0e10cSrcweir static ::rtl::OUString sAgg(RTL_CONSTASCII_USTRINGPARAM("AggregateFunction")); 2223*cdf0e10cSrcweir if ( xProp->getPropertySetInfo()->hasPropertyByName(sAgg) ) 2224*cdf0e10cSrcweir xProp->getPropertyValue(sAgg) >>= bHaving; 2225*cdf0e10cSrcweir } 2226*cdf0e10cSrcweir 2227*cdf0e10cSrcweir Reference< XSingleSelectQueryComposer > xParser = createParser_nothrow(); 2228*cdf0e10cSrcweir const ::rtl::OUString sOldFilter = xParser->getFilter(); 2229*cdf0e10cSrcweir const ::rtl::OUString sOldHaving = xParser->getHavingClause(); 2230*cdf0e10cSrcweir 2231*cdf0e10cSrcweir Reference< XPropertySet > xFormSet(getRowSet(), UNO_QUERY); 2232*cdf0e10cSrcweir sal_Bool bApplied = ::comphelper::getBOOL(xFormSet->getPropertyValue(PROPERTY_APPLYFILTER)); 2233*cdf0e10cSrcweir // do we have a filter but it's not applied ? 2234*cdf0e10cSrcweir // -> completely overwrite it, else append one 2235*cdf0e10cSrcweir if (!bApplied) 2236*cdf0e10cSrcweir { 2237*cdf0e10cSrcweir DO_SAFE( (bHaving ? xParser->setHavingClause(::rtl::OUString()) : xParser->setFilter(::rtl::OUString())), "SbaXDataBrowserController::Execute : caught an exception while resetting the new filter !" ); 2238*cdf0e10cSrcweir } 2239*cdf0e10cSrcweir 2240*cdf0e10cSrcweir sal_Bool bParserSuccess = sal_False; 2241*cdf0e10cSrcweir 2242*cdf0e10cSrcweir sal_Int32 nOp = SQLFilterOperator::EQUAL; 2243*cdf0e10cSrcweir if ( xField.is() ) 2244*cdf0e10cSrcweir { 2245*cdf0e10cSrcweir sal_Int32 nType = 0; 2246*cdf0e10cSrcweir xField->getPropertyValue(PROPERTY_TYPE) >>= nType; 2247*cdf0e10cSrcweir switch(nType) 2248*cdf0e10cSrcweir { 2249*cdf0e10cSrcweir case DataType::VARCHAR: 2250*cdf0e10cSrcweir case DataType::CHAR: 2251*cdf0e10cSrcweir case DataType::LONGVARCHAR: 2252*cdf0e10cSrcweir nOp = SQLFilterOperator::LIKE; 2253*cdf0e10cSrcweir break; 2254*cdf0e10cSrcweir default: 2255*cdf0e10cSrcweir nOp = SQLFilterOperator::EQUAL; 2256*cdf0e10cSrcweir } 2257*cdf0e10cSrcweir } 2258*cdf0e10cSrcweir 2259*cdf0e10cSrcweir if ( bHaving ) 2260*cdf0e10cSrcweir { 2261*cdf0e10cSrcweir HANDLE_SQL_ERRORS( 2262*cdf0e10cSrcweir xParser->appendHavingClauseByColumn(xField,sal_True,nOp), 2263*cdf0e10cSrcweir bParserSuccess, 2264*cdf0e10cSrcweir UniString(ModuleRes(SBA_BROWSER_SETTING_FILTER)), 2265*cdf0e10cSrcweir "SbaXDataBrowserController::Execute : caught an exception while composing the new filter !" 2266*cdf0e10cSrcweir ) 2267*cdf0e10cSrcweir } 2268*cdf0e10cSrcweir else 2269*cdf0e10cSrcweir { 2270*cdf0e10cSrcweir HANDLE_SQL_ERRORS( 2271*cdf0e10cSrcweir xParser->appendFilterByColumn(xField,sal_True,nOp), 2272*cdf0e10cSrcweir bParserSuccess, 2273*cdf0e10cSrcweir UniString(ModuleRes(SBA_BROWSER_SETTING_FILTER)), 2274*cdf0e10cSrcweir "SbaXDataBrowserController::Execute : caught an exception while composing the new filter !" 2275*cdf0e10cSrcweir ) 2276*cdf0e10cSrcweir } 2277*cdf0e10cSrcweir 2278*cdf0e10cSrcweir if (bParserSuccess) 2279*cdf0e10cSrcweir applyParserFilter(sOldFilter, bApplied,sOldHaving,xParser); 2280*cdf0e10cSrcweir 2281*cdf0e10cSrcweir InvalidateFeature(ID_BROWSER_REMOVEFILTER); 2282*cdf0e10cSrcweir InvalidateFeature(ID_BROWSER_FILTERED); 2283*cdf0e10cSrcweir } 2284*cdf0e10cSrcweir break; 2285*cdf0e10cSrcweir 2286*cdf0e10cSrcweir case ID_BROWSER_ORDERCRIT: 2287*cdf0e10cSrcweir ExecuteFilterSortCrit(sal_False); 2288*cdf0e10cSrcweir break; 2289*cdf0e10cSrcweir 2290*cdf0e10cSrcweir case ID_BROWSER_FILTERCRIT: 2291*cdf0e10cSrcweir ExecuteFilterSortCrit(sal_True); 2292*cdf0e10cSrcweir InvalidateFeature(ID_BROWSER_FILTERED); 2293*cdf0e10cSrcweir break; 2294*cdf0e10cSrcweir 2295*cdf0e10cSrcweir case ID_BROWSER_REMOVEFILTER: 2296*cdf0e10cSrcweir { 2297*cdf0e10cSrcweir if (!SaveModified()) 2298*cdf0e10cSrcweir break; 2299*cdf0e10cSrcweir 2300*cdf0e10cSrcweir sal_Bool bNeedPostReload = preReloadForm(); 2301*cdf0e10cSrcweir // reset the filter and the sort property simutaneously so only _one_ new statement has to be 2302*cdf0e10cSrcweir // sent 2303*cdf0e10cSrcweir Reference< XPropertySet > xSet(getRowSet(), UNO_QUERY); 2304*cdf0e10cSrcweir if ( xSet.is() ) 2305*cdf0e10cSrcweir { 2306*cdf0e10cSrcweir xSet->setPropertyValue(PROPERTY_FILTER,makeAny(::rtl::OUString())); 2307*cdf0e10cSrcweir xSet->setPropertyValue(PROPERTY_HAVING_CLAUSE,makeAny(::rtl::OUString())); 2308*cdf0e10cSrcweir xSet->setPropertyValue(PROPERTY_ORDER,makeAny(::rtl::OUString())); 2309*cdf0e10cSrcweir } 2310*cdf0e10cSrcweir try 2311*cdf0e10cSrcweir { 2312*cdf0e10cSrcweir reloadForm(m_xLoadable); 2313*cdf0e10cSrcweir if ( bNeedPostReload ) 2314*cdf0e10cSrcweir postReloadForm(); 2315*cdf0e10cSrcweir } 2316*cdf0e10cSrcweir catch(Exception&) 2317*cdf0e10cSrcweir { 2318*cdf0e10cSrcweir } 2319*cdf0e10cSrcweir InvalidateFeature(ID_BROWSER_REMOVEFILTER); 2320*cdf0e10cSrcweir InvalidateFeature(ID_BROWSER_FILTERED); 2321*cdf0e10cSrcweir } 2322*cdf0e10cSrcweir break; 2323*cdf0e10cSrcweir 2324*cdf0e10cSrcweir case ID_BROWSER_REFRESH: 2325*cdf0e10cSrcweir if ( SaveModified( ) ) 2326*cdf0e10cSrcweir { 2327*cdf0e10cSrcweir if (!reloadForm(m_xLoadable)) 2328*cdf0e10cSrcweir criticalFail(); 2329*cdf0e10cSrcweir } 2330*cdf0e10cSrcweir break; 2331*cdf0e10cSrcweir 2332*cdf0e10cSrcweir case ID_BROWSER_SAVERECORD: 2333*cdf0e10cSrcweir if ( SaveModified( sal_False ) ) 2334*cdf0e10cSrcweir setCurrentModified( sal_False ); 2335*cdf0e10cSrcweir break; 2336*cdf0e10cSrcweir 2337*cdf0e10cSrcweir case ID_BROWSER_UNDORECORD: 2338*cdf0e10cSrcweir { 2339*cdf0e10cSrcweir try 2340*cdf0e10cSrcweir { 2341*cdf0e10cSrcweir // restore the cursor state 2342*cdf0e10cSrcweir Reference< XResultSetUpdate > xCursor(getRowSet(), UNO_QUERY); 2343*cdf0e10cSrcweir Reference< XPropertySet > xSet(xCursor, UNO_QUERY); 2344*cdf0e10cSrcweir Any aVal = xSet->getPropertyValue(PROPERTY_ISNEW); 2345*cdf0e10cSrcweir if (aVal.hasValue() && ::comphelper::getBOOL(aVal)) 2346*cdf0e10cSrcweir { 2347*cdf0e10cSrcweir xCursor->moveToInsertRow(); 2348*cdf0e10cSrcweir // no need to reset the grid model after we moved to the insert row, this is done implicitly by the 2349*cdf0e10cSrcweir // form 2350*cdf0e10cSrcweir // (and in some cases it may be deadly to do the reset explicitly after the form did it implicitly, 2351*cdf0e10cSrcweir // cause the form's reset may be async, and this leads to some nice deadlock scenarios ....) 2352*cdf0e10cSrcweir } 2353*cdf0e10cSrcweir else 2354*cdf0e10cSrcweir { 2355*cdf0e10cSrcweir xCursor->cancelRowUpdates(); 2356*cdf0e10cSrcweir 2357*cdf0e10cSrcweir // restore the grids state 2358*cdf0e10cSrcweir Reference< ::com::sun::star::form::XReset > xReset(getControlModel(), UNO_QUERY); 2359*cdf0e10cSrcweir if (xReset.is()) 2360*cdf0e10cSrcweir xReset->reset(); 2361*cdf0e10cSrcweir } 2362*cdf0e10cSrcweir } 2363*cdf0e10cSrcweir catch(SQLException&) 2364*cdf0e10cSrcweir { 2365*cdf0e10cSrcweir } 2366*cdf0e10cSrcweir 2367*cdf0e10cSrcweir setCurrentModified( sal_False ); 2368*cdf0e10cSrcweir } 2369*cdf0e10cSrcweir } 2370*cdf0e10cSrcweir } 2371*cdf0e10cSrcweir 2372*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2373*cdf0e10cSrcweir sal_Bool SbaXDataBrowserController::SaveModified(sal_Bool bAskFor) 2374*cdf0e10cSrcweir { 2375*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::SaveModified" ); 2376*cdf0e10cSrcweir if ( bAskFor && GetState(ID_BROWSER_SAVERECORD).bEnabled ) 2377*cdf0e10cSrcweir { 2378*cdf0e10cSrcweir getBrowserView()->getVclControl()->GrabFocus(); 2379*cdf0e10cSrcweir 2380*cdf0e10cSrcweir QueryBox aQry(getBrowserView()->getVclControl(), ModuleRes(QUERY_BRW_SAVEMODIFIED)); 2381*cdf0e10cSrcweir 2382*cdf0e10cSrcweir switch (aQry.Execute()) 2383*cdf0e10cSrcweir { 2384*cdf0e10cSrcweir case RET_NO: 2385*cdf0e10cSrcweir Execute(ID_BROWSER_UNDORECORD,Sequence<PropertyValue>()); 2386*cdf0e10cSrcweir return sal_True; 2387*cdf0e10cSrcweir case RET_CANCEL: 2388*cdf0e10cSrcweir return sal_False; 2389*cdf0e10cSrcweir } 2390*cdf0e10cSrcweir } 2391*cdf0e10cSrcweir 2392*cdf0e10cSrcweir if ( !CommitCurrent() ) // das aktuelle Control committen lassen 2393*cdf0e10cSrcweir return sal_False; 2394*cdf0e10cSrcweir 2395*cdf0e10cSrcweir Reference< XPropertySet > xFormSet(getRowSet(), UNO_QUERY); 2396*cdf0e10cSrcweir sal_Bool bResult = sal_False; 2397*cdf0e10cSrcweir try 2398*cdf0e10cSrcweir { 2399*cdf0e10cSrcweir if (::comphelper::getBOOL(xFormSet->getPropertyValue(PROPERTY_ISMODIFIED))) 2400*cdf0e10cSrcweir { 2401*cdf0e10cSrcweir Reference< XResultSetUpdate > xCursor(getRowSet(), UNO_QUERY); 2402*cdf0e10cSrcweir if (::comphelper::getBOOL(xFormSet->getPropertyValue(PROPERTY_ISNEW))) 2403*cdf0e10cSrcweir xCursor->insertRow(); 2404*cdf0e10cSrcweir else 2405*cdf0e10cSrcweir xCursor->updateRow(); 2406*cdf0e10cSrcweir } 2407*cdf0e10cSrcweir bResult = sal_True; 2408*cdf0e10cSrcweir } 2409*cdf0e10cSrcweir catch(SQLException&) 2410*cdf0e10cSrcweir { 2411*cdf0e10cSrcweir } 2412*cdf0e10cSrcweir catch(Exception&) 2413*cdf0e10cSrcweir { 2414*cdf0e10cSrcweir DBG_ERROR("SbaXDataBrowserController::SaveModified : could not save the current record !"); 2415*cdf0e10cSrcweir bResult = sal_False; 2416*cdf0e10cSrcweir } 2417*cdf0e10cSrcweir 2418*cdf0e10cSrcweir InvalidateFeature(ID_BROWSER_SAVERECORD); 2419*cdf0e10cSrcweir InvalidateFeature(ID_BROWSER_UNDORECORD); 2420*cdf0e10cSrcweir return bResult; 2421*cdf0e10cSrcweir } 2422*cdf0e10cSrcweir 2423*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2424*cdf0e10cSrcweir sal_Bool SbaXDataBrowserController::CommitCurrent() 2425*cdf0e10cSrcweir { 2426*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::CommitCurrent" ); 2427*cdf0e10cSrcweir if (!getBrowserView()) 2428*cdf0e10cSrcweir return sal_True; 2429*cdf0e10cSrcweir 2430*cdf0e10cSrcweir Reference< ::com::sun::star::awt::XControl > xActiveControl(getBrowserView()->getGridControl()); 2431*cdf0e10cSrcweir Reference< ::com::sun::star::form::XBoundControl > xLockingTest(xActiveControl, UNO_QUERY); 2432*cdf0e10cSrcweir sal_Bool bControlIsLocked = xLockingTest.is() && xLockingTest->getLock(); 2433*cdf0e10cSrcweir if (xActiveControl.is() && !bControlIsLocked) 2434*cdf0e10cSrcweir { 2435*cdf0e10cSrcweir // zunaechst das Control fragen ob es das IFace unterstuetzt 2436*cdf0e10cSrcweir Reference< ::com::sun::star::form::XBoundComponent > xBoundControl(xActiveControl, UNO_QUERY); 2437*cdf0e10cSrcweir if (!xBoundControl.is()) 2438*cdf0e10cSrcweir xBoundControl = Reference< ::com::sun::star::form::XBoundComponent > (xActiveControl->getModel(), UNO_QUERY); 2439*cdf0e10cSrcweir if (xBoundControl.is() && !xBoundControl->commit()) 2440*cdf0e10cSrcweir return sal_False; 2441*cdf0e10cSrcweir } 2442*cdf0e10cSrcweir return sal_True; 2443*cdf0e10cSrcweir } 2444*cdf0e10cSrcweir 2445*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2446*cdf0e10cSrcweir void SbaXDataBrowserController::setCurrentModified( sal_Bool _bSet ) 2447*cdf0e10cSrcweir { 2448*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::setCurrentModified" ); 2449*cdf0e10cSrcweir m_bCurrentlyModified = _bSet; 2450*cdf0e10cSrcweir InvalidateFeature( ID_BROWSER_SAVERECORD ); 2451*cdf0e10cSrcweir InvalidateFeature( ID_BROWSER_UNDORECORD ); 2452*cdf0e10cSrcweir } 2453*cdf0e10cSrcweir 2454*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2455*cdf0e10cSrcweir void SbaXDataBrowserController::RowChanged() 2456*cdf0e10cSrcweir { 2457*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::RowChanged" ); 2458*cdf0e10cSrcweir setCurrentModified( sal_False ); 2459*cdf0e10cSrcweir } 2460*cdf0e10cSrcweir 2461*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2462*cdf0e10cSrcweir void SbaXDataBrowserController::ColumnChanged() 2463*cdf0e10cSrcweir { 2464*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::ColumnChanged" ); 2465*cdf0e10cSrcweir InvalidateFeature(ID_BROWSER_SORTUP); 2466*cdf0e10cSrcweir InvalidateFeature(ID_BROWSER_SORTDOWN); 2467*cdf0e10cSrcweir InvalidateFeature(ID_BROWSER_ORDERCRIT); 2468*cdf0e10cSrcweir InvalidateFeature(ID_BROWSER_FILTERCRIT); 2469*cdf0e10cSrcweir InvalidateFeature(ID_BROWSER_AUTOFILTER); 2470*cdf0e10cSrcweir InvalidateFeature(ID_BROWSER_REMOVEFILTER); 2471*cdf0e10cSrcweir 2472*cdf0e10cSrcweir setCurrentModified( sal_False ); 2473*cdf0e10cSrcweir } 2474*cdf0e10cSrcweir 2475*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2476*cdf0e10cSrcweir void SbaXDataBrowserController::SelectionChanged() 2477*cdf0e10cSrcweir { 2478*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::SelectionChanged" ); 2479*cdf0e10cSrcweir // not interested in 2480*cdf0e10cSrcweir } 2481*cdf0e10cSrcweir 2482*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2483*cdf0e10cSrcweir void SbaXDataBrowserController::CellActivated() 2484*cdf0e10cSrcweir { 2485*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::CellActivated" ); 2486*cdf0e10cSrcweir m_aInvalidateClipboard.Start(); 2487*cdf0e10cSrcweir OnInvalidateClipboard( NULL ); 2488*cdf0e10cSrcweir } 2489*cdf0e10cSrcweir 2490*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2491*cdf0e10cSrcweir void SbaXDataBrowserController::CellDeactivated() 2492*cdf0e10cSrcweir { 2493*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::CellDeactivated" ); 2494*cdf0e10cSrcweir m_aInvalidateClipboard.Stop(); 2495*cdf0e10cSrcweir OnInvalidateClipboard( NULL ); 2496*cdf0e10cSrcweir } 2497*cdf0e10cSrcweir 2498*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2499*cdf0e10cSrcweir IMPL_LINK( SbaXDataBrowserController, OnClipboardChanged, void*, EMPTYARG ) 2500*cdf0e10cSrcweir { 2501*cdf0e10cSrcweir ::vos::OGuard aGuard(Application::GetSolarMutex()); 2502*cdf0e10cSrcweir return OnInvalidateClipboard( NULL ); 2503*cdf0e10cSrcweir } 2504*cdf0e10cSrcweir 2505*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2506*cdf0e10cSrcweir IMPL_LINK(SbaXDataBrowserController, OnInvalidateClipboard, AutoTimer*, _pTimer) 2507*cdf0e10cSrcweir { 2508*cdf0e10cSrcweir InvalidateFeature(ID_BROWSER_CUT); 2509*cdf0e10cSrcweir InvalidateFeature(ID_BROWSER_COPY); 2510*cdf0e10cSrcweir 2511*cdf0e10cSrcweir // if the invalidation was triggered by the timer, we do not need to invalidate PASTE. 2512*cdf0e10cSrcweir // The timer is only for checking the CUT/COPY slots regulariry, which depend on the 2513*cdf0e10cSrcweir // selection state of the active cell 2514*cdf0e10cSrcweir // TODO: get a callback at the Edit which allows to be notified when the selection 2515*cdf0e10cSrcweir // changes. This would be much better than this cycle-eating polling mechanism here .... 2516*cdf0e10cSrcweir if ( _pTimer != &m_aInvalidateClipboard ) 2517*cdf0e10cSrcweir InvalidateFeature(ID_BROWSER_PASTE); 2518*cdf0e10cSrcweir 2519*cdf0e10cSrcweir return 0L; 2520*cdf0e10cSrcweir } 2521*cdf0e10cSrcweir 2522*cdf0e10cSrcweir // ------------------------------------------------------------------------- 2523*cdf0e10cSrcweir Reference< XPropertySet > SbaXDataBrowserController::getBoundField(sal_uInt16 nViewPos) const 2524*cdf0e10cSrcweir { 2525*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::SaveData" ); 2526*cdf0e10cSrcweir Reference< XPropertySet > xEmptyReturn; 2527*cdf0e10cSrcweir 2528*cdf0e10cSrcweir // get the current column from the grid 2529*cdf0e10cSrcweir if (nViewPos == (sal_uInt16)-1) 2530*cdf0e10cSrcweir { 2531*cdf0e10cSrcweir Reference< ::com::sun::star::form::XGrid > xGrid(getBrowserView()->getGridControl(), UNO_QUERY); 2532*cdf0e10cSrcweir if (!xGrid.is()) 2533*cdf0e10cSrcweir return xEmptyReturn; 2534*cdf0e10cSrcweir nViewPos = xGrid->getCurrentColumnPosition(); 2535*cdf0e10cSrcweir } 2536*cdf0e10cSrcweir sal_uInt16 nCurrentCol = getBrowserView()->View2ModelPos(nViewPos); 2537*cdf0e10cSrcweir if (nCurrentCol == (sal_uInt16)-1) 2538*cdf0e10cSrcweir return xEmptyReturn; 2539*cdf0e10cSrcweir 2540*cdf0e10cSrcweir // get the according column from the model 2541*cdf0e10cSrcweir Reference< ::com::sun::star::container::XIndexContainer > xCols(getControlModel(), UNO_QUERY); 2542*cdf0e10cSrcweir Reference< XPropertySet > xCurrentCol(xCols->getByIndex(nCurrentCol),UNO_QUERY); 2543*cdf0e10cSrcweir if (!xCurrentCol.is()) 2544*cdf0e10cSrcweir return xEmptyReturn; 2545*cdf0e10cSrcweir 2546*cdf0e10cSrcweir xEmptyReturn.set(xCurrentCol->getPropertyValue(PROPERTY_BOUNDFIELD) ,UNO_QUERY); 2547*cdf0e10cSrcweir return xEmptyReturn; 2548*cdf0e10cSrcweir } 2549*cdf0e10cSrcweir 2550*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2551*cdf0e10cSrcweir IMPL_LINK(SbaXDataBrowserController, OnSearchContextRequest, FmSearchContext*, pContext) 2552*cdf0e10cSrcweir { 2553*cdf0e10cSrcweir Reference< ::com::sun::star::container::XIndexAccess > xPeerContainer(getBrowserView()->getGridControl(), UNO_QUERY); 2554*cdf0e10cSrcweir 2555*cdf0e10cSrcweir // check all grid columns for their control source 2556*cdf0e10cSrcweir Reference< ::com::sun::star::container::XIndexAccess > xModelColumns(getFormComponent(), UNO_QUERY); 2557*cdf0e10cSrcweir DBG_ASSERT(xModelColumns.is(), "SbaXDataBrowserController::OnSearchContextRequest : there is a grid control without columns !"); 2558*cdf0e10cSrcweir // the case 'no columns' should be indicated with an empty container, I think ... 2559*cdf0e10cSrcweir DBG_ASSERT(xModelColumns->getCount() >= xPeerContainer->getCount(), "SbaXDataBrowserController::OnSearchContextRequest : impossible : have more view than model columns !"); 2560*cdf0e10cSrcweir 2561*cdf0e10cSrcweir String sFieldList; 2562*cdf0e10cSrcweir for (sal_Int32 nViewPos=0; nViewPos<xPeerContainer->getCount(); ++nViewPos) 2563*cdf0e10cSrcweir { 2564*cdf0e10cSrcweir Reference< XInterface > xCurrentColumn(xPeerContainer->getByIndex(nViewPos),UNO_QUERY); 2565*cdf0e10cSrcweir if (!xCurrentColumn.is()) 2566*cdf0e10cSrcweir continue; 2567*cdf0e10cSrcweir 2568*cdf0e10cSrcweir // can we use this column control fo searching ? 2569*cdf0e10cSrcweir if (!IsSearchableControl(xCurrentColumn)) 2570*cdf0e10cSrcweir continue; 2571*cdf0e10cSrcweir 2572*cdf0e10cSrcweir sal_uInt16 nModelPos = getBrowserView()->View2ModelPos((sal_uInt16)nViewPos); 2573*cdf0e10cSrcweir Reference< XPropertySet > xCurrentColModel(xModelColumns->getByIndex(nModelPos),UNO_QUERY); 2574*cdf0e10cSrcweir ::rtl::OUString aName = ::comphelper::getString(xCurrentColModel->getPropertyValue(PROPERTY_CONTROLSOURCE)); 2575*cdf0e10cSrcweir 2576*cdf0e10cSrcweir sFieldList += (const sal_Unicode*)aName; 2577*cdf0e10cSrcweir sFieldList += ';'; 2578*cdf0e10cSrcweir 2579*cdf0e10cSrcweir pContext->arrFields.push_back(xCurrentColumn); 2580*cdf0e10cSrcweir } 2581*cdf0e10cSrcweir sFieldList.EraseTrailingChars(';'); 2582*cdf0e10cSrcweir 2583*cdf0e10cSrcweir pContext->xCursor.set(getRowSet(),UNO_QUERY); 2584*cdf0e10cSrcweir pContext->strUsedFields = sFieldList; 2585*cdf0e10cSrcweir 2586*cdf0e10cSrcweir // if the cursor is in a mode other than STANDARD -> reset 2587*cdf0e10cSrcweir Reference< XPropertySet > xCursorSet(pContext->xCursor, UNO_QUERY); 2588*cdf0e10cSrcweir DBG_ASSERT(xCursorSet.is() && !::comphelper::getBOOL(xCursorSet->getPropertyValue(PROPERTY_ISMODIFIED)), 2589*cdf0e10cSrcweir "SbaXDataBrowserController::OnSearchContextRequest : please do not call for cursors with modified rows !"); 2590*cdf0e10cSrcweir if (xCursorSet.is() && ::comphelper::getBOOL(xCursorSet->getPropertyValue(PROPERTY_ISNEW))) 2591*cdf0e10cSrcweir { 2592*cdf0e10cSrcweir Reference< XResultSetUpdate > xUpdateCursor(pContext->xCursor, UNO_QUERY); 2593*cdf0e10cSrcweir xUpdateCursor->moveToCurrentRow(); 2594*cdf0e10cSrcweir } 2595*cdf0e10cSrcweir return pContext->arrFields.size(); 2596*cdf0e10cSrcweir } 2597*cdf0e10cSrcweir 2598*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2599*cdf0e10cSrcweir IMPL_LINK(SbaXDataBrowserController, OnFoundData, FmFoundRecordInformation*, pInfo) 2600*cdf0e10cSrcweir { 2601*cdf0e10cSrcweir Reference< ::com::sun::star::sdbcx::XRowLocate > xCursor(getRowSet(), UNO_QUERY); 2602*cdf0e10cSrcweir DBG_ASSERT(xCursor.is(), "SbaXDataBrowserController::OnFoundData : shit happens. sometimes. but this is simply impossible !"); 2603*cdf0e10cSrcweir 2604*cdf0e10cSrcweir // move the cursor 2605*cdf0e10cSrcweir xCursor->moveToBookmark(pInfo->aPosition); 2606*cdf0e10cSrcweir 2607*cdf0e10cSrcweir // let the grid snyc it's display with the cursor 2608*cdf0e10cSrcweir Reference< XPropertySet > xModelSet(getControlModel(), UNO_QUERY); 2609*cdf0e10cSrcweir DBG_ASSERT(xModelSet.is(), "SbaXDataBrowserController::OnFoundData : no model set ?!"); 2610*cdf0e10cSrcweir Any aOld = xModelSet->getPropertyValue(::rtl::OUString::createFromAscii("DisplayIsSynchron")); 2611*cdf0e10cSrcweir xModelSet->setPropertyValue(::rtl::OUString::createFromAscii("DisplayIsSynchron"), ::comphelper::makeBoolAny(sal_Bool(sal_True))); 2612*cdf0e10cSrcweir xModelSet->setPropertyValue(::rtl::OUString::createFromAscii("DisplayIsSynchron"), aOld); 2613*cdf0e10cSrcweir 2614*cdf0e10cSrcweir // and move to the field 2615*cdf0e10cSrcweir Reference< ::com::sun::star::container::XIndexAccess > aColumnControls(getBrowserView()->getGridControl()->getPeer(), UNO_QUERY); 2616*cdf0e10cSrcweir sal_uInt16 nViewPos; 2617*cdf0e10cSrcweir 2618*cdf0e10cSrcweir for ( nViewPos = 0; nViewPos < aColumnControls->getCount(); ++nViewPos ) 2619*cdf0e10cSrcweir { 2620*cdf0e10cSrcweir Reference< XInterface > xCurrent(aColumnControls->getByIndex(nViewPos),UNO_QUERY); 2621*cdf0e10cSrcweir if (IsSearchableControl(xCurrent)) 2622*cdf0e10cSrcweir { 2623*cdf0e10cSrcweir if (pInfo->nFieldPos) 2624*cdf0e10cSrcweir --pInfo->nFieldPos; 2625*cdf0e10cSrcweir else 2626*cdf0e10cSrcweir break; 2627*cdf0e10cSrcweir } 2628*cdf0e10cSrcweir } 2629*cdf0e10cSrcweir 2630*cdf0e10cSrcweir Reference< ::com::sun::star::form::XGrid > xGrid(getBrowserView()->getGridControl(), UNO_QUERY); 2631*cdf0e10cSrcweir xGrid->setCurrentColumnPosition(nViewPos); 2632*cdf0e10cSrcweir 2633*cdf0e10cSrcweir return 0; 2634*cdf0e10cSrcweir } 2635*cdf0e10cSrcweir 2636*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2637*cdf0e10cSrcweir IMPL_LINK(SbaXDataBrowserController, OnCanceledNotFound, FmFoundRecordInformation*, pInfo) 2638*cdf0e10cSrcweir { 2639*cdf0e10cSrcweir Reference< ::com::sun::star::sdbcx::XRowLocate > xCursor(getRowSet(), UNO_QUERY); 2640*cdf0e10cSrcweir 2641*cdf0e10cSrcweir try 2642*cdf0e10cSrcweir { 2643*cdf0e10cSrcweir DBG_ASSERT(xCursor.is(), "SbaXDataBrowserController::OnCanceledNotFound : shit happens. sometimes. but this is simply impossible !"); 2644*cdf0e10cSrcweir // move the cursor 2645*cdf0e10cSrcweir xCursor->moveToBookmark(pInfo->aPosition); 2646*cdf0e10cSrcweir } 2647*cdf0e10cSrcweir catch( const Exception& ) 2648*cdf0e10cSrcweir { 2649*cdf0e10cSrcweir DBG_UNHANDLED_EXCEPTION(); 2650*cdf0e10cSrcweir } 2651*cdf0e10cSrcweir 2652*cdf0e10cSrcweir try 2653*cdf0e10cSrcweir { 2654*cdf0e10cSrcweir // let the grid snyc it's display with the cursor 2655*cdf0e10cSrcweir Reference< XPropertySet > xModelSet(getControlModel(), UNO_QUERY); 2656*cdf0e10cSrcweir DBG_ASSERT(xModelSet.is(), "SbaXDataBrowserController::OnCanceledNotFound : no model set ?!"); 2657*cdf0e10cSrcweir Any aOld = xModelSet->getPropertyValue(::rtl::OUString::createFromAscii("DisplayIsSynchron")); 2658*cdf0e10cSrcweir xModelSet->setPropertyValue(::rtl::OUString::createFromAscii("DisplayIsSynchron"), ::comphelper::makeBoolAny(sal_Bool(sal_True))); 2659*cdf0e10cSrcweir xModelSet->setPropertyValue(::rtl::OUString::createFromAscii("DisplayIsSynchron"), aOld); 2660*cdf0e10cSrcweir } 2661*cdf0e10cSrcweir catch( const Exception& ) 2662*cdf0e10cSrcweir { 2663*cdf0e10cSrcweir DBG_UNHANDLED_EXCEPTION(); 2664*cdf0e10cSrcweir } 2665*cdf0e10cSrcweir 2666*cdf0e10cSrcweir return 0L; 2667*cdf0e10cSrcweir } 2668*cdf0e10cSrcweir 2669*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2670*cdf0e10cSrcweir IMPL_LINK(SbaXDataBrowserController, OnAsyncGetCellFocus, void*, EMPTYARG) 2671*cdf0e10cSrcweir { 2672*cdf0e10cSrcweir SbaGridControl* pVclGrid = getBrowserView() ? getBrowserView()->getVclControl() : NULL; 2673*cdf0e10cSrcweir // if we have a controller, but the window for the controller doesn't have the focus, we correct this 2674*cdf0e10cSrcweir if(pVclGrid) 2675*cdf0e10cSrcweir { 2676*cdf0e10cSrcweir if (!pVclGrid->IsEditing()) 2677*cdf0e10cSrcweir return 0L; 2678*cdf0e10cSrcweir 2679*cdf0e10cSrcweir if (pVclGrid->HasChildPathFocus()) 2680*cdf0e10cSrcweir pVclGrid->Controller()->GetWindow().GrabFocus(); 2681*cdf0e10cSrcweir } 2682*cdf0e10cSrcweir 2683*cdf0e10cSrcweir return 0L; 2684*cdf0e10cSrcweir } 2685*cdf0e10cSrcweir 2686*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2687*cdf0e10cSrcweir void SbaXDataBrowserController::criticalFail() 2688*cdf0e10cSrcweir { 2689*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::criticalFail" ); 2690*cdf0e10cSrcweir InvalidateAll(); 2691*cdf0e10cSrcweir m_nRowSetPrivileges = 0; 2692*cdf0e10cSrcweir } 2693*cdf0e10cSrcweir 2694*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2695*cdf0e10cSrcweir void SbaXDataBrowserController::LoadFinished(sal_Bool /*bWasSynch*/) 2696*cdf0e10cSrcweir { 2697*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::LoadFinished" ); 2698*cdf0e10cSrcweir m_nRowSetPrivileges = 0; 2699*cdf0e10cSrcweir 2700*cdf0e10cSrcweir if (isValid() && !loadingCancelled()) 2701*cdf0e10cSrcweir { 2702*cdf0e10cSrcweir // obtain cached values 2703*cdf0e10cSrcweir try 2704*cdf0e10cSrcweir { 2705*cdf0e10cSrcweir Reference< XPropertySet > xFormProps( m_xLoadable, UNO_QUERY_THROW ); 2706*cdf0e10cSrcweir OSL_VERIFY( xFormProps->getPropertyValue( PROPERTY_PRIVILEGES ) >>= m_nRowSetPrivileges ); 2707*cdf0e10cSrcweir } 2708*cdf0e10cSrcweir catch( const Exception& ) 2709*cdf0e10cSrcweir { 2710*cdf0e10cSrcweir DBG_UNHANDLED_EXCEPTION(); 2711*cdf0e10cSrcweir } 2712*cdf0e10cSrcweir 2713*cdf0e10cSrcweir // -------------------------------- 2714*cdf0e10cSrcweir // switch the control to alive mode 2715*cdf0e10cSrcweir getBrowserView()->getGridControl()->setDesignMode(sal_False); 2716*cdf0e10cSrcweir 2717*cdf0e10cSrcweir // ------------------------------- 2718*cdf0e10cSrcweir initializeParser(); 2719*cdf0e10cSrcweir 2720*cdf0e10cSrcweir // ------------------------------- 2721*cdf0e10cSrcweir InvalidateAll(); 2722*cdf0e10cSrcweir 2723*cdf0e10cSrcweir m_aAsyncGetCellFocus.Call(); 2724*cdf0e10cSrcweir } 2725*cdf0e10cSrcweir } 2726*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 2727*cdf0e10cSrcweir void SbaXDataBrowserController::initializeParser() const 2728*cdf0e10cSrcweir { 2729*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::initializeParser" ); 2730*cdf0e10cSrcweir if ( !m_xParser.is() ) 2731*cdf0e10cSrcweir { 2732*cdf0e10cSrcweir // ---------------------------------------------- 2733*cdf0e10cSrcweir // create a parser (needed for filtering/sorting) 2734*cdf0e10cSrcweir try 2735*cdf0e10cSrcweir { 2736*cdf0e10cSrcweir const Reference< XPropertySet > xFormSet(getRowSet(), UNO_QUERY); 2737*cdf0e10cSrcweir if (::comphelper::getBOOL(xFormSet->getPropertyValue(PROPERTY_ESCAPE_PROCESSING))) 2738*cdf0e10cSrcweir { // (only if the statement isn't native) 2739*cdf0e10cSrcweir // (it is allowed to use the PROPERTY_ISPASSTHROUGH : _after_ loading a form it is valid) 2740*cdf0e10cSrcweir xFormSet->getPropertyValue(PROPERTY_SINGLESELECTQUERYCOMPOSER) >>= m_xParser; 2741*cdf0e10cSrcweir } 2742*cdf0e10cSrcweir } 2743*cdf0e10cSrcweir catch(Exception&) 2744*cdf0e10cSrcweir { 2745*cdf0e10cSrcweir DBG_UNHANDLED_EXCEPTION(); 2746*cdf0e10cSrcweir m_xParser = NULL; 2747*cdf0e10cSrcweir // no further handling, we ignore the error 2748*cdf0e10cSrcweir } 2749*cdf0e10cSrcweir } 2750*cdf0e10cSrcweir } 2751*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2752*cdf0e10cSrcweir void SbaXDataBrowserController::loaded(const EventObject& /*aEvent*/) throw( RuntimeException ) 2753*cdf0e10cSrcweir { 2754*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::loaded" ); 2755*cdf0e10cSrcweir // not interested in 2756*cdf0e10cSrcweir // we're loading within an separate thread and have a handling for it's "finished event" 2757*cdf0e10cSrcweir } 2758*cdf0e10cSrcweir 2759*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2760*cdf0e10cSrcweir void SbaXDataBrowserController::unloading(const EventObject& /*aEvent*/) throw( RuntimeException ) 2761*cdf0e10cSrcweir { 2762*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::unloading" ); 2763*cdf0e10cSrcweir // not interested in 2764*cdf0e10cSrcweir } 2765*cdf0e10cSrcweir 2766*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2767*cdf0e10cSrcweir void SbaXDataBrowserController::unloaded(const EventObject& /*aEvent*/) throw( RuntimeException ) 2768*cdf0e10cSrcweir { 2769*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::unloaded" ); 2770*cdf0e10cSrcweir m_xParser.clear(); 2771*cdf0e10cSrcweir InvalidateAll(); 2772*cdf0e10cSrcweir // do this asynchron, there are other listeners reacting on this message ... 2773*cdf0e10cSrcweir // (it's a little hack : the grid columns are listening to this event, too, and their bound field may 2774*cdf0e10cSrcweir // change as a reaction on that event. as we have no chance to be notified of this change (which is 2775*cdf0e10cSrcweir // the one we're interested in) we give them time to do what they want to before invalidating our 2776*cdf0e10cSrcweir // bound-field-dependent slots .... 2777*cdf0e10cSrcweir } 2778*cdf0e10cSrcweir 2779*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2780*cdf0e10cSrcweir void SbaXDataBrowserController::reloading(const EventObject& /*aEvent*/) throw( RuntimeException ) 2781*cdf0e10cSrcweir { 2782*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::reloading" ); 2783*cdf0e10cSrcweir // not interested in 2784*cdf0e10cSrcweir } 2785*cdf0e10cSrcweir 2786*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2787*cdf0e10cSrcweir void SbaXDataBrowserController::reloaded(const EventObject& /*aEvent*/) throw( RuntimeException ) 2788*cdf0e10cSrcweir { 2789*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::reloaded" ); 2790*cdf0e10cSrcweir InvalidateAll(); 2791*cdf0e10cSrcweir // do this asynchronously, there are other listeners reacting on this message ... 2792*cdf0e10cSrcweir // (it's a little hack : the grid columns are listening to this event, too, and their bound field may 2793*cdf0e10cSrcweir // change as a reaction on that event. as we have no chance to be notified of this change (which is 2794*cdf0e10cSrcweir // the one we're interested in) we give them time to do what they want to before invalidating our 2795*cdf0e10cSrcweir // bound-field-dependent slots .... 2796*cdf0e10cSrcweir } 2797*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2798*cdf0e10cSrcweir void SbaXDataBrowserController::enterFormAction() 2799*cdf0e10cSrcweir { 2800*cdf0e10cSrcweir if ( !m_nFormActionNestingLevel ) 2801*cdf0e10cSrcweir // first action -> reset 2802*cdf0e10cSrcweir m_aCurrentError.clear(); 2803*cdf0e10cSrcweir 2804*cdf0e10cSrcweir ++m_nFormActionNestingLevel; 2805*cdf0e10cSrcweir } 2806*cdf0e10cSrcweir 2807*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2808*cdf0e10cSrcweir void SbaXDataBrowserController::leaveFormAction() 2809*cdf0e10cSrcweir { 2810*cdf0e10cSrcweir DBG_ASSERT( m_nFormActionNestingLevel > 0, "SbaXDataBrowserController::leaveFormAction : invalid call !" ); 2811*cdf0e10cSrcweir if ( --m_nFormActionNestingLevel > 0 ) 2812*cdf0e10cSrcweir return; 2813*cdf0e10cSrcweir 2814*cdf0e10cSrcweir if ( !m_aCurrentError.isValid() ) 2815*cdf0e10cSrcweir return; 2816*cdf0e10cSrcweir 2817*cdf0e10cSrcweir m_aAsyncDisplayError.Call(); 2818*cdf0e10cSrcweir } 2819*cdf0e10cSrcweir 2820*cdf0e10cSrcweir // ------------------------------------------------------------------------- 2821*cdf0e10cSrcweir sal_Bool SbaXDataBrowserController::isLoaded() const 2822*cdf0e10cSrcweir { 2823*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::isLoaded" ); 2824*cdf0e10cSrcweir return m_xLoadable.is() && m_xLoadable->isLoaded(); 2825*cdf0e10cSrcweir } 2826*cdf0e10cSrcweir 2827*cdf0e10cSrcweir // ------------------------------------------------------------------------- 2828*cdf0e10cSrcweir sal_Bool SbaXDataBrowserController::isValidCursor() const 2829*cdf0e10cSrcweir { 2830*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::isValidCursor" ); 2831*cdf0e10cSrcweir if (!m_xColumnsSupplier.is()) 2832*cdf0e10cSrcweir return sal_False; 2833*cdf0e10cSrcweir Reference< ::com::sun::star::container::XNameAccess > xCols = m_xColumnsSupplier->getColumns(); 2834*cdf0e10cSrcweir if (!xCols.is() || !xCols->hasElements()) 2835*cdf0e10cSrcweir return sal_False; 2836*cdf0e10cSrcweir 2837*cdf0e10cSrcweir sal_Bool bIsValid = !(m_xRowSet->isBeforeFirst() || m_xRowSet->isAfterLast()); 2838*cdf0e10cSrcweir if ( !bIsValid ) 2839*cdf0e10cSrcweir { 2840*cdf0e10cSrcweir Reference<XPropertySet> xProp(m_xRowSet,UNO_QUERY); 2841*cdf0e10cSrcweir bIsValid = ::cppu::any2bool(xProp->getPropertyValue(PROPERTY_ISNEW)); 2842*cdf0e10cSrcweir if ( !bIsValid ) 2843*cdf0e10cSrcweir { 2844*cdf0e10cSrcweir bIsValid = m_xParser.is(); 2845*cdf0e10cSrcweir } 2846*cdf0e10cSrcweir } // if ( !bIsValid ) 2847*cdf0e10cSrcweir return bIsValid; 2848*cdf0e10cSrcweir } 2849*cdf0e10cSrcweir 2850*cdf0e10cSrcweir //================================================================== 2851*cdf0e10cSrcweir // LoadFormHelper 2852*cdf0e10cSrcweir //================================================================== 2853*cdf0e10cSrcweir 2854*cdf0e10cSrcweir class LoadFormHelper :public ::cppu::WeakImplHelper2< ::com::sun::star::form::XLoadListener, 2855*cdf0e10cSrcweir XRowSetListener> 2856*cdf0e10cSrcweir { 2857*cdf0e10cSrcweir enum STATE { STARTED, LOADED, POSITIONED, DISPOSED }; 2858*cdf0e10cSrcweir STATE m_eState; 2859*cdf0e10cSrcweir 2860*cdf0e10cSrcweir Reference< XRowSet > m_xForm; 2861*cdf0e10cSrcweir 2862*cdf0e10cSrcweir ::osl::Mutex m_aAccessSafety; 2863*cdf0e10cSrcweir 2864*cdf0e10cSrcweir public: 2865*cdf0e10cSrcweir LoadFormHelper(const Reference< XRowSet > & _rxForm); 2866*cdf0e10cSrcweir 2867*cdf0e10cSrcweir // ::com::sun::star::form::XLoadListener 2868*cdf0e10cSrcweir virtual void SAL_CALL loaded(const ::com::sun::star::lang::EventObject& aEvent) throw( RuntimeException ); 2869*cdf0e10cSrcweir virtual void SAL_CALL unloaded(const ::com::sun::star::lang::EventObject& aEvent) throw( RuntimeException ); 2870*cdf0e10cSrcweir virtual void SAL_CALL unloading(const ::com::sun::star::lang::EventObject& aEvent) throw( RuntimeException ); 2871*cdf0e10cSrcweir virtual void SAL_CALL reloading(const ::com::sun::star::lang::EventObject& aEvent) throw( RuntimeException ); 2872*cdf0e10cSrcweir virtual void SAL_CALL reloaded(const ::com::sun::star::lang::EventObject& aEvent) throw( RuntimeException ); 2873*cdf0e10cSrcweir 2874*cdf0e10cSrcweir // XRowSetListener 2875*cdf0e10cSrcweir virtual void SAL_CALL cursorMoved(const ::com::sun::star::lang::EventObject& event) throw( RuntimeException ); 2876*cdf0e10cSrcweir virtual void SAL_CALL rowChanged(const ::com::sun::star::lang::EventObject& event) throw( RuntimeException ); 2877*cdf0e10cSrcweir virtual void SAL_CALL rowSetChanged(const ::com::sun::star::lang::EventObject& event) throw( RuntimeException ); 2878*cdf0e10cSrcweir 2879*cdf0e10cSrcweir // ::com::sun::star::lang::XEventListener 2880*cdf0e10cSrcweir virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw( RuntimeException ); 2881*cdf0e10cSrcweir 2882*cdf0e10cSrcweir 2883*cdf0e10cSrcweir bool WaitUntilReallyLoaded(bool _bOnlyIfLoaded); 2884*cdf0e10cSrcweir // waits 'til the first positioned event after the loaded event. returns true if successfull, 2885*cdf0e10cSrcweir // false if the form was disposed or unloaded before or while waiting 2886*cdf0e10cSrcweir // if _bOnlyIfLoaded is false and the form isn't loaded already loaded, false will be returned 2887*cdf0e10cSrcweir // (without any wating) 2888*cdf0e10cSrcweir 2889*cdf0e10cSrcweir void cancel(); 2890*cdf0e10cSrcweir 2891*cdf0e10cSrcweir protected: 2892*cdf0e10cSrcweir ~LoadFormHelper(); 2893*cdf0e10cSrcweir 2894*cdf0e10cSrcweir void implDispose(); 2895*cdf0e10cSrcweir }; 2896*cdf0e10cSrcweir 2897*cdf0e10cSrcweir DBG_NAME(LoadFormHelper) 2898*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2899*cdf0e10cSrcweir LoadFormHelper::LoadFormHelper(const Reference< XRowSet > & _rxForm) 2900*cdf0e10cSrcweir :m_eState(STARTED) 2901*cdf0e10cSrcweir ,m_xForm(_rxForm) 2902*cdf0e10cSrcweir { 2903*cdf0e10cSrcweir DBG_CTOR(LoadFormHelper,NULL); 2904*cdf0e10cSrcweir 2905*cdf0e10cSrcweir Reference< ::com::sun::star::form::XLoadable > (m_xForm, UNO_QUERY)->addLoadListener(this); 2906*cdf0e10cSrcweir m_xForm->addRowSetListener(this); 2907*cdf0e10cSrcweir } 2908*cdf0e10cSrcweir 2909*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2910*cdf0e10cSrcweir LoadFormHelper::~LoadFormHelper() 2911*cdf0e10cSrcweir { 2912*cdf0e10cSrcweir ::osl::MutexGuard aGuard(m_aAccessSafety); 2913*cdf0e10cSrcweir implDispose(); 2914*cdf0e10cSrcweir 2915*cdf0e10cSrcweir DBG_DTOR(LoadFormHelper,NULL); 2916*cdf0e10cSrcweir } 2917*cdf0e10cSrcweir 2918*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2919*cdf0e10cSrcweir void LoadFormHelper::implDispose() 2920*cdf0e10cSrcweir { 2921*cdf0e10cSrcweir if (DISPOSED != m_eState) 2922*cdf0e10cSrcweir { 2923*cdf0e10cSrcweir 2924*cdf0e10cSrcweir Reference< ::com::sun::star::form::XLoadable > (m_xForm, UNO_QUERY)->removeLoadListener(this); 2925*cdf0e10cSrcweir m_xForm->removeRowSetListener(this); 2926*cdf0e10cSrcweir m_xForm = NULL; 2927*cdf0e10cSrcweir m_eState = DISPOSED; 2928*cdf0e10cSrcweir } 2929*cdf0e10cSrcweir } 2930*cdf0e10cSrcweir 2931*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2932*cdf0e10cSrcweir void SAL_CALL LoadFormHelper::loaded(const ::com::sun::star::lang::EventObject& /*aEvent*/) throw( RuntimeException ) 2933*cdf0e10cSrcweir { 2934*cdf0e10cSrcweir ::osl::MutexGuard aGuard(m_aAccessSafety); 2935*cdf0e10cSrcweir DBG_ASSERT(m_eState == STARTED || m_eState == DISPOSED, "LoadFormHelper::loaded : wrong call !"); 2936*cdf0e10cSrcweir if (m_eState == STARTED) 2937*cdf0e10cSrcweir m_eState = LOADED; 2938*cdf0e10cSrcweir } 2939*cdf0e10cSrcweir 2940*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2941*cdf0e10cSrcweir void SAL_CALL LoadFormHelper::unloaded(const ::com::sun::star::lang::EventObject& /*aEvent*/) throw( RuntimeException ) 2942*cdf0e10cSrcweir { 2943*cdf0e10cSrcweir ::osl::MutexGuard aGuard(m_aAccessSafety); 2944*cdf0e10cSrcweir DBG_ERROR("LoadFormHelper::unloaded : shouldn't be called !"); 2945*cdf0e10cSrcweir implDispose(); 2946*cdf0e10cSrcweir } 2947*cdf0e10cSrcweir 2948*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2949*cdf0e10cSrcweir void SAL_CALL LoadFormHelper::unloading(const ::com::sun::star::lang::EventObject& /*aEvent*/) throw( RuntimeException ) 2950*cdf0e10cSrcweir { 2951*cdf0e10cSrcweir } 2952*cdf0e10cSrcweir 2953*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2954*cdf0e10cSrcweir void SAL_CALL LoadFormHelper::reloading(const ::com::sun::star::lang::EventObject& /*aEvent*/) throw( RuntimeException ) 2955*cdf0e10cSrcweir { 2956*cdf0e10cSrcweir } 2957*cdf0e10cSrcweir 2958*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2959*cdf0e10cSrcweir void SAL_CALL LoadFormHelper::reloaded(const ::com::sun::star::lang::EventObject& /*aEvent*/) throw( RuntimeException ) 2960*cdf0e10cSrcweir { 2961*cdf0e10cSrcweir } 2962*cdf0e10cSrcweir 2963*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2964*cdf0e10cSrcweir void SAL_CALL LoadFormHelper::cursorMoved(const ::com::sun::star::lang::EventObject& /*event*/) throw( RuntimeException ) 2965*cdf0e10cSrcweir { 2966*cdf0e10cSrcweir ::osl::MutexGuard aGuard(m_aAccessSafety); 2967*cdf0e10cSrcweir if (m_eState == LOADED) 2968*cdf0e10cSrcweir m_eState = POSITIONED; 2969*cdf0e10cSrcweir } 2970*cdf0e10cSrcweir 2971*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2972*cdf0e10cSrcweir void SAL_CALL LoadFormHelper::rowChanged(const ::com::sun::star::lang::EventObject& /*event*/) throw( RuntimeException ) 2973*cdf0e10cSrcweir { 2974*cdf0e10cSrcweir } 2975*cdf0e10cSrcweir 2976*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2977*cdf0e10cSrcweir void SAL_CALL LoadFormHelper::rowSetChanged(const ::com::sun::star::lang::EventObject& /*event*/) throw( RuntimeException ) 2978*cdf0e10cSrcweir { 2979*cdf0e10cSrcweir } 2980*cdf0e10cSrcweir 2981*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2982*cdf0e10cSrcweir void SAL_CALL LoadFormHelper::disposing(const ::com::sun::star::lang::EventObject& /*Source*/) throw( RuntimeException ) 2983*cdf0e10cSrcweir { 2984*cdf0e10cSrcweir ::osl::MutexGuard aGuard(m_aAccessSafety); 2985*cdf0e10cSrcweir implDispose(); 2986*cdf0e10cSrcweir } 2987*cdf0e10cSrcweir 2988*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2989*cdf0e10cSrcweir void LoadFormHelper::cancel() 2990*cdf0e10cSrcweir { 2991*cdf0e10cSrcweir implDispose(); 2992*cdf0e10cSrcweir } 2993*cdf0e10cSrcweir 2994*cdf0e10cSrcweir //------------------------------------------------------------------------------ 2995*cdf0e10cSrcweir bool LoadFormHelper::WaitUntilReallyLoaded(bool _bOnlyIfLoaded) 2996*cdf0e10cSrcweir { 2997*cdf0e10cSrcweir ::osl::ResettableMutexGuard aGuard( m_aAccessSafety ); 2998*cdf0e10cSrcweir if (DISPOSED == m_eState) 2999*cdf0e10cSrcweir return false; 3000*cdf0e10cSrcweir 3001*cdf0e10cSrcweir if (_bOnlyIfLoaded && (STARTED == m_eState)) 3002*cdf0e10cSrcweir // we did't get a "loaded" event .... 3003*cdf0e10cSrcweir return false; 3004*cdf0e10cSrcweir 3005*cdf0e10cSrcweir sal_Bool bDone = (POSITIONED == m_eState); 3006*cdf0e10cSrcweir aGuard.clear(); 3007*cdf0e10cSrcweir 3008*cdf0e10cSrcweir while (!bDone) 3009*cdf0e10cSrcweir { 3010*cdf0e10cSrcweir aGuard.reset(); 3011*cdf0e10cSrcweir bDone = (POSITIONED == m_eState); 3012*cdf0e10cSrcweir aGuard.clear(); 3013*cdf0e10cSrcweir } 3014*cdf0e10cSrcweir 3015*cdf0e10cSrcweir aGuard.reset(); 3016*cdf0e10cSrcweir implDispose(); 3017*cdf0e10cSrcweir 3018*cdf0e10cSrcweir return true; 3019*cdf0e10cSrcweir } 3020*cdf0e10cSrcweir 3021*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 3022*cdf0e10cSrcweir sal_Int16 SbaXDataBrowserController::getCurrentColumnPosition() 3023*cdf0e10cSrcweir { 3024*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::getCurrentColumnPosition" ); 3025*cdf0e10cSrcweir Reference< ::com::sun::star::form::XGrid > xGrid(getBrowserView()->getGridControl(), UNO_QUERY); 3026*cdf0e10cSrcweir sal_Int16 nViewPos = -1; 3027*cdf0e10cSrcweir try 3028*cdf0e10cSrcweir { 3029*cdf0e10cSrcweir if ( xGrid.is() ) 3030*cdf0e10cSrcweir nViewPos = xGrid->getCurrentColumnPosition(); 3031*cdf0e10cSrcweir } 3032*cdf0e10cSrcweir catch(Exception&) {} 3033*cdf0e10cSrcweir return nViewPos; 3034*cdf0e10cSrcweir } 3035*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 3036*cdf0e10cSrcweir void SbaXDataBrowserController::setCurrentColumnPosition( sal_Int16 _nPos ) 3037*cdf0e10cSrcweir { 3038*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::setCurrentColumnPosition" ); 3039*cdf0e10cSrcweir Reference< ::com::sun::star::form::XGrid > xGrid(getBrowserView()->getGridControl(), UNO_QUERY); 3040*cdf0e10cSrcweir try 3041*cdf0e10cSrcweir { 3042*cdf0e10cSrcweir if ( -1 != _nPos ) 3043*cdf0e10cSrcweir xGrid->setCurrentColumnPosition(_nPos); 3044*cdf0e10cSrcweir } 3045*cdf0e10cSrcweir catch(Exception&) {} 3046*cdf0e10cSrcweir } 3047*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 3048*cdf0e10cSrcweir void SbaXDataBrowserController::BeforeDrop() 3049*cdf0e10cSrcweir { 3050*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::BeforeDrop" ); 3051*cdf0e10cSrcweir Reference< ::com::sun::star::sdb::XSQLErrorBroadcaster > xFormError(getRowSet(), UNO_QUERY); 3052*cdf0e10cSrcweir if (xFormError.is()) 3053*cdf0e10cSrcweir xFormError->removeSQLErrorListener((::com::sun::star::sdb::XSQLErrorListener*)this); 3054*cdf0e10cSrcweir } 3055*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 3056*cdf0e10cSrcweir void SbaXDataBrowserController::AfterDrop() 3057*cdf0e10cSrcweir { 3058*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::AfterDrop" ); 3059*cdf0e10cSrcweir Reference< ::com::sun::star::sdb::XSQLErrorBroadcaster > xFormError(getRowSet(), UNO_QUERY); 3060*cdf0e10cSrcweir if (xFormError.is()) 3061*cdf0e10cSrcweir xFormError->addSQLErrorListener((::com::sun::star::sdb::XSQLErrorListener*)this); 3062*cdf0e10cSrcweir } 3063*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 3064*cdf0e10cSrcweir void SbaXDataBrowserController::addColumnListeners(const Reference< ::com::sun::star::awt::XControlModel > & _xGridControlModel) 3065*cdf0e10cSrcweir { 3066*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::addColumnListeners" ); 3067*cdf0e10cSrcweir // ... all the grid columns 3068*cdf0e10cSrcweir Reference< ::com::sun::star::container::XIndexContainer > xColumns(_xGridControlModel, UNO_QUERY); 3069*cdf0e10cSrcweir if (xColumns.is()) 3070*cdf0e10cSrcweir { 3071*cdf0e10cSrcweir sal_Int32 nCount = xColumns->getCount(); 3072*cdf0e10cSrcweir for (sal_uInt16 i=0; i < nCount; ++i) 3073*cdf0e10cSrcweir { 3074*cdf0e10cSrcweir Reference< XPropertySet > xCol(xColumns->getByIndex(i),UNO_QUERY); 3075*cdf0e10cSrcweir AddColumnListener(xCol); 3076*cdf0e10cSrcweir } 3077*cdf0e10cSrcweir } 3078*cdf0e10cSrcweir } 3079*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 3080*cdf0e10cSrcweir sal_Bool SbaXDataBrowserController::InitializeGridModel(const Reference< ::com::sun::star::form::XFormComponent > & /*xGrid*/) 3081*cdf0e10cSrcweir { 3082*cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaui", "Ocke.Janssen@sun.com", "SbaXDataBrowserController::InitializeGridModel" ); 3083*cdf0e10cSrcweir return sal_True; 3084*cdf0e10cSrcweir } 3085*cdf0e10cSrcweir //.................................................................. 3086*cdf0e10cSrcweir } // namespace dbaui 3087*cdf0e10cSrcweir //.................................................................. 3088