Tag: cws_src680_dba23b User: fs Date: 2007-06-28 09:02:50+0000 Modified: dba/dbaccess/source/core/dataaccess/ModelImpl.cxx dba/dbaccess/source/core/dataaccess/ModelImpl.hxx dba/dbaccess/source/core/dataaccess/databasedocument.cxx dba/dbaccess/source/core/dataaccess/databasedocument.hxx
Log: #i78362# controllers and current controller now maintained by the DatabaseDocument, not by the ModelImpl (since they're an XModel aspect) File Changes: Directory: /dba/dbaccess/source/core/dataaccess/ ================================================ File [changed]: ModelImpl.cxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/core/dataaccess/ModelImpl.cxx?r1=1.18&r2=1.18.60.1 Delta lines: +8 -23 -------------------- --- ModelImpl.cxx 2006-12-13 16:44:58+0000 1.18 +++ ModelImpl.cxx 2007-06-28 09:02:47+0000 1.18.60.1 @@ -4,9 +4,9 @@ * * $RCSfile: ModelImpl.cxx,v $ * - * $Revision: 1.18 $ + * $Revision: 1.18.60.1 $ * - * last change: $Author: kz $ $Date: 2006/12/13 16:44:58 $ + * last change: $Author: fs $ $Date: 2007/06/28 09:02:47 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -48,6 +48,9 @@ #ifndef _TOOLS_DEBUG_HXX #include <tools/debug.hxx> #endif +#ifndef TOOLS_DIAGNOSE_EX_H +#include <tools/diagnose_ex.h> +#endif #ifndef _CPPUHELPER_TYPEPROVIDER_HXX_ #include <cppuhelper/typeprovider.hxx> #endif @@ -574,14 +577,13 @@ { Reference< XDataSource > xDS( m_xDataSource ); ::comphelper::disposeComponent( xDS ); - m_xDataSource = WeakReference< XDataSource >(); Reference< XModel > xModel( m_xModel ); ::comphelper::disposeComponent( xModel ); - m_xModel = WeakReference< XModel >(); } catch( const Exception& ) { + DBG_UNHANDLED_EXCEPTION(); } m_xDataSource = WeakReference<XDataSource>(); m_xModel = WeakReference< XModel >(); @@ -597,9 +599,6 @@ clearConnections(); - disposeControllerFrames(); - - m_xCurrentController = NULL; m_xNumberFormatsSupplier = NULL; try @@ -873,21 +872,7 @@ OSL_ENSURE(0,"ODatabaseModelImpl::setModified: Exception caught!"); } } -// ----------------------------------------------------------------------------- -void ODatabaseModelImpl::disposeControllerFrames() -{ - ::std::vector< Reference< XController> > aCopy = m_aControllers; - ::std::vector< Reference< XController> >::iterator aIter = aCopy.begin(); - ::std::vector< Reference< XController> >::iterator aEnd = aCopy.end(); - for (;aIter != aEnd ; ++aIter) - { - if ( aIter->is() ) - { - Reference< XFrame> xFrame = (*aIter)->getFrame(); - ::comphelper::disposeComponent(xFrame); - } - } -} + // ----------------------------------------------------------------------------- Reference<XDataSource> ODatabaseModelImpl::getDataSource( bool _bCreateIfNecessary ) { File [changed]: ModelImpl.hxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/core/dataaccess/ModelImpl.hxx?r1=1.14.66.1&r2=1.14.66.2 Delta lines: +2 -10 -------------------- --- ModelImpl.hxx 2007-06-12 13:17:53+0000 1.14.66.1 +++ ModelImpl.hxx 2007-06-28 09:02:47+0000 1.14.66.2 @@ -4,9 +4,9 @@ * * $RCSfile: ModelImpl.hxx,v $ * - * $Revision: 1.14.66.1 $ + * $Revision: 1.14.66.2 $ * - * last change: $Author: fs $ $Date: 2007/06/12 13:17:53 $ + * last change: $Author: fs $ $Date: 2007/06/28 09:02:47 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -213,8 +213,6 @@ //============================================================ DECLARE_STL_USTRINGACCESS_MAP(::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >,TStorages); -typedef ::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController > > ControllerArray; - class ODatabaseContext; class DocumentStorageAccess; class OSharedConnectionManager; @@ -242,7 +240,6 @@ ::std::vector<TContentPtr> m_aContainer; TStorages m_aStorages; - ControllerArray m_aControllers; ::com::sun::star::uno::WeakReference< ::com::sun::star::container::XNameAccess > m_xCommandDefinitions; ::com::sun::star::uno::WeakReference< ::com::sun::star::container::XNameAccess > m_xTableDefinitions; @@ -287,7 +284,6 @@ // ::cppu::OInterfaceContainerHelper m_aStorageListeners; ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener> m_xSharedConnectionManager; - ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController> m_xCurrentController; ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage > m_xStorage; ODatabaseContext* m_pDBContext; @@ -320,10 +316,6 @@ SAL_THROW(( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException )); - /** dispose all frames for registered controllers - */ - void disposeControllerFrames(); - ODatabaseModelImpl( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory , const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel>& _xModel = ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel>() File [changed]: databasedocument.cxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/core/dataaccess/databasedocument.cxx?r1=1.32&r2=1.32.20.1 Delta lines: +73 -43 --------------------- --- databasedocument.cxx 2007-04-16 16:23:47+0000 1.32 +++ databasedocument.cxx 2007-06-28 09:02:47+0000 1.32.20.1 @@ -4,9 +4,9 @@ * * $RCSfile: databasedocument.cxx,v $ * - * $Revision: 1.32 $ + * $Revision: 1.32.20.1 $ * - * last change: $Author: ihi $ $Date: 2007/04/16 16:23:47 $ + * last change: $Author: fs $ $Date: 2007/06/28 09:02:47 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -82,6 +82,9 @@ #ifndef _URLOBJ_HXX #include <tools/urlobj.hxx> #endif +#ifndef TOOLS_DIAGNOSE_EX_H +#include <tools/diagnose_ex.h> +#endif #ifndef _ERRCODE_HXX #include <tools/errcode.hxx> #endif @@ -338,9 +341,7 @@ void SAL_CALL ODatabaseDocument::connectController( const Reference< XController >& _xController ) throw (RuntimeException) { ModelMethodGuard aGuard( *this ); - OSL_ENSURE(m_pImpl.is(),"Impl is NULL"); - - m_pImpl->m_aControllers.push_back(_xController); + m_aControllers.push_back( _xController ); } // ----------------------------------------------------------------------------- void SAL_CALL ODatabaseDocument::disconnectController( const Reference< XController >& _xController ) throw (RuntimeException) @@ -348,15 +349,15 @@ ModelMethodGuard aGuard( *this ); OSL_ENSURE(m_pImpl.is(),"Impl is NULL"); - ControllerArray::iterator pos = ::std::find( m_pImpl->m_aControllers.begin(), m_pImpl->m_aControllers.end(), _xController ); - OSL_ENSURE( pos != m_pImpl->m_aControllers.end(), "ODatabaseDocument::disconnectController: don't know this controller!" ); - if ( pos != m_pImpl->m_aControllers.end() ) - m_pImpl->m_aControllers.erase( pos ); + Controllers::iterator pos = ::std::find( m_aControllers.begin(), m_aControllers.end(), _xController ); + OSL_ENSURE( pos != m_aControllers.end(), "ODatabaseDocument::disconnectController: don't know this controller!" ); + if ( pos != m_aControllers.end() ) + m_aControllers.erase( pos ); - if ( m_pImpl->m_xCurrentController == _xController ) - m_pImpl->m_xCurrentController = NULL; + if ( m_xCurrentController == _xController ) + m_xCurrentController = NULL; - if ( m_pImpl->m_aControllers.empty() ) + if ( m_aControllers.empty() ) { // if this was the last view, close the document as a whole // #i51157# / 2006-03-16 / [EMAIL PROTECTED] @@ -400,7 +401,7 @@ ModelMethodGuard aGuard( *this ); OSL_ENSURE(m_pImpl.is(),"Impl is NULL"); - return m_pImpl->m_xCurrentController.is() ? m_pImpl->m_xCurrentController : ( m_pImpl->m_aControllers.empty() ? Reference< XController >() : *m_pImpl->m_aControllers.begin() ); + return m_xCurrentController.is() ? m_xCurrentController : ( m_aControllers.empty() ? Reference< XController >() : *m_aControllers.begin() ); } // ----------------------------------------------------------------------------- void SAL_CALL ODatabaseDocument::setCurrentController( const Reference< XController >& _xController ) throw (NoSuchElementException, RuntimeException) @@ -408,7 +409,7 @@ ModelMethodGuard aGuard( *this ); OSL_ENSURE(m_pImpl.is(),"Impl is NULL"); - m_pImpl->m_xCurrentController = _xController; + m_xCurrentController = _xController; } // ----------------------------------------------------------------------------- Reference< XInterface > SAL_CALL ODatabaseDocument::getCurrentSelection( ) throw (RuntimeException) @@ -752,17 +753,17 @@ } return xContainer; } + // ----------------------------------------------------------------------------- void ODatabaseDocument::impl_closeControllerFrames( sal_Bool _bDeliverOwnership ) { - ::std::vector< Reference< XController> > aCopy = m_pImpl->m_aControllers; + Controllers aCopy = m_aControllers; - ::std::vector< Reference< XController> >::iterator aIter = aCopy.begin(); - ::std::vector< Reference< XController> >::iterator aEnd = aCopy.end(); - for ( ;aIter != aEnd ; ++aIter ) - { - if ( aIter->is() ) + for ( Controllers::iterator aIter = aCopy.begin(); aIter != aCopy.end() ; ++aIter ) { + if ( !aIter->is() ) + continue; + try { Reference< XCloseable> xFrame( (*aIter)->getFrame(), UNO_QUERY ); @@ -772,10 +773,37 @@ catch( const CloseVetoException& ) { throw; } catch( const Exception& ) { - OSL_ENSURE( sal_False, "ODatabaseDocument::impl_closeControllerFrames: caught an unexpected exception!" ); + DBG_UNHANDLED_EXCEPTION(); + } } +} + +// ----------------------------------------------------------------------------- +struct DisposeControllerFrame : public ::std::unary_function< Reference< XController >, void > +{ + void operator()( const Reference< XController >& _rxController ) const + { + try + { + if ( !_rxController.is() ) + return; + + Reference< XFrame > xFrame( _rxController->getFrame() ); + ::comphelper::disposeComponent( xFrame ); } + catch( const Exception& ) + { + DBG_UNHANDLED_EXCEPTION(); } + }; +}; + +// ----------------------------------------------------------------------------- +void ODatabaseDocument::impl_disposeControllerFrames_nothrow() +{ + Controllers aCopy; + aCopy.swap( m_aControllers ); // ensure m_aControllers is empty afterwards + ::std::for_each( aCopy.begin(), aCopy.end(), DisposeControllerFrame() ); } // ----------------------------------------------------------------------------- @@ -1083,7 +1111,7 @@ return; } - DBG_ASSERT( m_pImpl->m_aControllers.empty(), "ODatabaseDocument::disposing: there still are controllers!" ); + DBG_ASSERT( m_aControllers.empty(), "ODatabaseDocument::disposing: there still are controllers!" ); // normally, nobody should explicitly dispose, but only XCloseable::close the document. And upon // closing, our controllers are closed, too @@ -1108,7 +1136,8 @@ // now, at the latest, the controller array should be empty. Controllers are // expected to listen for our disposal, and disconnect then - DBG_ASSERT( m_pImpl->m_aControllers.empty(), "ODatabaseDocument::disposing: there still are controllers!" ); + DBG_ASSERT( m_aControllers.empty(), "ODatabaseDocument::disposing: there still are controllers!" ); + impl_disposeControllerFrames_nothrow(); } m_pImpl.clear(); @@ -1189,18 +1218,19 @@ } // ----------------------------------------------------------------------------- struct CreateAny : public ::std::unary_function< Reference<XController>, Any> - { +{ Any operator() (const Reference<XController>& lhs) const { return makeAny(lhs); } - }; +}; + // XModel2 Reference< XEnumeration > SAL_CALL ODatabaseDocument::getControllers( ) throw (RuntimeException) { ModelMethodGuard aGuard( *this ); - uno::Sequence< Any> aController(m_pImpl->m_aControllers.size()); - ::std::transform(m_pImpl->m_aControllers.begin(),m_pImpl->m_aControllers.end(),aController.getArray(),CreateAny()); + uno::Sequence< Any> aController( m_aControllers.size() ); + ::std::transform( m_aControllers.begin(), m_aControllers.end(), aController.getArray(), CreateAny() ); return new ::comphelper::OAnyEnumeration(aController); } // ----------------------------------------------------------------------------- File [changed]: databasedocument.hxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/core/dataaccess/databasedocument.hxx?r1=1.12&r2=1.12.22.1 Delta lines: +13 -3 -------------------- --- databasedocument.hxx 2007-04-16 16:24:16+0000 1.12 +++ databasedocument.hxx 2007-06-28 09:02:47+0000 1.12.22.1 @@ -4,9 +4,9 @@ * * $RCSfile: databasedocument.hxx,v $ * - * $Revision: 1.12 $ + * $Revision: 1.12.22.1 $ * - * last change: $Author: ihi $ $Date: 2007/04/16 16:24:16 $ + * last change: $Author: fs $ $Date: 2007/06/28 09:02:47 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -92,6 +92,9 @@ //........................................................................ class ODatabaseContext; + +typedef ::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController > > Controllers; + //============================================================ //= ODatabaseDocument //============================================================ @@ -120,6 +123,9 @@ ::cppu::OInterfaceContainerHelper m_aCloseListener; ::cppu::OInterfaceContainerHelper m_aDocEventListeners; + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController > m_xCurrentController; + Controllers m_aControllers; + ::com::sun::star::uno::WeakReference< ::com::sun::star::container::XNameAccess > m_xForms; ::com::sun::star::uno::WeakReference< ::com::sun::star::container::XNameAccess > m_xReports; @@ -333,6 +339,10 @@ */ void impl_closeControllerFrames( sal_Bool _bDeliverOwnership ); + /** disposes the frames of all controllers which are still left in m_aControllers. + */ + void impl_disposeControllerFrames_nothrow(); + /** does a reparenting at the given object container to ourself Calls XChild::setParent at the given object, which must be one of our impl's or our --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
