include/vcl/toolkit/button.hxx       |    4 ++
 vcl/inc/jsdialog/jsdialogbuilder.hxx |    8 +++++
 vcl/inc/salvtables.hxx               |   51 +++++++++++++++++++++++++++++++++
 vcl/jsdialog/enabled.cxx             |   26 ++++++++---------
 vcl/jsdialog/executor.cxx            |    5 +++
 vcl/jsdialog/jsdialogbuilder.cxx     |   18 +++++++++++
 vcl/source/app/salvtables.cxx        |   53 -----------------------------------
 vcl/source/control/button.cxx        |    2 +
 8 files changed, 101 insertions(+), 66 deletions(-)

New commits:
commit 95ee8a692cbc3f8ead72e61eb36b9015f1c57605
Author:     Pranam Lashkari <lpra...@collabora.com>
AuthorDate: Fri Mar 3 02:27:01 2023 +0530
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Sat Mar 4 19:52:07 2023 +0000

    jsdialog: sort enabled UI files by name
    
    this helps avoid repeating them
    
    Change-Id: Iaa1d73ca1e396c18a0486ca89cb3b0a26571569d
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148241
    Tested-by: Jenkins
    Reviewed-by: Szymon Kłos <szymon.k...@collabora.com>

diff --git a/vcl/jsdialog/enabled.cxx b/vcl/jsdialog/enabled.cxx
index 1916c8dfe41f..9a10f5bc0079 100644
--- a/vcl/jsdialog/enabled.cxx
+++ b/vcl/jsdialog/enabled.cxx
@@ -38,8 +38,8 @@ bool isBuilderEnabled(std::u16string_view rUIFile, bool 
bMobile)
         || rUIFile == u"cui/ui/macroselectordialog.ui"
         || rUIFile == u"cui/ui/numberingformatpage.ui"
         || rUIFile == u"cui/ui/password.ui"
-        || rUIFile == u"cui/ui/splitcellsdialog.ui"
         || rUIFile == u"cui/ui/similaritysearchdialog.ui"
+        || rUIFile == u"cui/ui/splitcellsdialog.ui"
         || rUIFile == u"cui/ui/widgettestdialog.ui"
         // scalc
         || rUIFile == u"modules/scalc/ui/analysisofvariancedialog.ui"
@@ -80,12 +80,12 @@ bool isBuilderEnabled(std::u16string_view rUIFile, bool 
bMobile)
         || rUIFile == u"modules/swriter/ui/captionoptions.ui"
         || rUIFile == u"modules/swriter/ui/contentcontroldlg.ui"
         || rUIFile == u"modules/swriter/ui/contentcontrollistitemdlg.ui"
+        || rUIFile == u"modules/swriter/ui/dropdownfielddialog.ui"
         || rUIFile == u"modules/swriter/ui/insertcaption.ui"
         || rUIFile == u"modules/swriter/ui/linenumbering.ui"
+        || rUIFile == u"modules/swriter/ui/pagenumberdlg.ui"
         || rUIFile == u"modules/swriter/ui/splittable.ui"
         || rUIFile == u"modules/swriter/ui/translationdialog.ui"
-        || rUIFile == u"modules/swriter/ui/pagenumberdlg.ui"
-        || rUIFile == u"modules/swriter/ui/dropdownfielddialog.ui"
         // sfx
         || rUIFile == u"sfx/ui/cmisinfopage.ui"
         || rUIFile == u"sfx/ui/custominfopage.ui"
@@ -105,19 +105,19 @@ bool isBuilderEnabled(std::u16string_view rUIFile, bool 
bMobile)
         // vcl
         || rUIFile == u"vcl/ui/wizard.ui"
         // xmlsec
-        || rUIFile == u"xmlsec/ui/certgeneral.ui"
-        || rUIFile == u"xmlsec/ui/certpage.ui"
-        || rUIFile == u"xmlsec/ui/digitalsignaturesdialog.ui"
-        || rUIFile == u"xmlsec/ui/viewcertdialog.ui"
-        || rUIFile == u"filter/ui/pdfoptionsdialog.ui"
         || rUIFile == u"filter/ui/pdfgeneralpage.ui"
