diff options
author | Frank Schoenheit [fs] <frank.schoenheit@sun.com> | 2010-02-16 15:43:53 +0100 |
---|---|---|
committer | Frank Schoenheit [fs] <frank.schoenheit@sun.com> | 2010-02-16 15:43:53 +0100 |
commit | c6b2dff376fa217003808e6b001cd9c3eb113f5f (patch) | |
tree | c23a566011b5f9d4564c697a713e30b8acfe153a /dbaccess | |
parent | 110b7db42fa69b3d3ec29c629f2f91b6107fa61c (diff) |
autorecovery: recover non-document sub compontns hidden, too
Diffstat (limited to 'dbaccess')
-rw-r--r-- | dbaccess/source/core/recovery/subcomponentloader.cxx | 45 | ||||
-rw-r--r-- | dbaccess/source/core/recovery/subcomponentloader.hxx | 5 | ||||
-rw-r--r-- | dbaccess/source/core/recovery/subcomponentrecovery.cxx | 8 |
3 files changed, 50 insertions, 8 deletions
diff --git a/dbaccess/source/core/recovery/subcomponentloader.cxx b/dbaccess/source/core/recovery/subcomponentloader.cxx index 53d27bb93d47..5fd120a5009b 100644 --- a/dbaccess/source/core/recovery/subcomponentloader.cxx +++ b/dbaccess/source/core/recovery/subcomponentloader.cxx @@ -59,6 +59,7 @@ namespace dbaccess using ::com::sun::star::ucb::Command; using ::com::sun::star::ucb::XCommandProcessor; using ::com::sun::star::frame::XController2; + using ::com::sun::star::lang::XComponent; /** === end UNO using === **/ //==================================================================== @@ -67,10 +68,18 @@ namespace dbaccess struct DBACCESS_DLLPRIVATE SubComponentLoader_Data { const Reference< XCommandProcessor > xDocDefCommands; + const Reference< XComponent > xNonDocComponent; Reference< XWindow > xAppComponentWindow; SubComponentLoader_Data( const Reference< XCommandProcessor >& i_rDocumentDefinition ) :xDocDefCommands( i_rDocumentDefinition, UNO_SET_THROW ) + ,xNonDocComponent() + { + } + + SubComponentLoader_Data( const Reference< XComponent >& i_rNonDocumentComponent ) + :xDocDefCommands() + ,xNonDocComponent( i_rNonDocumentComponent, UNO_SET_THROW ) { } }; @@ -85,11 +94,21 @@ namespace dbaccess { try { - Command aCommandOpen; - aCommandOpen.Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "show" ) ); - - const sal_Int32 nCommandIdentifier = i_rData.xDocDefCommands->createCommandIdentifier(); - i_rData.xDocDefCommands->execute( aCommandOpen, nCommandIdentifier, NULL ); + if ( i_rData.xDocDefCommands.is() ) + { + Command aCommandOpen; + aCommandOpen.Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "show" ) ); + + const sal_Int32 nCommandIdentifier = i_rData.xDocDefCommands->createCommandIdentifier(); + i_rData.xDocDefCommands->execute( aCommandOpen, nCommandIdentifier, NULL ); + } + else + { + const Reference< XController > xController( i_rData.xNonDocComponent, UNO_QUERY_THROW ); + const Reference< XFrame > xFrame( xController->getFrame(), UNO_SET_THROW ); + const Reference< XWindow > xWindow( xFrame->getContainerWindow(), UNO_SET_THROW ); + xWindow->setVisible( sal_True ); + } } catch( const Exception& ) { @@ -118,6 +137,22 @@ namespace dbaccess } //-------------------------------------------------------------------- + SubComponentLoader::SubComponentLoader( const Reference< XController >& i_rApplicationController, + const Reference< XComponent >& i_rNonDocumentComponent ) + :m_pData( new SubComponentLoader_Data( i_rNonDocumentComponent ) ) + { + // add as window listener to the controller's container window, so we get notified when it is shown + Reference< XController2 > xController( i_rApplicationController, UNO_QUERY_THROW ); + m_pData->xAppComponentWindow.set( xController->getComponentWindow(), UNO_SET_THROW ); + + osl_incrementInterlockedCount( &m_refCount ); + { + m_pData->xAppComponentWindow->addWindowListener( this ); + } + osl_decrementInterlockedCount( &m_refCount ); + } + + //-------------------------------------------------------------------- SubComponentLoader::~SubComponentLoader() { delete m_pData, m_pData = NULL; diff --git a/dbaccess/source/core/recovery/subcomponentloader.hxx b/dbaccess/source/core/recovery/subcomponentloader.hxx index 7efaea016724..f3bec5b6b39e 100644 --- a/dbaccess/source/core/recovery/subcomponentloader.hxx +++ b/dbaccess/source/core/recovery/subcomponentloader.hxx @@ -59,6 +59,11 @@ namespace dbaccess const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XCommandProcessor >& i_rSubDocumentDefinition ); + SubComponentLoader( + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController >& i_rApplicationController, + const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& i_rNonDocumentComponent + ); + // XWindowListener virtual void SAL_CALL windowResized( const ::com::sun::star::awt::WindowEvent& e ) throw (::com::sun::star::uno::RuntimeException); virtual void SAL_CALL windowMoved( const ::com::sun::star::awt::WindowEvent& e ) throw (::com::sun::star::uno::RuntimeException); diff --git a/dbaccess/source/core/recovery/subcomponentrecovery.cxx b/dbaccess/source/core/recovery/subcomponentrecovery.cxx index bcfc3131892f..0ae69402faeb 100644 --- a/dbaccess/source/core/recovery/subcomponentrecovery.cxx +++ b/dbaccess/source/core/recovery/subcomponentrecovery.cxx @@ -397,7 +397,6 @@ namespace dbaccess //-------------------------------------------------------------------- void SAL_CALL SettingsDocumentHandler::setDocumentLocator( const Reference< XLocator >& i_Locator ) throw (SAXException, RuntimeException) { - // TODO: place your code here (void)i_Locator; } @@ -645,8 +644,7 @@ namespace dbaccess // then load the query designer ::comphelper::NamedValueCollection aLoadArgs; aLoadArgs.put( "CurrentQueryDesign", aCurrentQueryDesign ); - - // TODO: load the thing hidden, and show when the main doc window is shown + aLoadArgs.put( "Hidden", true ); if ( i_rComponentName.getLength() ) { @@ -671,6 +669,10 @@ namespace dbaccess ); } + Reference< XController > xController( m_xDocumentUI, UNO_QUERY_THROW ); + Reference< XInterface > xLoader( *new SubComponentLoader( xController, xSubComponent ) ); + (void)xLoader; + return xSubComponent; } |