summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSzymon Kłos <szymon.klos@collabora.com>2022-12-06 18:23:32 +0100
committerMiklos Vajna <vmiklos@collabora.com>2022-12-16 19:49:56 +0000
commitcc067789ab7fd67bdd6f6ba8ce53a6580a56d7ff (patch)
tree256a2df35e3c5c3fbdde40f7842147345785af6b
parentae438bda3d5a0c9c9f2ed0e71104698bd2d8793d (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.hxx10
-rw-r--r--include/vcl/weld.hxx2
-rw-r--r--vcl/inc/jsdialog/jsdialogbuilder.hxx17
-rw-r--r--vcl/jsdialog/executor.cxx3
-rw-r--r--vcl/jsdialog/jsdialogbuilder.cxx14
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)