User: kz      
Date: 05/06/30 09:33:01

Modified:
 /dba/dbaccess/source/ui/dlg/
  dbwizsetup.cxx

Log:
 INTEGRATION: CWS wizopendb (1.11.48); FILE MERGED
 2005/06/06 10:40:41 fs 1.11.48.1: #i42477# allow the 'New Database' wizard to 
load existing documents

File Changes:

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

File [changed]: dbwizsetup.cxx
Url: 
http://dba.openoffice.org/source/browse/dba/dbaccess/source/ui/dlg/dbwizsetup.cxx?r1=1.11&r2=1.12
Delta lines:  +187 -153
-----------------------
--- dbwizsetup.cxx      10 Mar 2005 16:49:38 -0000      1.11
+++ dbwizsetup.cxx      30 Jun 2005 16:32:58 -0000      1.12
@@ -191,6 +191,9 @@
 #ifndef _COMPHELPER_INTERACTION_HXX_
 #include <comphelper/interaction.hxx>
 #endif
+#ifndef _COMPHELPER_SEQUENCEASHASHMAP_HXX_
+#include <comphelper/sequenceashashmap.hxx>
+#endif
 
 #ifndef _COM_SUN_STAR_UCB_IOERRORCODE_HPP_
 #include <com/sun/star/ucb/IOErrorCode.hpp>
@@ -268,6 +271,7 @@
 #define THUNDERBIRD_PATH       17
 #define CREATENEW_PATH         18
 #define USERDEFINED_PATH       19
+#define OPEN_DOC_PATH          20
 
 OFinalDBPageSetup*          pFinalPage;
 
@@ -311,7 +315,6 @@
     m_sRM_FinalText = String(ResId(STR_PAGETITLE_FINAL));
     m_sWorkPath = SvtPathOptions().GetWorkPath();
     pFinalPage = NULL;
-//    m_sWizardTitle = String(ResId(STR_DBWIZARDTITLE));
        // extract the datasource type collection from the item set
        DbuTypeCollectionItem* pCollectionItem = 
PTR_CAST(DbuTypeCollectionItem, _pItems->GetItem(DSID_TYPECOLLECTION));
        if (pCollectionItem)
@@ -322,7 +325,7 @@
        FreeResource();
 
        m_pImpl = ::std::auto_ptr<ODbDataSourceAdministrationHelper>(new 
ODbDataSourceAdministrationHelper(_rxORB,this,this));
-       m_pImpl->setCurrentDataSourceName(_aDataSourceName);
+       m_pImpl->setDataSourceOrName(_aDataSourceName);
        Reference< XPropertySet > xDatasource = m_pImpl->getCurrentDataSource();
        m_pOutSet = new SfxItemSet( *_pItems->GetPool(), _pItems->GetRanges() );
 
@@ -426,6 +429,8 @@
     else
         declarePath( USERDEFINED_PATH, PAGE_DBSETUPWIZARD_INTRO, 
PAGE_DBSETUPWIZARD_USERDEFINED,PAGE_DBSETUPWIZARD_FINAL, WZS_INVALID_STATE);
 
+    declarePath( OPEN_DOC_PATH, PAGE_DBSETUPWIZARD_INTRO, WZS_INVALID_STATE );
+
     m_pPrevPage->SetHelpId(HID_DBWIZ_PREVIOUS);
        m_pNextPage->SetHelpId(HID_DBWIZ_NEXT);
        m_pCancel->SetHelpId(HID_DBWIZ_CANCEL);
@@ -433,7 +438,6 @@
        m_pHelp->SetUniqueId(UID_DBWIZ_HELP);
     SetRoadmapInteractive( sal_True );
        ActivatePage();
-//    setTitle(::rtl::OUString(m_sWizardTitle));
 }
 
 
@@ -512,117 +516,99 @@
 //-------------------------------------------------------------------------
 IMPL_LINK(ODbTypeWizDialogSetup, OnTypeSelected, OGeneralPage*, _pTabPage)
 {
-    activateDatabasePath(_pTabPage);
+    activateDatabasePath();
        return 1L;
 }
 
