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 )