-        || rUIFile == u"filter/ui/pdfviewpage.ui"
-        || rUIFile == u"filter/ui/pdfuserinterfacepage.ui"
-        || rUIFile == u"filter/ui/pdfsecuritypage.ui"
         || rUIFile == u"filter/ui/pdflinkspage.ui"
-        || rUIFile == u"filter/ui/warnpdfdialog.ui"
+        || rUIFile == u"filter/ui/pdfoptionsdialog.ui"
+        || rUIFile == u"filter/ui/pdfsecuritypage.ui"
         || rUIFile == u"filter/ui/pdfsignpage.ui"
+        || rUIFile == u"filter/ui/pdfuserinterfacepage.ui"
+        || rUIFile == u"filter/ui/pdfviewpage.ui"
+        || rUIFile == u"filter/ui/warnpdfdialog.ui"
         || rUIFile == u"writerperfect/ui/exportepub.ui"
+        || rUIFile == u"xmlsec/ui/certgeneral.ui"
+        || rUIFile == u"xmlsec/ui/certpage.ui"
+        || rUIFile == u"xmlsec/ui/digitalsignaturesdialog.ui"
+        || rUIFile == u"xmlsec/ui/viewcertdialog.ui"
         )
     {
         return true;
@@ -196,8 +196,8 @@ bool isBuilderEnabledForSidebar(std::u16string_view rUIFile)
         // swriter
         || rUIFile == u"modules/swriter/ui/managechangessidebar.ui"
         //|| rUIFile == u"modules/swriter/ui/navigatorpanel.ui"
-        || rUIFile == u"modules/swriter/ui/pageformatpanel.ui"
         || rUIFile == u"modules/swriter/ui/pagefooterpanel.ui"
+        || rUIFile == u"modules/swriter/ui/pageformatpanel.ui"
         || rUIFile == u"modules/swriter/ui/pageheaderpanel.ui"
         || rUIFile == u"modules/swriter/ui/pagestylespanel.ui"
         || rUIFile == u"modules/swriter/ui/sidebarstylepresets.ui"
commit 542cef171ceed4577c1c71735726b1e7c7c9c8c9
Author:     Pranam Lashkari <lpra...@collabora.com>
AuthorDate: Fri Mar 3 02:16:08 2023 +0530
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Sat Mar 4 19:51:58 2023 +0000

    JSDialog: implemented jsdialog support for the toggle buttons
    
    Change-Id: I21408f7344f7e100373c368036f81503302b93ad
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148240
    Tested-by: Jenkins
    Reviewed-by: Szymon Kłos <szymon.k...@collabora.com>

diff --git a/include/vcl/toolkit/button.hxx b/include/vcl/toolkit/button.hxx
index df67a243c52c..6785dfd7008c 100644
--- a/include/vcl/toolkit/button.hxx
+++ b/include/vcl/toolkit/button.hxx
@@ -181,6 +181,9 @@ public:
 
     void DumpAsPropertyTree(tools::JsonWriter&) override;
 
+    bool isToggleButton() { return mbIsToggleButton; }
+    void setToggleButton(bool bIsToggleButton) { mbIsToggleButton = 
bIsToggleButton; }
+
 protected:
     PushButtonDropdownStyle mnDDStyle;
     bool            mbIsActive;
@@ -218,6 +221,7 @@ private:
     TriState        meState;
     bool            mbPressed;
     bool            mbIsAction;
+    bool            mbIsToggleButton = false;
 };
 
 inline void PushButton::Check( bool bCheck )
diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 472ff66eac62..b7b0e941f2e0 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -285,6 +285,7 @@ public:
     virtual std::unique_ptr<weld::Label> weld_label(const OString& id) 
override;
     virtual std::unique_ptr<weld::Button> weld_button(const OString& id) 
override;
     virtual std::unique_ptr<weld::LinkButton> weld_link_button(const OString& 
id) override;
+    virtual std::unique_ptr<weld::ToggleButton> weld_toggle_button(const 
OString& id) override;
     virtual std::unique_ptr<weld::Entry> weld_entry(const OString& id) 
override;
     virtual std::unique_ptr<weld::ComboBox> weld_combo_box(const OString& id) 
