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]

Reply via email to