include/vcl/jsdialog/executor.hxx |    5 +++++
 include/vcl/toolkit/menubtn.hxx   |    2 ++
 include/vcl/weld.hxx              |    2 ++
 vcl/jsdialog/executor.cxx         |    6 ++++++
 vcl/source/control/menubtn.cxx    |   17 +++++++++++++++++
 5 files changed, 32 insertions(+)

New commits:
commit 9724250c50d8f890339aa44a1ae43ea81dfabb23
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Wed Mar 15 18:46:17 2023 +0100
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Wed Mar 15 19:21:31 2023 +0000

    jsdialog: dump menu for menubutton
    
    Change-Id: I449ae3f8cf294e2ab81a5b47862278e325f2cb1b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148937
    Tested-by: Szymon Kłos <szymon.k...@collabora.com>
    Reviewed-by: Szymon Kłos <szymon.k...@collabora.com>

diff --git a/include/vcl/jsdialog/executor.hxx 
b/include/vcl/jsdialog/executor.hxx
index 0c47066da9fa..40214fb465af 100644
--- a/include/vcl/jsdialog/executor.hxx
+++ b/include/vcl/jsdialog/executor.hxx
@@ -66,6 +66,11 @@ public:
         rDrawingArea.dblclick(rPos);
     }
 
+    static void trigger_selected(weld::MenuButton& rButton, const OString& 
rIdent)
+    {
+        rButton.signal_selected(rIdent);
+    }
+
     static void trigger_value_changed(weld::SpinButton& rSpinButton)
     {
         rSpinButton.signal_value_changed();
diff --git a/include/vcl/toolkit/menubtn.hxx b/include/vcl/toolkit/menubtn.hxx
index ca77a48c9fec..7bb43cadb864 100644
--- a/include/vcl/toolkit/menubtn.hxx
+++ b/include/vcl/toolkit/menubtn.hxx
@@ -92,6 +92,8 @@ public:
     virtual FactoryFunction GetUITestFactory() const override;
 
     void SetCurItemId();
+
+    virtual void DumpAsPropertyTree(tools::JsonWriter& rJsonWriter) override;
 };
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index a1966434355a..1a1e5ab4a223 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -1576,6 +1576,8 @@ struct VCL_DLLPUBLIC TriStateEnabled
 
 class VCL_DLLPUBLIC MenuButton : virtual public ToggleButton
 {
+    friend class ::LOKTrigger;
+
     Link<const OString&, void> m_aSelectHdl;
 
 protected:
diff --git a/vcl/jsdialog/executor.cxx b/vcl/jsdialog/executor.cxx
index 33e5884c74d2..997d0a515cc8 100644
--- a/vcl/jsdialog/executor.cxx
+++ b/vcl/jsdialog/executor.cxx
@@ -166,6 +166,12 @@ bool ExecuteAction(const std::string& nWindowId, const 
OString& rWidget, StringM
 
                     return true;
                 }
+                else if (sAction == "select")
+                {
+                    LOKTrigger::trigger_selected(
+                        *pButton, OUStringToOString(rData["data"], 
RTL_TEXTENCODING_ASCII_US));
+                    return true;
+                }
             }
         }
         else if (sControlType == "checkbox")
diff --git a/vcl/source/control/menubtn.cxx b/vcl/source/control/menubtn.cxx
index cd9b2095985e..64aec098db0f 100644
--- a/vcl/source/control/menubtn.cxx
+++ b/vcl/source/control/menubtn.cxx
@@ -265,6 +265,23 @@ void MenuButton::SetCurItemId(){
     msCurItemIdent = mpMenu->GetCurItemIdent();
 }
 
+void MenuButton::DumpAsPropertyTree(tools::JsonWriter& rJsonWriter)
+{
+    PushButton::DumpAsPropertyTree(rJsonWriter);
+
+    if (mpMenu)
+    {
+        auto aMenuNode = rJsonWriter.startArray("menu");
+        for (int i = 0; i < mpMenu->GetItemCount(); i++)
+        {
+            auto aEntryNode = rJsonWriter.startStruct();
+            auto sId = mpMenu->GetItemId(i);
+            rJsonWriter.put("id", mpMenu->GetItemIdent(sId));
+            rJsonWriter.put("text", mpMenu->GetItemText(sId));
+        }
+    }
+}
+
 //class MenuToggleButton ----------------------------------------------------
 
 MenuToggleButton::MenuToggleButton( vcl::Window* pParent, WinBits nWinBits )

Reply via email to