override;
     virtual std::unique_ptr<weld::Notebook> weld_notebook(const OString& id) 
override;
@@ -527,6 +528,13 @@ public:
                  bool bTakeOwnership);
 };
 
+class JSToggleButton final : public JSWidget<SalInstanceToggleButton, 
::PushButton>
+{
+public:
+    JSToggleButton(JSDialogSender* pSender, ::PushButton* pButton, 
SalInstanceBuilder* pBuilder,
+                   bool bTakeOwnership);
+};
+
 class JSEntry final : public JSWidget<SalInstanceEntry, ::Edit>
 {
 public:
diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index 05e29dfc8ad3..19f6b0adf91d 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -1098,6 +1098,57 @@ public:
     virtual ~SalInstanceButton() override;
 };
 
+class SalInstanceToggleButton : public SalInstanceButton, public virtual 
weld::ToggleButton
+{
+private:
+    VclPtr<PushButton> m_xToggleButton;
+
+    DECL_LINK(ToggleListener, VclWindowEvent&, void);
+
+public:
+    SalInstanceToggleButton(PushButton* pButton, SalInstanceBuilder* pBuilder, 
bool bTakeOwnership)
+        : SalInstanceButton(pButton, pBuilder, bTakeOwnership)
+        , m_xToggleButton(pButton)
+    {
+        m_xToggleButton->setToggleButton(true);
+    }
+
+    virtual void connect_toggled(const Link<Toggleable&, void>& rLink) override
+    {
+        assert(!m_aToggleHdl.IsSet());
+        m_xToggleButton->AddEventListener(LINK(this, SalInstanceToggleButton, 
ToggleListener));
+        weld::ToggleButton::connect_toggled(rLink);
+    }
+
+    virtual void set_active(bool active) override
+    {
+        disable_notify_events();
+        m_xToggleButton->Check(active);
+        enable_notify_events();
+    }
+
+    virtual bool get_active() const override { return 
m_xToggleButton->IsChecked(); }
+
+    virtual void set_inconsistent(bool inconsistent) override
+    {
+        disable_notify_events();
+        m_xToggleButton->SetState(inconsistent ? TRISTATE_INDET : 
TRISTATE_FALSE);
+        enable_notify_events();
+    }
+
+    virtual bool get_inconsistent() const override
+    {
+        return m_xToggleButton->GetState() == TRISTATE_INDET;
+    }
+
+    virtual ~SalInstanceToggleButton() override
+    {
+        if (m_aToggleHdl.IsSet())
+            m_xToggleButton->RemoveEventListener(
+                LINK(this, SalInstanceToggleButton, ToggleListener));
+    }
+};
+
 class SalInstanceNotebook : public SalInstanceWidget, public virtual 
weld::Notebook
 {
 private:
diff --git a/vcl/jsdialog/executor.cxx b/vcl/jsdialog/executor.cxx
index acd0e084ae76..be17d4ef353c 100644
--- a/vcl/jsdialog/executor.cxx
+++ b/vcl/jsdialog/executor.cxx
@@ -141,6 +141,11 @@ bool ExecuteAction(const std::string& nWindowId, const 
OString& rWidget, StringM
                     pButton->clicked();
                     return true;
                 }
+                else if (sAction == "toggle")
+                {
+                    
LOKTrigger::trigger_toggled(*dynamic_cast<weld::Toggleable*>(pWidget));
+                    return true;
+                }
             }
         }
         else if (sControlType == "menubutton")
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 50c1e5d7f097..cc1ca91262c8 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -945,6 +945,18 @@ std::unique_ptr<weld::LinkButton> 
JSInstanceBuilder::weld_link_button(const OStr
     return pWeldWidget;
 }
 
