Kaydet (Commit) 857a3340 authored tarafından Tor Lillqvist's avatar Tor Lillqvist

Add Caption property to ooo::vba::XApplicationBase

Implementation is just a dummy, though. At first I thought that it
would work to get the XModel of the "current" document (as returned by
getCurrentDocument()), and then get the XFrame of that, and then use
the XFrame's getName() and setName(). But, it seems that
getCurrentDocument() and what it calls is tightly coupled to
StarBasic, and it doesn't do anything sane in the case of Automation
clients.

Change-Id: I74ded5114ecce06e72862f69d0c06d963e55fd75
Reviewed-on: https://gerrit.libreoffice.org/55064Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarTor Lillqvist <tml@collabora.com>
üst e02b3b09
...@@ -64,6 +64,8 @@ public: ...@@ -64,6 +64,8 @@ public:
virtual void SAL_CALL setInteractive( sal_Bool bInteractive ) override; virtual void SAL_CALL setInteractive( sal_Bool bInteractive ) override;
virtual sal_Bool SAL_CALL getVisible() override; virtual sal_Bool SAL_CALL getVisible() override;
virtual void SAL_CALL setVisible( sal_Bool bVisible ) 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 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 css::uno::Any SAL_CALL CommandBars( const css::uno::Any& aIndex ) override;
virtual OUString SAL_CALL getVersion() override; virtual OUString SAL_CALL getVersion() override;
......
...@@ -32,6 +32,7 @@ interface XApplicationBase ...@@ -32,6 +32,7 @@ interface XApplicationBase
[attribute] boolean DisplayStatusBar; [attribute] boolean DisplayStatusBar;
[attribute] boolean Interactive; [attribute] boolean Interactive;
[attribute] boolean Visible; [attribute] boolean Visible;
[attribute] string Caption;
[attribute, readonly] string Version; [attribute, readonly] string Version;
[attribute, readonly] any VBE; [attribute, readonly] any VBE;
......
...@@ -151,6 +151,7 @@ struct VbaApplicationBase_Impl final ...@@ -151,6 +151,7 @@ struct VbaApplicationBase_Impl final
{ {
VbaTimerHashMap m_aTimerHash; VbaTimerHashMap m_aTimerHash;
bool mbVisible; bool mbVisible;
OUString msCaption;
VbaApplicationBase_Impl() : mbVisible( true ) {} VbaApplicationBase_Impl() : mbVisible( true ) {}
...@@ -262,6 +263,39 @@ void SAL_CALL VbaApplicationBase::setVisible( sal_Bool bVisible ) ...@@ -262,6 +263,39 @@ void SAL_CALL VbaApplicationBase::setVisible( sal_Bool bVisible )
m_pImpl->mbVisible = bVisible; // dummy implementation 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 void SAL_CALL
VbaApplicationBase::OnKey( const OUString& Key, const uno::Any& Procedure ) VbaApplicationBase::OnKey( const OUString& Key, const uno::Any& Procedure )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment