diff options
author | Szymon Kłos <szymon.klos@collabora.com> | 2023-03-10 10:03:49 +0100 |
---|---|---|
committer | Szymon Kłos <szymon.klos@collabora.com> | 2023-03-21 15:00:25 +0000 |
commit | 74e8476d23b72f06328dcbe183597847471771e1 (patch) | |
tree | 9f096a3bbce152561e4fd3b2169415727f8138b5 /vcl | |
parent | 5f5e1a3204b98b9e74bded50ba0eddd4fb371301 (diff) |
jsdialog: add wrapper for ScrolledWindow
Change-Id: I59489e4cf1e5fb492272108e3a19afb4212753f5
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148610
Tested-by: Szymon Kłos <szymon.klos@collabora.com>
Reviewed-by: Szymon Kłos <szymon.klos@collabora.com>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149200
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/inc/jsdialog/jsdialogbuilder.hxx | 26 | ||||
-rw-r--r-- | vcl/jsdialog/executor.cxx | 21 | ||||
-rw-r--r-- | vcl/jsdialog/jsdialogbuilder.cxx | 51 |
3 files changed, 98 insertions, 0 deletions
diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx b/vcl/inc/jsdialog/jsdialogbuilder.hxx index 0c6cbaa48080..783aeaacfff7 100644 --- a/vcl/inc/jsdialog/jsdialogbuilder.hxx +++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx @@ -40,6 +40,7 @@ class ComboBox; class VclMultiLineEdit; class SvTabListBox; class IconView; +class VclScrolledWindow; namespace vcl { @@ -304,6 +305,8 @@ public: virtual std::unique_ptr<weld::TreeView> weld_tree_view(const OString& id) override; virtual std::unique_ptr<weld::Expander> weld_expander(const OString& id) override; virtual std::unique_ptr<weld::IconView> weld_icon_view(const OString& id) override; + virtual std::unique_ptr<weld::ScrolledWindow> + weld_scrolled_window(const OString& id, bool bUserManagedScrolling = false) override; virtual std::unique_ptr<weld::RadioButton> weld_radio_button(const OString& id) override; virtual std::unique_ptr<weld::Frame> weld_frame(const OString& id) override; virtual std::unique_ptr<weld::MenuButton> weld_menu_button(const OString& id) override; @@ -369,6 +372,14 @@ public: } JSWidget(JSDialogSender* pSender, VclClass* pObject, SalInstanceBuilder* pBuilder, + bool bTakeOwnership, bool bUserManagedScrolling) + : BaseInstanceClass(pObject, pBuilder, bTakeOwnership, bUserManagedScrolling) + , m_bIsFreezed(false) + , m_pSender(pSender) + { + } + + JSWidget(JSDialogSender* pSender, VclClass* pObject, SalInstanceBuilder* pBuilder, const a11yref& rAlly, FactoryFunction pUITestFactoryFunction, void* pUserData, bool bTakeOwnership) : BaseInstanceClass(pObject, pBuilder, rAlly, pUITestFactoryFunction, pUserData, @@ -510,6 +521,21 @@ public: bool bTakeOwnership); }; +class JSScrolledWindow final : public JSWidget<SalInstanceScrolledWindow, ::VclScrolledWindow> +{ +public: + JSScrolledWindow(JSDialogSender* pSender, ::VclScrolledWindow* pWindow, + SalInstanceBuilder* pBuilder, bool bTakeOwnership, bool bUserManagedScrolling); + + virtual void vadjustment_configure(int value, int lower, int upper, int step_increment, + int page_increment, int page_size) override; + virtual void set_vpolicy(VclPolicyType eVPolicy) override; + + virtual void hadjustment_configure(int value, int lower, int upper, int step_increment, + int page_increment, int page_size) override; + virtual void set_hpolicy(VclPolicyType eVPolicy) override; +}; + class JSLabel final : public JSWidget<SalInstanceLabel, Control> { public: diff --git a/vcl/jsdialog/executor.cxx b/vcl/jsdialog/executor.cxx index e0d0cbb323f3..f52bef4b9aa7 100644 --- a/vcl/jsdialog/executor.cxx +++ b/vcl/jsdialog/executor.cxx @@ -547,6 +547,27 @@ bool ExecuteAction(const std::string& nWindowId, const OString& rWidget, StringM } } } + else if (sControlType == "scrolledwindow") + { + auto pScrolledWindow = dynamic_cast<weld::ScrolledWindow*>(pWidget); + if (pScrolledWindow) + { + if (sAction == "scrollv") + { + sal_Int32 nValue = o3tl::toInt32(rData["data"]); + pScrolledWindow->vadjustment_set_value(nValue); + LOKTrigger::trigger_scrollv(*pScrolledWindow); + return true; + } + else if (sAction == "scrollh") + { + sal_Int32 nValue = o3tl::toInt32(rData["data"]); + pScrolledWindow->hadjustment_set_value(nValue); + LOKTrigger::trigger_scrollh(*pScrolledWindow); + return true; + } + } + } } return false; diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx index 3cfe67c3b56c..d623e9723a7e 100644 --- a/vcl/jsdialog/jsdialogbuilder.cxx +++ b/vcl/jsdialog/jsdialogbuilder.cxx @@ -950,6 +950,21 @@ std::unique_ptr<weld::Container> JSInstanceBuilder::weld_container(const OString return pWeldWidget; } +std::unique_ptr<weld::ScrolledWindow> +JSInstanceBuilder::weld_scrolled_window(const OString& id, bool bUserManagedScrolling) +{ + VclScrolledWindow* pScrolledWindow = m_xBuilder->get<VclScrolledWindow>(id); + auto pWeldWidget = pScrolledWindow + ? std::make_unique<JSScrolledWindow>(this, pScrolledWindow, this, false, + bUserManagedScrolling) + : nullptr; + + if (pWeldWidget) + RememberWidget(id, pWeldWidget.get()); + + return pWeldWidget; +} + std::unique_ptr<weld::Label> JSInstanceBuilder::weld_label(const OString& id) { Control* pLabel = m_xBuilder->get<Control>(id); @@ -1393,6 +1408,42 @@ JSContainer::JSContainer(JSDialogSender* pSender, vcl::Window* pContainer, { } +JSScrolledWindow::JSScrolledWindow(JSDialogSender* pSender, ::VclScrolledWindow* pContainer, + SalInstanceBuilder* pBuilder, bool bTakeOwnership, + bool bUserManagedScrolling) + : JSWidget<SalInstanceScrolledWindow, ::VclScrolledWindow>( + pSender, pContainer, pBuilder, bTakeOwnership, bUserManagedScrolling) +{ +} + +void JSScrolledWindow::vadjustment_configure(int value, int lower, int upper, int step_increment, + int page_increment, int page_size) +{ + SalInstanceScrolledWindow::vadjustment_configure(value, lower, upper, step_increment, + page_increment, page_size); + sendUpdate(); +} + +void JSScrolledWindow::set_vpolicy(VclPolicyType eVPolicy) +{ + SalInstanceScrolledWindow::set_vpolicy(eVPolicy); + sendUpdate(); +} + +void JSScrolledWindow::hadjustment_configure(int value, int lower, int upper, int step_increment, + int page_increment, int page_size) +{ + SalInstanceScrolledWindow::hadjustment_configure(value, lower, upper, step_increment, + page_increment, page_size); + sendUpdate(); +} + +void JSScrolledWindow::set_hpolicy(VclPolicyType eVPolicy) +{ + SalInstanceScrolledWindow::set_hpolicy(eVPolicy); + sendUpdate(); +} + JSLabel::JSLabel(JSDialogSender* pSender, Control* pLabel, SalInstanceBuilder* pBuilder, bool bTakeOwnership) : JSWidget<SalInstanceLabel, Control>(pSender, pLabel, pBuilder, bTakeOwnership) |