+std::unique_ptr<weld::ToggleButton> 
JSInstanceBuilder::weld_toggle_button(const OString& id)
+{
+    ::PushButton* pButton = m_xBuilder->get<::PushButton>(id);
+    auto pWeldWidget
+        = pButton ? std::make_unique<JSToggleButton>(this, pButton, this, 
false) : nullptr;
+
+    if (pWeldWidget)
+        RememberWidget(id, pWeldWidget.get());
+
+    return pWeldWidget;
+}
+
 std::unique_ptr<weld::Entry> JSInstanceBuilder::weld_entry(const OString& id)
 {
     Edit* pEntry = m_xBuilder->get<Edit>(id);
@@ -1366,6 +1378,12 @@ JSLinkButton::JSLinkButton(JSDialogSender* pSender, 
::FixedHyperlink* pButton,
 {
 }
 
+JSToggleButton::JSToggleButton(JSDialogSender* pSender, ::PushButton* pButton,
+                               SalInstanceBuilder* pBuilder, bool 
bTakeOwnership)
+    : JSWidget<SalInstanceToggleButton, ::PushButton>(pSender, pButton, 
pBuilder, bTakeOwnership)
+{
+}
+
 JSEntry::JSEntry(JSDialogSender* pSender, ::Edit* pEntry, SalInstanceBuilder* 
pBuilder,
                  bool bTakeOwnership)
     : JSWidget<SalInstanceEntry, ::Edit>(pSender, pEntry, pBuilder, 
bTakeOwnership)
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index f8dcfba0a16b..a5ac05271b51 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -3154,59 +3154,6 @@ IMPL_LINK_NOARG(SalInstanceRadioButton, ToggleHdl, 
::RadioButton&, void)
     signal_toggled();
 }
 
-namespace
-{
-class SalInstanceToggleButton : public SalInstanceButton, public virtual 
weld::ToggleButton
-{
-private:
-    VclPtr<PushButton> m_xToggleButton;
-
-    DECL_LINK(ToggleListener, VclWindowEvent&, void);
-
-public:
-    SalInstanceToggleButton(PushButton* pButton, SalInstanceBuilder* pBuilder, 
bool bTakeOwnership)
-        : SalInstanceButton(pButton, pBuilder, bTakeOwnership)
-        , m_xToggleButton(pButton)
-    {
-    }
-
-    virtual void connect_toggled(const Link<Toggleable&, void>& rLink) override
-    {
-        assert(!m_aToggleHdl.IsSet());
-        m_xToggleButton->AddEventListener(LINK(this, SalInstanceToggleButton, 
ToggleListener));
-        weld::ToggleButton::connect_toggled(rLink);
-    }
-
-    virtual void set_active(bool active) override
-    {
-        disable_notify_events();
-        m_xToggleButton->Check(active);
-        enable_notify_events();
-    }
-
-    virtual bool get_active() const override { return 
m_xToggleButton->IsChecked(); }
-
-    virtual void set_inconsistent(bool inconsistent) override
-    {
-        disable_notify_events();
-        m_xToggleButton->SetState(inconsistent ? TRISTATE_INDET : 
TRISTATE_FALSE);
-        enable_notify_events();
-    }
-
-    virtual bool get_inconsistent() const override
-    {
-        return m_xToggleButton->GetState() == TRISTATE_INDET;
-    }
-
-    virtual ~SalInstanceToggleButton() override
-    {
-        if (m_aToggleHdl.IsSet())
-            m_xToggleButton->RemoveEventListener(
-                LINK(this, SalInstanceToggleButton, ToggleListener));
-    }
-};
-}
-
 IMPL_LINK(SalInstanceToggleButton, ToggleListener, VclWindowEvent&, rEvent, 
void)
 {
     if (notify_events_disabled())
diff --git a/vcl/source/control/button.cxx b/vcl/source/control/button.cxx
index 98dc12397361..96c6db8ac91e 100644
--- a/vcl/source/control/button.cxx
+++ b/vcl/source/control/button.cxx
@@ -643,6 +643,8 @@ void PushButton::DumpAsPropertyTree(tools::JsonWriter& 
rJsonWriter)
     Button::DumpAsPropertyTree(rJsonWriter);
     if (GetSymbol() != SymbolType::DONTKNOW)
         rJsonWriter.put("symbol", symbolTypeName(GetSymbol()));
+    if (isToggleButton())
+        rJsonWriter.put("isToggle", true);
 }
 
 IMPL_STATIC_LINK( Button, dispatchCommandHandler, Button*, pButton, void )

Reply via email to