-
-void ODbTypeWizDialogSetup::activateDatabasePath(OGeneralPage* _pTabPage){
-    if (_pTabPage->IsDatabaseToBeCreated() == sal_True)
+//-------------------------------------------------------------------------
+void ODbTypeWizDialogSetup::activateDatabasePath()
+{
+    switch ( m_pGeneralPage->GetDatabaseCreationMode() )
+    {
+    case OGeneralPage::eCreateNew:
     {
         activatePath( CREATENEW_PATH, sal_True);
         enableState(PAGE_DBSETUPWIZARD_FINAL, sal_True );
                enableButtons( WZB_FINISH, sal_True);
     }
-    else
+    break;
+    case OGeneralPage::eConnectExternal:
     {
-               m_eType = VerifyDataSourceType(_pTabPage->GetSelectedType());
+               m_eType = 
VerifyDataSourceType(m_pGeneralPage->GetSelectedType());
         if (m_eType == DST_UNKNOWN)
             m_eType = m_eOldType;
-           switch ( m_eType )
-           {
-                   case DST_DBASE:
-                activatePath( DBASE_PATH, sal_True);
-                           break;
-
-                   case DST_ADO:
-                activatePath( ADO_PATH, sal_True);
-                           break;
-
-                   case DST_FLAT:
-                activatePath( TEXT_PATH, sal_True);
-                           break;
-
-                   case DST_CALC:
-                activatePath( SPREADSHEET_PATH, sal_True);
-                           break;
-
-                   case DST_ODBC:
-                activatePath( ODBC_PATH, sal_True);
-                           break;
-
-            case DST_JDBC:
-                activatePath( JDBC_PATH, sal_True);
-                break;
-
-            case DST_MYSQL_JDBC:
-                activatePath( MYSQL_JDBC_PATH, sal_True);
-                               break;
-
-            case DST_MYSQL_ODBC:
-                activatePath( MYSQL_ODBC_PATH, sal_True);
-                               break;
-
-                   case DST_ORACLE_JDBC:
-                activatePath( ORACLE_PATH, sal_True);
-                           break;
-
-                   case DST_ADABAS:
-                activatePath( ADABAS_PATH, sal_True);
-                           break;
 
-                   case DST_LDAP               :
-                activatePath( LDAP_PATH, sal_True);
-                           break;
-
-                   case DST_MSACCESS:
-                activatePath( MSACCESS_PATH, sal_True);
-                           break;
-
-            case DST_OUTLOOKEXP:
-                activatePath( OUTLOOKEXP_PATH, sal_True);
-                break;
-
-            case DST_OUTLOOK:
-                activatePath( OUTLOOK_PATH, sal_True);
-                break;
-
-            case DST_MOZILLA:
-                activatePath( MOZILLA_PATH, sal_True);
-                           break;
-
-            case DST_THUNDERBIRD:
-                activatePath( THUNDERBIRD_PATH, sal_True);
+        struct _map_type_to_path
+        {
+            DATASOURCE_TYPE             eType;
+            RoadmapWizardTypes::PathId  nPathId;
+        } aKnownTypesAndPaths[] = {
+            { DST_DBASE,        DBASE_PATH          },
+            { DST_ADO,          ADO_PATH            },
+            { DST_FLAT,         TEXT_PATH           },
+            { DST_CALC,         SPREADSHEET_PATH    },
+            { DST_ODBC,         ODBC_PATH           },
+            { DST_JDBC,         JDBC_PATH           },
+            { DST_MYSQL_JDBC,   MYSQL_JDBC_PATH     },
+            { DST_MYSQL_ODBC,   MYSQL_ODBC_PATH     },
+            { DST_ORACLE_JDBC,  ORACLE_PATH         },
+            { DST_ADABAS,       ADABAS_PATH         },
+            { DST_LDAP,         LDAP_PATH           },
+            { DST_MSACCESS,     MSACCESS_PATH       },
+            { DST_OUTLOOKEXP,   OUTLOOKEXP_PATH     },
+            { DST_OUTLOOK,      OUTLOOK_PATH        },
+            { DST_MOZILLA,      MOZILLA_PATH        },
+            { DST_THUNDERBIRD,  THUNDERBIRD_PATH    },
+            { DST_EVOLUTION,    EVOLUTION_PATH      },
+            { DST_USERDEFINE1,  USERDEFINED_PATH    },
+                   { DST_USERDEFINE2,  USERDEFINED_PATH    },
+                   { DST_USERDEFINE3,  USERDEFINED_PATH    },
+                   { DST_USERDEFINE4,  USERDEFINED_PATH    },
+                   { DST_USERDEFINE5,  USERDEFINED_PATH    },
+                   { DST_USERDEFINE6,  USERDEFINED_PATH    },
+                   { DST_USERDEFINE7,  USERDEFINED_PATH    },
+                   { DST_USERDEFINE8,  USERDEFINED_PATH    },
+                   { DST_USERDEFINE9,  USERDEFINED_PATH    },
+            { DST_USERDEFINE10, USERDEFINED_PATH    }
+        };
+
+        sal_Int32 i = 0;
+        for ( ; i < sizeof( aKnownTypesAndPaths ) / sizeof( 
aKnownTypesAndPaths[0] ); ++i )
+        {
+            if ( aKnownTypesAndPaths[i].eType == m_eType )
+            {
+                           activatePath( aKnownTypesAndPaths[i].nPathId, 
sal_True);
                            break;
-
-            case DST_EVOLUTION:
-                activatePath( EVOLUTION_PATH, sal_True);
+            }
+        }
+        DBG_ASSERT( i < sizeof( aKnownTypesAndPaths ) / sizeof( 
aKnownTypesAndPaths[0] ),
+            "ODbTypeWizDialogSetup::activateDatabasePath: unknown database 
type!" );
+        updateTypeDependentStates();
+    }
                 break;
-
-            case DST_USERDEFINE1:/// first user defined driver
-                       case DST_USERDEFINE2:
-                   case DST_USERDEFINE3:
-                   case DST_USERDEFINE4:
-                   case DST_USERDEFINE5:
-                   case DST_USERDEFINE6:
-                   case DST_USERDEFINE7:
-                   case DST_USERDEFINE8:
-                   case DST_USERDEFINE9:
-                   case DST_USERDEFINE10:
-                               activatePath( USERDEFINED_PATH, sal_True);      
                        
+    case OGeneralPage::eOpenExisting:
+    {
+        activatePath( OPEN_DOC_PATH, sal_True );
+        enableButtons( WZB_FINISH, 
m_pGeneralPage->GetSelectedDocument().sURL.Len() != 0 );
+    }
                            break;
                        default:
-                               OSL_ENSURE(0,"Unknown database type!");
-        }
-    ToggleFollowingRoadmapSteps();
+        DBG_ERROR( "ODbTypeWizDialogSetup::activateDatabasePath: unknown 
creation mode!" );
     }
-}
 
+    enableButtons( WZB_NEXT, m_pGeneralPage->GetDatabaseCreationMode() != 
OGeneralPage::eOpenExisting );
+        // TODO: this should go into the base class. Point is, we activate a 
path whose *last*
+        // step is also the current one. The base class should automatically 
disable
+        // the Next button in such a case. However, not for this patch ...
+}
 
-void ODbTypeWizDialogSetup::ToggleFollowingRoadmapSteps(){
+//-------------------------------------------------------------------------
+void ODbTypeWizDialogSetup::updateTypeDependentStates()
+{
     sal_Bool bDoEnable = sal_False;
     sal_Bool bIsConnectionRequired = IsConnectionUrlRequired();
-    if (!bIsConnectionRequired){
+    if (!bIsConnectionRequired)
+    {
         bDoEnable = sal_True;
     }
     else
@@ -638,7 +624,9 @@
 }
 
 
-sal_Bool ODbTypeWizDialogSetup::IsConnectionUrlRequired(){
+//-------------------------------------------------------------------------
+sal_Bool ODbTypeWizDialogSetup::IsConnectionUrlRequired()
+{
        DATASOURCE_TYPE eType = getDatasourceType(*m_pOutSet);
        switch ( m_eType )
     {
@@ -654,8 +642,6 @@
     }
 }
 
-
-
 //-------------------------------------------------------------------------
 void ODbTypeWizDialogSetup::resetPages(const Reference< XPropertySet >& 
_rxDatasource)
 {
@@ -754,7 +740,9 @@
                        pPage = static_cast<OGenericAdministrationPage*> 
(pFirstPage);
                        m_pGeneralPage = static_cast<OGeneralPage*>(pFirstPage);
             m_pGeneralPage->SetTypeSelectHandler(LINK(this, 
ODbTypeWizDialogSetup, OnTypeSelected));
-            m_pGeneralPage->SetClickHandler(LINK( this, ODbTypeWizDialogSetup, 
ImplCreateDBHdl ) );
+            m_pGeneralPage->SetCreationModeHandler(LINK( this, 
ODbTypeWizDialogSetup, OnChangeCreationMode ) );
+            m_pGeneralPage->SetDocumentSelectionHandler(LINK( this, 
ODbTypeWizDialogSetup, OnRecentDocumentSelected ) );
+            m_pGeneralPage->SetChooseDocumentHandler(LINK( this, 
ODbTypeWizDialogSetup, OnSingleDocumentChosen ) );
                        break;
 
                case PAGE_DBSETUPWIZARD_DBASE:
@@ -862,6 +850,7 @@
 }
 
 
+// 
-----------------------------------------------------------------------------
 IMPL_LINK(ODbTypeWizDialogSetup, ImplClickHdl, OMySQLIntroPageSetup*, 
_pMySQLIntroPageSetup)
 {
        if (getDatasourceType(*m_pOutSet) == DST_MYSQL_ODBC)
@@ -871,13 +860,27 @@
     return sal_True;
 }
 
-
-IMPL_LINK(ODbTypeWizDialogSetup, ImplCreateDBHdl, OGeneralPage*, _pGeneralPage)
+// 
-----------------------------------------------------------------------------
+IMPL_LINK(ODbTypeWizDialogSetup, OnChangeCreationMode, OGeneralPage*, 
_pGeneralPage)
 { 
-    activateDatabasePath(_pGeneralPage);
+    activateDatabasePath();
     return sal_True;
 }
 
+// 
-----------------------------------------------------------------------------
+IMPL_LINK(ODbTypeWizDialogSetup, OnRecentDocumentSelected, OGeneralPage*, 
_pGeneralPage)
+{
+    enableButtons( WZB_FINISH, 
m_pGeneralPage->GetSelectedDocument().sURL.Len() != 0 );
+    return 0L;
+}
+
+// 
-----------------------------------------------------------------------------
+IMPL_LINK(ODbTypeWizDialogSetup, OnSingleDocumentChosen, OGeneralPage*, 
_pGeneralPage)
+{
+    if ( prepareLeaveCurrentState( eFinish ) )
+        onFinish( RET_OK );
+    return 0L;
+}
 
 // 
-----------------------------------------------------------------------------
 void ODbTypeWizDialogSetup::enterState(WizardState _nState)
@@ -889,10 +892,6 @@
                case PAGE_DBSETUPWIZARD_INTRO:
                        m_eOldType = m_eType;
                        break;
-//        case PAGE_DBSETUPWIZARD_FINAL:
-//            OGeneralPage* pPage = 
static_cast<OGeneralPage*>(WizardDialog::GetPage(getCurrentState()));
-//            pPage->SetToCreationMode(sal_False);
-//            break;
         case PAGE_DBSETUPWIZARD_FINAL:
             enableButtons( WZB_FINISH, sal_True);   
             
pFinalPage->enableTableWizardCheckBox(m_pCollection->supportsTableCreation(m_eType));
@@ -931,10 +930,8 @@
 // 
-----------------------------------------------------------------------------
 void ODbTypeWizDialogSetup::setTitle(const ::rtl::OUString& _sTitle)
 {
-//     SetText(m_sWizardTitle);
 }
 
-
 //-------------------------------------------------------------------------
 sal_Bool ODbTypeWizDialogSetup::SaveDatabaseDocument()
 {
@@ -951,10 +948,8 @@
                        ::rtl::OUString sPath = 
m_pImpl->getDocumentUrl(*m_pOutSet);
                        if ( xStore.is() )
                        {
-                               if (m_pGeneralPage->IsDatabaseToBeCreated())
-                               {
+                if ( m_pGeneralPage->GetDatabaseCreationMode() == 
OGeneralPage::eCreateNew )
                                        CreateDatabase();
-                               }
                                Reference< XModel > xModel(xStore, UNO_QUERY);
 
                                Sequence<PropertyValue> aArgs = 
xModel->getArgs();
@@ -1021,17 +1016,31 @@
        }
     return sal_False;
 }
-// 
-----------------------------------------------------------------------------
-sal_Bool ODbTypeWizDialogSetup::IsDatabaseDocumentToBeOpened()
-{
-    return (pFinalPage != NULL) ? pFinalPage->IsDatabaseDocumentToBeOpened() : 
sal_True;
-}
-// 
-----------------------------------------------------------------------------
-sal_Bool ODbTypeWizDialogSetup::IsTableWizardToBeStarted()
-{
-    return (pFinalPage != NULL) && pFinalPage->IsTableWizardToBeStarted();
-}
-//-------------------------------------------------------------------------
+    // ------------------------------------------------------------------------
+    sal_Bool ODbTypeWizDialogSetup::IsDatabaseDocumentToBeOpened() const
+    {
+        if ( m_pGeneralPage->GetDatabaseCreationMode() == 
OGeneralPage::eOpenExisting )
+            return sal_True;
+
+        if ( pFinalPage != NULL )
+            return pFinalPage->IsDatabaseDocumentToBeOpened();
+
+        return sal_True;
+    }
+
+    // ------------------------------------------------------------------------
+    sal_Bool ODbTypeWizDialogSetup::IsTableWizardToBeStarted() const
+    {
+        if ( m_pGeneralPage->GetDatabaseCreationMode() == 
OGeneralPage::eOpenExisting )
+            return sal_False;
+
+        if ( pFinalPage != NULL )
+            return pFinalPage->IsTableWizardToBeStarted();
+
+        return sal_False;
+    }
+
+    //-------------------------------------------------------------------------
     void ODbTypeWizDialogSetup::CreateDatabase()
     {
                ::rtl::OUString sUrl;
@@ -1060,10 +1069,9 @@
                }
                m_pOutSet->Put(SfxStringItem(DSID_CONNECTURL, sUrl));
                m_pImpl->saveChanges(*m_pOutSet);
-
    }
 
-//-------------------------------------------------------------------------
+    //-------------------------------------------------------------------------
     void ODbTypeWizDialogSetup::RegisterDataSourceByLocation(const 
::rtl::OUString& _sPath)
     {
            Reference< XPropertySet > xDatasource = 
m_pImpl->getCurrentDataSource();
@@ -1076,17 +1084,14 @@
     }
 
 
-//-------------------------------------------------------------------------
-
+    //-------------------------------------------------------------------------
     short ODbTypeWizDialogSetup::Execute()
     {
         short nResult = ModalDialog::Execute();
         return nResult;
     }
 
-
-
-//-------------------------------------------------------------------------
+    //-------------------------------------------------------------------------
     sal_Bool ODbTypeWizDialogSetup::callSaveAsDialog()
     {
         sal_Bool bRet = sal_False;
@@ -1123,8 +1128,7 @@
         return bRet;
     }
 
-
-//-------------------------------------------------------------------------
+    //-------------------------------------------------------------------------
     void ODbTypeWizDialogSetup::createUniqueFolderName(INetURLObject* pURL)
     {
         Reference< XSimpleFileAccess > 
xSimpleFileAccess(getORB()->createInstance(::rtl::OUString::createFromAscii( 
"com.sun.star.ucb.SimpleFileAccess" )), UNO_QUERY);
@@ -1142,9 +1146,7 @@
         }
     }
 
-
-
-//-------------------------------------------------------------------------
+    //-------------------------------------------------------------------------
     void ODbTypeWizDialogSetup::createUniqueFileName(INetURLObject* pURL)
     {
         Reference< XSimpleFileAccess > 
xSimpleFileAccess(getORB()->createInstance(::rtl::OUString::createFromAscii( 
"com.sun.star.ucb.SimpleFileAccess" )), UNO_QUERY);
@@ -1173,6 +1175,38 @@
     // 
-----------------------------------------------------------------------------
     sal_Bool ODbTypeWizDialogSetup::onFinish(sal_Int32 _nResult)
     {
+        if ( m_pGeneralPage->GetDatabaseCreationMode() == 
OGeneralPage::eOpenExisting )
+        {
+            if ( !OWizardMachine::onFinish( _nResult ) )
+                return sal_False;
+
+            Reference< XModel > xModel( m_pImpl->getCurrentModel() );
+            DBG_ASSERT( xModel.is(), "ODbTypeWizDialogSetup::onFinish: no 
model?" );
+            if ( xModel.is() )
+            {
+                OGeneralPage::DocumentDescriptor aDocument( 
m_pGeneralPage->GetSelectedDocument() );
+
+                ::comphelper::SequenceAsHashMap aLoadArgs;
+                aLoadArgs.createItemIfMissing( ::rtl::OUString( 
RTL_CONSTASCII_USTRINGPARAM( "FileName" ) ),
+                    ::rtl::OUString( aDocument.sURL ) );
+                aLoadArgs.createItemIfMissing( ::rtl::OUString( 
RTL_CONSTASCII_USTRINGPARAM( "URL" ) ),
+                    ::rtl::OUString( aDocument.sURL ) );
+                aLoadArgs.createItemIfMissing( ::rtl::OUString( 
RTL_CONSTASCII_USTRINGPARAM( "FilterName" ) ),
+                    ::rtl::OUString( aDocument.sFilter ) );
+                try
+                {
+                    xModel->attachResource( aDocument.sURL, 
aLoadArgs.getAsConstPropertyValueList() );
+                }
+                catch( const Exception& e )
+                {
+                    DBG_ERROR( "ODbTypeWizDialogSetup::onFinish: caught an 
exception while loading the document!" );
+                    (void)e;
+                }
+            }
+
+            return sal_True;
+        }
+
         if (getCurrentState() != PAGE_DBSETUPWIZARD_FINAL)
         {
             skipUntil(PAGE_DBSETUPWIZARD_FINAL);




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

Reply via email to