diff options
author | Szymon Kłos <szymon.klos@collabora.com> | 2022-12-06 18:23:32 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2022-12-16 19:49:56 +0000 |
commit | cc067789ab7fd67bdd6f6ba8ce53a6580a56d7ff (patch) | |
tree | 256a2df35e3c5c3fbdde40f7842147345785af6b | |
parent | ae438bda3d5a0c9c9f2ed0e71104698bd2d8793d (diff) |
jsdialog: enter/leave tab page handlers
(cherry picked from commit 1257c288a0ba03fc69e7bc29fcf05642eb91d150)
Change-Id: I2cbc0fc18f716bf214db61f0729d666a1d2d172c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/144344
Tested-by: Jenkins
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
-rw-r--r-- | include/vcl/jsdialog/executor.hxx | 10 | ||||
-rw-r--r-- | include/vcl/weld.hxx | 2 | ||||
-rw-r--r-- | vcl/inc/jsdialog/jsdialogbuilder.hxx | 17 | ||||
-rw-r--r-- | vcl/jsdialog/executor.cxx | 3 | ||||
-rw-r--r-- | vcl/jsdialog/jsdialogbuilder.cxx | 14 |
5 files changed, 46 insertions, 0 deletions
diff --git a/include/vcl/jsdialog/executor.hxx b/include/vcl/jsdialog/executor.hxx index 6e388a6a3f79..9bccad3f1865 100644 --- a/include/vcl/jsdialog/executor.hxx +++ b/include/vcl/jsdialog/executor.hxx @@ -72,6 +72,16 @@ public: { rArea.m_aCommandHdl.Call(rCmd); } + + static void enter_page(weld::Notebook& rNotebook, const OString& rPage) + { + rNotebook.m_aEnterPageHdl.Call(rPage); + } + + static void leave_page(weld::Notebook& rNotebook, const OString& rPage) + { + rNotebook.m_aLeavePageHdl.Call(rPage); + } }; namespace jsdialog diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx index 3bcbc0a7a08d..c9273bf4743b 100644 --- a/include/vcl/weld.hxx +++ b/include/vcl/weld.hxx @@ -463,6 +463,8 @@ public: class VCL_DLLPUBLIC Notebook : virtual public Widget { + friend class ::LOKTrigger; + protected: Link<const OString&, bool> m_aLeavePageHdl; Link<const OString&, void> m_aEnterPageHdl; diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx b/vcl/inc/jsdialog/jsdialogbuilder.hxx index 291fd24babb7..564309a72626 100644 --- a/vcl/inc/jsdialog/jsdialogbuilder.hxx +++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx @@ -534,6 +534,12 @@ public: class JSNotebook final : public JSWidget<SalInstanceNotebook, ::TabControl> { + Link<const OString&, bool> m_aLeavePageOverridenHdl; + Link<const OString&, void> m_aEnterPageOverridenHdl; + + DECL_LINK(LeaveHdl, const OString&, bool); + DECL_LINK(EnterHdl, const OString&, bool); + public: JSNotebook(JSDialogSender* pSender, ::TabControl* pControl, SalInstanceBuilder* pBuilder, bool bTakeOwnership); @@ -545,6 +551,17 @@ public: virtual void remove_page(const OString& rIdent) override; virtual void insert_page(const OString& rIdent, const OUString& rLabel, int nPos) override; + + void connect_leave_page(const Link<const OString&, bool>& rLink) + { + m_aLeavePageHdl = LINK(this, JSNotebook, LeaveHdl); + m_aLeavePageOverridenHdl = rLink; + } + void connect_enter_page(const Link<const OString&, void>& rLink) + { + m_aLeavePageHdl = LINK(this, JSNotebook, EnterHdl); + m_aEnterPageOverridenHdl = rLink; + } }; class JSSpinButton final : public JSWidget<SalInstanceSpinButton, ::FormattedField> diff --git a/vcl/jsdialog/executor.cxx b/vcl/jsdialog/executor.cxx index 51dcca8f5d16..acd0e084ae76 100644 --- a/vcl/jsdialog/executor.cxx +++ b/vcl/jsdialog/executor.cxx @@ -91,7 +91,10 @@ bool ExecuteAction(const std::string& nWindowId, const OString& rWidget, StringM { sal_Int32 page = o3tl::toInt32(rData["data"]); + OString aCurrentPage = pNotebook->get_current_page_ident(); + LOKTrigger::leave_page(*pNotebook, aCurrentPage); pNotebook->set_current_page(page); + LOKTrigger::enter_page(*pNotebook, pNotebook->get_page_ident(page)); return true; } diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx index da30834b0568..51566201638d 100644 --- a/vcl/jsdialog/jsdialogbuilder.cxx +++ b/vcl/jsdialog/jsdialogbuilder.cxx @@ -1315,6 +1315,20 @@ void JSComboBox::set_active(int pos) bool JSComboBox::changed_by_direct_pick() const { return true; } +IMPL_LINK(JSNotebook, LeaveHdl, const OString&, rPage, bool) +{ + m_aLeavePageOverridenHdl.Call(rPage); + sendFullUpdate(); + return true; +} + +IMPL_LINK(JSNotebook, EnterHdl, const OString&, rPage, bool) +{ + m_aEnterPageOverridenHdl.Call(rPage); + sendFullUpdate(); + return true; +} + JSNotebook::JSNotebook(JSDialogSender* pSender, ::TabControl* pControl, SalInstanceBuilder* pBuilder, bool bTakeOwnership) : JSWidget<SalInstanceNotebook, ::TabControl>(pSender, pControl, pBuilder, bTakeOwnership) |