diff options
-rw-r--r-- | include/vbahelper/vbaapplicationbase.hxx | 2 | ||||
-rw-r--r-- | oovbaapi/ooo/vba/XApplicationBase.idl | 1 | ||||
-rw-r--r-- | vbahelper/source/vbahelper/vbaapplicationbase.cxx | 34 |
3 files changed, 37 insertions, 0 deletions
diff --git a/include/vbahelper/vbaapplicationbase.hxx b/include/vbahelper/vbaapplicationbase.hxx index 4f392a5d332c..be2f6765e951 100644 --- a/include/vbahelper/vbaapplicationbase.hxx +++ b/include/vbahelper/vbaapplicationbase.hxx @@ -64,6 +64,8 @@ public: virtual void SAL_CALL setInteractive( sal_Bool bInteractive ) override; virtual sal_Bool SAL_CALL getVisible() override; virtual void SAL_CALL setVisible( sal_Bool bVisible ) override; + virtual OUString SAL_CALL getCaption() override; + virtual void SAL_CALL setCaption( const OUString& sCaption ) override; virtual void SAL_CALL OnKey( const OUString& Key, const css::uno::Any& Procedure ) override; virtual css::uno::Any SAL_CALL CommandBars( const css::uno::Any& aIndex ) override; virtual OUString SAL_CALL getVersion() override; diff --git a/oovbaapi/ooo/vba/XApplicationBase.idl b/oovbaapi/ooo/vba/XApplicationBase.idl index 90ba919407d4..4df45daad53e 100644 --- a/oovbaapi/ooo/vba/XApplicationBase.idl +++ b/oovbaapi/ooo/vba/XApplicationBase.idl @@ -32,6 +32,7 @@ interface XApplicationBase [attribute] boolean DisplayStatusBar; [attribute] boolean Interactive; [attribute] boolean Visible; + [attribute] string Caption; [attribute, readonly] string Version; [attribute, readonly] any VBE; diff --git a/vbahelper/source/vbahelper/vbaapplicationbase.cxx b/vbahelper/source/vbahelper/vbaapplicationbase.cxx index a0268237efe6..d550731cc89f 100644 --- a/vbahelper/source/vbahelper/vbaapplicationbase.cxx +++ b/vbahelper/source/vbahelper/vbaapplicationbase.cxx @@ -151,6 +151,7 @@ struct VbaApplicationBase_Impl final { VbaTimerHashMap m_aTimerHash; bool mbVisible; + OUString msCaption; VbaApplicationBase_Impl() : mbVisible( true ) {} @@ -262,6 +263,39 @@ void SAL_CALL VbaApplicationBase::setVisible( sal_Bool bVisible ) m_pImpl->mbVisible = bVisible; // dummy implementation } +OUString SAL_CALL VbaApplicationBase::getCaption() +{ + SbMethod* pMeth = StarBASIC::GetActiveMethod(); + if (!pMeth) + { + // When called from Automation clients, we don't even try, as there doesn't seem to be any + // good way to get at the actual "caption" (title) of the application's window (any of them, + // if there are several). We just keep a copy of a fake caption in the VbaApplicationBase_Impl. + return m_pImpl->msCaption; + } + + // No idea if this code, which uses APIs that apparently are related to StarBasic (check + // getCurrentDoc() in vbahelper.cxx), actually works any better. + uno::Reference< frame::XModel > xModel( getCurrentDocument(), uno::UNO_QUERY_THROW ); + uno::Reference< frame::XFrame > xFrame( xModel->getCurrentController()->getFrame(), uno::UNO_QUERY_THROW ); + return xFrame->getName(); +} + +void SAL_CALL VbaApplicationBase::setCaption( const OUString& sCaption ) +{ + // See comments in getCaption(). + + SbMethod* pMeth = StarBASIC::GetActiveMethod(); + if (!pMeth) + { + m_pImpl->msCaption = sCaption; + return; + } + + uno::Reference< frame::XModel > xModel( getCurrentDocument(), uno::UNO_QUERY_THROW ); + uno::Reference< frame::XFrame > xFrame( xModel->getCurrentController()->getFrame(), uno::UNO_QUERY_THROW ); + xFrame->setName( sCaption ); +} void SAL_CALL VbaApplicationBase::OnKey( const OUString& Key, const uno::Any& Procedure ) |