Tag: cws_src680_odbmacros2
User: fs      
Date: 2007-12-13 11:21:30+0000
Modified:
   dba/dbaccess/source/ui/misc/singledoccontroller.cxx

Log:
 #i49133# +getAssociatedModel / some minor refactoring, mostly related to the 
m_xCurrentFrame->m_aCurrentFrame change

File Changes:

Directory: /dba/dbaccess/source/ui/misc/
========================================

File [changed]: singledoccontroller.cxx
Url: 
http://dba.openoffice.org/source/browse/dba/dbaccess/source/ui/misc/singledoccontroller.cxx?r1=1.22&r2=1.22.98.1
Delta lines:  +162 -67
----------------------
--- singledoccontroller.cxx     2007-07-06 08:38:03+0000        1.22
+++ singledoccontroller.cxx     2007-12-13 11:21:27+0000        1.22.98.1
@@ -4,9 +4,9 @@
  *
  *  $RCSfile: singledoccontroller.cxx,v $
  *
- *  $Revision: 1.22 $
+ *  $Revision: 1.22.98.1 $
  *
- *  last change: $Author: rt $ $Date: 2007/07/06 08:38:03 $
+ *  last change: $Author: fs $ $Date: 2007/12/13 11:21:27 $
  *
  *  The Contents of this file are made available subject to
  *  the terms of GNU Lesser General Public License Version 2.1.
