[Libreoffice-commits] core.git: oovbaapi/ooo sw/source

Tor Lillqvist tml at collabora.com
Thu Jun 7 11:05:26 UTC 2018


 oovbaapi/ooo/vba/word/XApplication.idl |   10 ++++++++++
 sw/source/ui/vba/vbaapplication.cxx    |   17 +++++++++++++++++
 sw/source/ui/vba/vbaapplication.hxx    |    2 ++
 3 files changed, 29 insertions(+)

New commits:
commit d9fc8b494be53bacffe45564e98da61ae5b28bd3
Author: Tor Lillqvist <tml at collabora.com>
Date:   Thu Jun 7 12:02:23 2018 +0300

    Add ooo.vba.word.Application.StatusBar property for debug output from client
    
    In many cases you don't want to use a bunch of MessageBox() calls in a
    VB6 client you are developing against LibreOffice, as that disrupts
    the working of the client. The developer might not mind, but other
    people trying it will be bothered by having to click through a stream
    of message boxes. Also, it is hard to correctly interpret the
    chronological sequence of LibreOffice's own debug output lines and
    such MessageBox() windows.
    
    WScript.Echo calls from a VBScript client are a bit better as they
    don't require any click-through, but still there is the problem of
    correlating with LibreOffice's own debug output.
    
    Setting this StatusBar property causes LibreOffice to output a
    SAL_INFO line with the tag "extensions.olebridge". Thus they are
    automatically merged with LibreOffice's own output and displayed in
    correct order.
    
    Sure, the intent of some existing 3rd-party client that sets this
    property would be to actually display a message in the status bar
    (whatever that corresponds to in LibreOffice), but until some such
    need is actually encountered, it's enough to just use it for this
    debug output functionality. After all, this property was not
    implemented at all earlier, so adding it now with somewhat special
    semantics is not a regression.
    
    (Note that on the Calc side, ooo.vba.excel.XApplication did have a
    StatusBar property already, and setting that does seem to attempt to
    display the text in some way. Possibly it should be enhanced to also
    do the SAL_INFO thing, for consistency? And possibly we should also
    have the message being displayed in the same fashion on the Writer
    side?)
    
    Change-Id: I5bf1e776d6401adfc43a558a2d919bd675298e1a
    Reviewed-on: https://gerrit.libreoffice.org/55413
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Tor Lillqvist <tml at collabora.com>

diff --git a/oovbaapi/ooo/vba/word/XApplication.idl b/oovbaapi/ooo/vba/word/XApplication.idl
index 62319f63a932..d061586b8de1 100644
--- a/oovbaapi/ooo/vba/word/XApplication.idl
+++ b/oovbaapi/ooo/vba/word/XApplication.idl
@@ -40,6 +40,16 @@ interface XApplication : XConnectable
     [attribute] long Height;
     [attribute] long Left;
     [attribute] long Top;
+    // Setting this displays the string in a SAL_INFO message with tag
+    // extensions.olebridge. Provides a way to get a message from an
+    // Automation client into LibreOffice's debug output. Less
+    // disruptive than a MessageBox() in a VB6 client, for instance.
+    // And makes it possible to get merged debug output from both the client
+    // and LibreOffice in proper synchronized order.
+    //
+    // Actually write-only but there is no way to say that in UNO IDL.
+    // The getter just returns an empty string.
+    [attribute] string StatusBar;
 
     any CommandBars( [in] any Index );
     any Documents( [in] any Index );
diff --git a/sw/source/ui/vba/vbaapplication.cxx b/sw/source/ui/vba/vbaapplication.cxx
index 37358d2cc51d..3fcfc12f3a1e 100644
--- a/sw/source/ui/vba/vbaapplication.cxx
+++ b/sw/source/ui/vba/vbaapplication.cxx
@@ -288,6 +288,23 @@ void SAL_CALL SwVbaApplication::setTop( sal_Int32 _top )
     pWindow->setTop( _top );
 }
 
+OUString SAL_CALL SwVbaApplication::getStatusBar()
+{
+    return OUString("");
+}
+
+void SAL_CALL SwVbaApplication::setStatusBar( const OUString& _statusbar )
+{
+    // Yes, we intentionally use the "extensions.olebridge" tag here even if this is sw. We
+    // interpret setting the StatusBar property as a request from an Automation client to display
+    // the string in LibreOffice's debug output, and all other generic Automation support debug
+    // output (in extensions/source/ole) uses that tag. If the check for "cross-module" or mixed log
+    // areas in compilerplugins/clang/sallogareas.cxx is re-activated, this will have to be added as
+    // a special case.
+
+    SAL_INFO("extensions.olebridge", "Client debug output: " << _statusbar);
+}
+
 float SAL_CALL SwVbaApplication::CentimetersToPoints( float Centimeters )
 {
     return VbaApplicationBase::CentimetersToPoints( Centimeters );
diff --git a/sw/source/ui/vba/vbaapplication.hxx b/sw/source/ui/vba/vbaapplication.hxx
index 9cf2da2a5dd8..c7e73dd6da26 100644
--- a/sw/source/ui/vba/vbaapplication.hxx
+++ b/sw/source/ui/vba/vbaapplication.hxx
@@ -85,6 +85,8 @@ public:
     virtual void SAL_CALL setLeft( sal_Int32 _left ) override;
     virtual sal_Int32 SAL_CALL getTop() override;
     virtual void SAL_CALL setTop( sal_Int32 _top ) override;
+    virtual OUString SAL_CALL getStatusBar() override;
+    virtual void SAL_CALL setStatusBar( const OUString& _statusbar ) override;
     virtual float SAL_CALL CentimetersToPoints( float Centimeters ) override;
     virtual void SAL_CALL ShowMe() override;
     virtual void SAL_CALL Resize( sal_Int32 Width, sal_Int32 Height ) override;


More information about the Libreoffice-commits mailing list