summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/vbahelper/vbaapplicationbase.hxx2
-rw-r--r--oovbaapi/ooo/vba/XApplicationBase.idl1
-rw-r--r--vbahelper/source/vbahelper/vbaapplicationbase.cxx34
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 )