User: vg Date: 05/02/17 03:05:31 Modified: /dba/dbaccess/source/filter/xml/ dbloader2.cxx
Log: INTEGRATION: CWS dba23 (1.5.8); FILE MERGED 2005/02/03 13:09:39 oj 1.5.8.3: RESYNC: (1.5-1.6); FILE MERGED 2005/01/24 14:50:25 fs 1.5.8.2: #i10000# 2005/01/20 16:27:10 oj 1.5.8.1: #i41043# implement private:factory/sdatabase?Interactive File Changes: Directory: /dba/dbaccess/source/filter/xml/ =========================================== File [changed]: dbloader2.cxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/filter/xml/dbloader2.cxx?r1=1.6&r2=1.7 Delta lines: +144 -46 ---------------------- --- dbloader2.cxx 2 Feb 2005 14:00:07 -0000 1.6 +++ dbloader2.cxx 17 Feb 2005 11:05:28 -0000 1.7 @@ -98,6 +98,12 @@ #ifndef _COM_SUN_STAR_BEANS_NAMEDVALUE_HPP_ #include <com/sun/star/beans/NamedValue.hpp> #endif +#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_ +#include <com/sun/star/beans/XPropertySet.hpp> +#endif +#ifndef _COM_SUN_STAR_UI_DIALOGS_XEXECUTABLEDIALOG_HPP_ +#include <com/sun/star/ui/dialogs/XExecutableDialog.hpp> +#endif #ifndef _COM_SUN_STAR_IO_XINPUTSTREAM_HPP_ #include <com/sun/star/io/XInputStream.hpp> #endif @@ -165,6 +171,12 @@ #ifndef _COMPHELPER_STLTYPES_HXX_ #include <comphelper/stl_types.hxx> #endif +#ifndef _COM_SUN_STAR_TASK_XJOBEXECUTOR_HPP_ +#include <com/sun/star/task/XJobExecutor.hpp> +#endif +#ifndef _SV_MSGBOX_HXX +#include <vcl/msgbox.hxx> +#endif using namespace ::ucb; using namespace ::com::sun::star::task; @@ -177,6 +189,7 @@ using namespace ::com::sun::star::lang; using namespace ::com::sun::star::document; using namespace ::com::sun::star::registry; +using namespace ::com::sun::star::ui::dialogs; // ------------------------------------------------------------------------- namespace dbaxml @@ -275,6 +288,11 @@ Reference< XLoadEventListener > m_xListener; Reference< XFrame > m_xFrame; Reference< XMultiServiceFactory > m_xServiceFactory; + Reference< XFrameLoader > m_xMySelf; + ::rtl::OUString m_sCurrentURL; + sal_Int32 m_nStartWizard; + + DECL_LINK( OnStartTableWizard, void* ); public: DBContentLoader(const Reference< XMultiServiceFactory >&); ~DBContentLoader(); @@ -302,6 +320,7 @@ DBContentLoader::DBContentLoader(const Reference< XMultiServiceFactory >& _rxFactory) :m_xServiceFactory(_rxFactory) + ,m_nStartWizard(0) { } // ------------------------------------------------------------------------- @@ -420,9 +439,53 @@ } } - Reference< XController > xController(m_xServiceFactory->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.dbu.OApplicationController"))),UNO_QUERY); + sal_Bool bStartTableWizard = sal_False; + + if ( bInteractive ) + { + Sequence< Any > aArgs(2); + Reference< ::com::sun::star::awt::XWindow> xWindow; + // get the top most window + if ( rFrame.is() ) + { + xWindow = rFrame->getContainerWindow(); + Reference<XFrame> xFrame = rFrame; + while ( xFrame.is() && !xFrame->isTop() ) + { + xFrame.set(xFrame->getCreator(),UNO_QUERY); + } + if ( xFrame.is() ) + xWindow = xFrame->getContainerWindow(); + } + // the parent window + aArgs[0] <<= PropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParentWindow")), + 0, + makeAny(xWindow), + PropertyState_DIRECT_VALUE); + aArgs[1] <<= PropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("InitialSelection")), + 0, + makeAny(xModel), + PropertyState_DIRECT_VALUE); + + // create the dialog + Reference< XExecutableDialog > xAdminDialog( + m_xServiceFactory->createInstanceWithArguments(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sdb.DatabaseWizardDialog")),aArgs), UNO_QUERY); + + // execute it + if ( bSuccess = xAdminDialog.is() && RET_OK == xAdminDialog->execute() ) + { + Reference<XPropertySet> xProp(xAdminDialog,UNO_QUERY); + xProp->getPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("OpenDatabase"))) >>= bSuccess; + xProp->getPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("StartTableWizard"))) >>= bStartTableWizard; + } + } + + Reference< XController > xController; + if ( bSuccess ) + { + xController.set(m_xServiceFactory->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.dbu.OApplicationController"))),UNO_QUERY); - if ( bSuccess && (bSuccess = ( xController.is() && xModel.is() )) ) + if ( bSuccess = ( xController.is() && xModel.is() ) ) { xController->attachModel(xModel); xModel->connectController( xController ); @@ -458,12 +521,12 @@ bSuccess = sal_False; } } + } if (bSuccess && rListener.is()) { if ( xController.is() && rFrame.is() ) xController->attachFrame(rFrame); - try { Reference< ::com::sun::star::document::XEventListener > xDocEventBroadcaster(m_xServiceFactory->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.GlobalEventBroadcaster"))), @@ -479,6 +542,16 @@ OSL_ENSURE(0,"Could not create GlobalEventBroadcaster!"); } rListener->loadFinished(this); + + if ( bStartTableWizard ) + { + // reset the data of the previous async drop (if any) + if ( m_nStartWizard ) + Application::RemoveUserEvent(m_nStartWizard); + m_sCurrentURL = xModel->getURL(); + m_xMySelf = this; + m_nStartWizard = Application::PostUserEvent(LINK(this, DBContentLoader, OnStartTableWizard)); + } } else if (!bSuccess && rListener.is()) rListener->loadCancelled(this); @@ -488,7 +561,31 @@ void DBContentLoader::cancel(void) throw() { } +// ----------------------------------------------------------------------------- +IMPL_LINK( DBContentLoader, OnStartTableWizard, void*, NOTINTERESTEDIN ) +{ + m_nStartWizard = 0; + try + { + Sequence< Any > aWizArgs(1); + PropertyValue aValue; + aValue.Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DatabaseLocation")); + aValue.Value <<= m_sCurrentURL; + aWizArgs[0] <<= aValue; + + ::vos::OGuard aGuard(Application::GetSolarMutex()); + Reference< XJobExecutor > xTableWizard(m_xServiceFactory->createInstanceWithArguments(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.wizards.table.CallTableWizard")),aWizArgs),UNO_QUERY); + if ( xTableWizard.is() ) + xTableWizard->trigger(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("start"))); + } + catch(const Exception&) + { + OSL_ENSURE(sal_False, "caught an exception while starting the table wizard!"); + } + m_xMySelf = NULL; + return 0L; +} } // ------------------------------------------------------------------------- extern "C" void SAL_CALL createRegistryInfo_DBContentLoader2() @@ -513,3 +610,4 @@ xNewKey = xLoaderKey->createKey( ::rtl::OUString::createFromAscii("Pattern") ); xNewKey->setAsciiValue( ::rtl::OUString::createFromAscii("private:factory/sdatabase") ); } +// ----------------------------------------------------------------------------- --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
