User: rt      
Date: 2007-07-24 12:04:35+0000
Modified:
   dba/dbaccess/source/core/dataaccess/databasedocument.cxx

Log:
 INTEGRATION: CWS dba23b (1.32.20); FILE MERGED
 2007/07/07 20:21:50 fs 1.32.20.2: during #i78593#: don't re-create the 
Settings property bag when it's not necessary
 2007/06/28 09:02:47 fs 1.32.20.1: #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]: databasedocument.cxx
Url: 
http://dba.openoffice.org/source/browse/dba/dbaccess/source/core/dataaccess/databasedocument.cxx?r1=1.32&r2=1.33
Delta lines:  +71 -42
---------------------
--- databasedocument.cxx        2007-04-16 16:23:47+0000        1.32
+++ databasedocument.cxx        2007-07-24 12:04:32+0000        1.33
@@ -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
@@ -252,8 +255,7 @@
                clearObjectContainer( m_pImpl->m_xTableDefinitions);
                clearObjectContainer( m_pImpl->m_xCommandDefinitions);
 
-               m_pImpl->m_aContainer.clear();
-               m_pImpl->lateInit();
+               m_pImpl->reset();
        }
        catch(const Exception&)
        {
@@ -338,9 +340,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 +348,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 +400,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 +408,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 +752,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 +772,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 +1110,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 +1135,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 +1217,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);
 }
 // 
-----------------------------------------------------------------------------




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to