@@ -103,32 +103,83 @@
 namespace dbaui
 {
 //........................................................................
-    using namespace ::com::sun::star;
-       using namespace uno;
-       using namespace beans;
-       using namespace lang;
-       using namespace container;
-       using namespace sdbc;
-    using namespace sdb;
-       using namespace frame;
-       using namespace util;
+
+    /** === begin UNO using === **/
+    using ::com::sun::star::uno::Any;
+    using ::com::sun::star::uno::Reference;
+    using ::com::sun::star::beans::XPropertySet;
+    using ::com::sun::star::util::XNumberFormatter;
+    using ::com::sun::star::lang::XMultiServiceFactory;
+    using ::com::sun::star::uno::RuntimeException;
+    using ::com::sun::star::uno::Sequence;
+    using ::com::sun::star::uno::Type;
+    using ::com::sun::star::sdbc::XConnection;
+    using ::com::sun::star::uno::UNO_QUERY;
+    using ::com::sun::star::container::XChild;
+    using ::com::sun::star::sdbc::XDataSource;
+    using ::com::sun::star::util::XNumberFormatter;
+    using ::com::sun::star::util::XNumberFormatsSupplier;
+    using ::com::sun::star::frame::XFrame;
+    using ::com::sun::star::uno::Exception;
+    using ::com::sun::star::sdbc::SQLException;
+    using ::com::sun::star::lang::EventObject;
+    using ::com::sun::star::beans::PropertyValue;
+    using ::com::sun::star::frame::XModel;
+    using ::com::sun::star::sdb::XOfficeDatabaseDocument;
+    using ::com::sun::star::awt::XWindow;
+    using ::com::sun::star::sdbc::XDatabaseMetaData;
+    using ::com::sun::star::sdb::XDocumentDataSource;
+    /** === end UNO using === **/
+
+    class DataSourceHolder
+    {
+    public:
+        DataSourceHolder()
+        {
+        }
+
+        DataSourceHolder( const Reference< XDataSource >& _rxDataSource )
+        {
+            m_xDataSource = _rxDataSource;
+            Reference< XDocumentDataSource > xDocDS( m_xDataSource, UNO_QUERY 
);
+            if ( xDocDS.is() )
+                m_xDocument = xDocDS->getDatabaseDocument();
+
+            m_xDataSourceProps.set( m_xDataSource, UNO_QUERY );
+        }
+
+        const Reference< XDataSource >&             getDataSource() const { 
return m_xDataSource; }
+        const Reference< XPropertySet >&            getDataSourceProps() const 
{ return m_xDataSourceProps; }
+        const Reference< XOfficeDatabaseDocument >  getDatabaseDocument() 
const { return m_xDocument; }
+
+        bool is() const { return m_xDataSource.is(); }
+
+        void clear()
+        {
+            m_xDataSource.clear();
+            m_xDocument.clear();
+        }
+
+    private:
+        Reference< XDataSource >                m_xDataSource;
+        Reference< XPropertySet >               m_xDataSourceProps;
+        Reference< XOfficeDatabaseDocument >    m_xDocument;
+    };
 
     struct OSingleDocumentControllerImpl
     {
         OModuleClient m_aModuleClient;
-               uno::Any m_aCurrentError; // contains the current error which 
can be set through IEnvironment
+               Any                             m_aCurrentError; // contains 
the current error which can be set through IEnvironment
 
                // <properties>
         SharedConnection            m_xConnection;
         ::dbtools::DatabaseMetaData m_aSdbMetaData;
                // </properties>
                ::rtl::OUString m_sDataSourceName;              // the data 
source we're working for
-               uno::Reference< beans::XPropertySet >
-                                               m_xDataSource;
-               uno::Reference< util::XNumberFormatter >        
-                                               m_xFormatter;   // a number 
formatter working with the connection's NumberFormatsSupplier
-               ModelControllerConnector
-                        m_aModelConnector;
+               DataSourceHolder                m_aDataSource;
+        Reference< XModel >             m_xDocument;
+               Reference< XNumberFormatter >   m_xFormatter;   // a number 
formatter working with the connection's NumberFormatsSupplier
+               ModelControllerConnector        m_aModelConnector;
                sal_Bool                m_bSuspended     : 1;   // is true when 
the controller was already suspended
                sal_Bool                m_bEditable              : 1;   // is 
the control readonly or not
                sal_Bool                m_bModified              : 1;   // is 
the data modified
@@ -190,7 +241,7 @@
                // get the data source the connection belongs to
                try
                {
-                       if ( !m_pImpl->m_xDataSource.is() )
+                       if ( !m_pImpl->m_aDataSource.is() )
                        {
                                Reference< XChild > xConnAsChild( 
m_pImpl->m_xConnection, UNO_QUERY );
                                Reference< XDataSource > xDS;
@@ -198,18 +249,19 @@
                                        xDS = Reference< XDataSource >( 
xConnAsChild->getParent(), UNO_QUERY );
 
                                // (take the indirection through XDataSource to 
ensure we have a correct object ....)
-                               m_pImpl->m_xDataSource.set(xDS,UNO_QUERY);
-                               DBG_ASSERT( m_pImpl->m_xDataSource.is(), 
"OSingleDocumentController::initializeConnection: could not retrieve the data 
source!" );
+                               m_pImpl->m_aDataSource = xDS;
                        }
 
-                       if ( m_pImpl->m_xDataSource.is() )
+            Reference< XPropertySet > xDataSourceProps( 
m_pImpl->m_aDataSource.getDataSourceProps() );
+                       DBG_ASSERT( xDataSourceProps.is(), 
"OSingleDocumentController::initializeConnection: could not retrieve a valid 
data source!" );
+                       if ( xDataSourceProps.is() )
                        {
-                               m_pImpl->m_xDataSource->getPropertyValue( 
PROPERTY_NAME ) >>= m_pImpl->m_sDataSourceName;
+                               xDataSourceProps->getPropertyValue( 
PROPERTY_NAME ) >>= m_pImpl->m_sDataSourceName;
                                DBG_ASSERT( 
m_pImpl->m_sDataSourceName.getLength(), 
"OSingleDocumentController::initializeConnection: invalid data source name!" );
                                Reference< XNumberFormatsSupplier> xSupplier = 
::dbtools::getNumberFormats(m_pImpl->m_xConnection);
                                if(xSupplier.is())
                                {
-                                       m_pImpl->m_xFormatter = Reference< 
util::XNumberFormatter >(getORB()
+                                       m_pImpl->m_xFormatter = Reference< 
XNumberFormatter >(getORB()
                                                
->createInstance(::rtl::OUString::createFromAscii("com.sun.star.util.NumberFormatter")),
 UNO_QUERY);
                                        
m_pImpl->m_xFormatter->attachNumberFormatsSupplier(xSupplier);
                                }
@@ -242,7 +294,7 @@
                // now really reconnect ...
                if ( bReConnect )
         {
-            m_pImpl->m_xConnection.reset( connect( 
Reference<XDataSource>(m_pImpl->m_xDataSource,UNO_QUERY), sal_True ), 
SharedConnection::TakeOwnership );
+            m_pImpl->m_xConnection.reset( connect( 
m_pImpl->m_aDataSource.getDataSource(), sal_True ), 
SharedConnection::TakeOwnership );
             m_pImpl->m_aSdbMetaData.reset( m_pImpl->m_xConnection );
         }
 
@@ -277,7 +329,7 @@
 
                attachFrame( Reference < XFrame >() );
 
-               m_pImpl->m_xDataSource.clear();
+               m_pImpl->m_aDataSource.clear();
        }
 
        //--------------------------------------------------------------------
@@ -343,7 +395,7 @@
                @param  _aException
                        contains a description of the error or the error 
directly
        */
-       void OSingleDocumentController::appendError(const sdbc::SQLException& 
_aException)
+       void OSingleDocumentController::appendError(const SQLException& 
_aException)
        {
                
concatSQLExceptions(m_pImpl->m_aCurrentError,makeAny(_aException));
        }
@@ -359,7 +411,7 @@
                @param  _rException
                        will contain the current error
        */
-       void OSingleDocumentController::getError(sdbc::SQLException& 
_rException ) const
+       void OSingleDocumentController::getError(SQLException& _rException ) 
const
        {
                m_pImpl->m_aCurrentError >>= _rException;
        }
@@ -456,34 +508,27 @@
         if ( isFeatureSupported( ID_BROWSER_SAVEASDOC ) )
                    InvalidateFeature(ID_BROWSER_SAVEASDOC);
        }
+
        // 
-----------------------------------------------------------------------------
-       Reference< XModel >  SAL_CALL OSingleDocumentController::getModel(void) 
throw( RuntimeException )
+       Reference< XModel > OSingleDocumentController::getAssociatedModel() 
const
        {
-               return NULL;//Reference< XModel 
>(m_pImpl->m_xDataSource,UNO_QUERY); // OJ: i31891
+        return Reference< XModel >( 
m_pImpl->m_aDataSource.getDatabaseDocument(), UNO_QUERY );
        }
-       // 
-----------------------------------------------------------------------------
-       sal_Bool SAL_CALL OSingleDocumentController::attachModel(const 
Reference< XModel > & _rxModel) throw( RuntimeException )
-       {
-               ::osl::MutexGuard aGuard( m_aMutex );   
-
-        Reference< XOfficeDatabaseDocument > xOfficeDoc( _rxModel, UNO_QUERY );
-        m_pImpl->m_xDataSource.set( xOfficeDoc.is() ? 
xOfficeDoc->getDataSource() : Reference<XDataSource>(), UNO_QUERY );
 
-        return sal_True;
-       }
        // 
-----------------------------------------------------------------------------
        ::rtl::OUString OSingleDocumentController::getDataSourceName() const
        { 
                ::rtl::OUString sName;
-               if ( m_pImpl->m_xDataSource.is() )
-                       m_pImpl->m_xDataSource->getPropertyValue(PROPERTY_NAME) 
>>= sName;
+        Reference< XPropertySet > xDataSourceProps( 
m_pImpl->m_aDataSource.getDataSourceProps() );
+               if ( xDataSourceProps.is() )
+                       xDataSourceProps->getPropertyValue(PROPERTY_NAME) >>= 
sName;
                return sName; 
        }
        // 
-----------------------------------------------------------------------------
        void OSingleDocumentController::connectionLostMessage() const
        {
                String aMessage(ModuleRes(RID_STR_CONNECTION_LOST));
-               Reference< awt::XWindow> xWindow = getTopMostContainerWindow();
+               Reference< XWindow > xWindow = getTopMostContainerWindow();
                Window* pWin = NULL;
                if ( xWindow.is() )
                        pWin = VCLUnoHelper::GetWindow(xWindow);
@@ -493,27 +538,77 @@
                InfoBox(pWin, aMessage).Execute();
        }
        // 
-----------------------------------------------------------------------------
-       const Reference< XConnection >&
-                                       
OSingleDocumentController::getConnection() const 
+       const Reference< XConnection >& 
OSingleDocumentController::getConnection() const 
        { 
                return m_pImpl->m_xConnection; 
        }
+
+    // 
-----------------------------------------------------------------------------
+    sal_Bool OSingleDocumentController::isReadOnly() const
+    {
+        return !m_pImpl->m_bEditable;
+    }
+
+       // 
-----------------------------------------------------------------------------
+       sal_Bool OSingleDocumentController::isEditable() const
+    {
+        return m_pImpl->m_bEditable;
+    }
+
+       // 
-----------------------------------------------------------------------------
+       sal_Bool OSingleDocumentController::isModified() const
+    {
+        return m_pImpl->m_bModified;
+    }
+
+       // 
-----------------------------------------------------------------------------
+    void OSingleDocumentController::setEditable(sal_Bool _bEditable)
+    {
+        m_pImpl->m_bEditable = _bEditable;
+    }
+
        // 
-----------------------------------------------------------------------------
-    sal_Bool           OSingleDocumentController::isReadOnly()                 
const { return !m_pImpl->m_bEditable; }
-       sal_Bool                OSingleDocumentController::isEditable()         
        const { return m_pImpl->m_bEditable; }
-       sal_Bool                OSingleDocumentController::isModified()         
        const { return m_pImpl->m_bModified; }
-    void            OSingleDocumentController::setEditable(sal_Bool 
_bEditable)          { m_pImpl->m_bEditable = _bEditable; }
-    const ::dbtools::DatabaseMetaData& 
OSingleDocumentController::getSdbMetaData() const { return 
m_pImpl->m_aSdbMetaData; }
-    sal_Bool       OSingleDocumentController::isConnected() const { return 
m_pImpl->m_xConnection.is(); }
-    uno::Reference< sdbc::XDatabaseMetaData >
-                                       OSingleDocumentController::getMetaData( 
) const 
-    { 
-        return isConnected() ? m_pImpl->m_xConnection->getMetaData() : 
uno::Reference< sdbc::XDatabaseMetaData >(); 
-    }
-    const uno::Reference< beans::XPropertySet >&
-                                       
OSingleDocumentController::getDataSource() const { return 
m_pImpl->m_xDataSource; }
-    sal_Bool   OSingleDocumentController::haveDataSource() const { return 
m_pImpl->m_xDataSource.is(); }
-    uno::Reference< util::XNumberFormatter >   
OSingleDocumentController::getNumberFormatter() const   { return 
m_pImpl->m_xFormatter; }
+    const ::dbtools::DatabaseMetaData& 
OSingleDocumentController::getSdbMetaData() const
+    {
+        return m_pImpl->m_aSdbMetaData;
+    }
+
+       // 
-----------------------------------------------------------------------------
+    sal_Bool OSingleDocumentController::isConnected() const
+    {
+        return m_pImpl->m_xConnection.is();
+    }
+
+       // 
-----------------------------------------------------------------------------
+    Reference< XDatabaseMetaData > OSingleDocumentController::getMetaData( ) 
const 
+    { 
+        return isConnected() ? m_pImpl->m_xConnection->getMetaData() : 
Reference< XDatabaseMetaData >(); 
+    }
+
+       // 
-----------------------------------------------------------------------------
+    const Reference< XPropertySet >& 
OSingleDocumentController::getDataSource() const
+    {
+        return m_pImpl->m_aDataSource.getDataSourceProps();
+    }
+
+       // 
-----------------------------------------------------------------------------
+    sal_Bool OSingleDocumentController::haveDataSource() const
+    {
+        return m_pImpl->m_aDataSource.is();
+    }
+
+       // 
-----------------------------------------------------------------------------
+    Reference< XModel > OSingleDocumentController::getDatabaseDocument() const
+    {
+        return Reference< XModel >( 
m_pImpl->m_aDataSource.getDatabaseDocument(), UNO_QUERY );
+    }
+
+       // 
-----------------------------------------------------------------------------
+    Reference< XNumberFormatter > 
OSingleDocumentController::getNumberFormatter() const
+    {
+        return m_pImpl->m_xFormatter;
+    }
+
 //........................................................................
 }      // namespace dbaui
 //........................................................................




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

Reply via email to