include/vcl/jsdialog/executor.hxx | 10 ++++++ include/vcl/weld.hxx | 2 + vcl/inc/jsdialog/jsdialogbuilder.hxx | 27 ++++++++++++++++ vcl/jsdialog/executor.cxx | 21 ++++++++++++ vcl/jsdialog/jsdialogbuilder.cxx | 57 +++++++++++++++++++++++++++++++++++ 5 files changed, 117 insertions(+)
New commits: commit b46defbc331c3c91553bc8967cdf48eacea87afd Author: Szymon Kłos <szymon.k...@collabora.com> AuthorDate: Fri Mar 10 13:53:04 2023 +0100 Commit: Szymon Kłos <szymon.k...@collabora.com> CommitDate: Tue Mar 21 15:00:32 2023 +0000 jsdialog: update Entry on replace_selection Signed-off-by: Szymon Kłos <szymon.k...@collabora.com> Change-Id: Ie0c3586fbf4bda1a9d68dceec61e08ff9f75bb97 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148634 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149201 Tested-by: Jenkins diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx b/vcl/inc/jsdialog/jsdialogbuilder.hxx index 783aeaacfff7..6f59b7d5ca64 100644 --- a/vcl/inc/jsdialog/jsdialogbuilder.hxx +++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx @@ -572,6 +572,7 @@ public: bool bTakeOwnership); virtual void set_text(const OUString& rText) override; void set_text_without_notify(const OUString& rText); + virtual void replace_selection(const OUString& rText) override; }; class JSListBox final : public JSWidget<SalInstanceComboBoxWithoutEdit, ::ListBox> diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx index d623e9723a7e..9a0f61d90caa 100644 --- a/vcl/jsdialog/jsdialogbuilder.cxx +++ b/vcl/jsdialog/jsdialogbuilder.cxx @@ -1488,6 +1488,12 @@ void JSEntry::set_text(const OUString& rText) void JSEntry::set_text_without_notify(const OUString& rText) { SalInstanceEntry::set_text(rText); } +void JSEntry::replace_selection(const OUString& rText) +{ + SalInstanceEntry::replace_selection(rText); + sendUpdate(); +} + JSListBox::JSListBox(JSDialogSender* pSender, ::ListBox* pListBox, SalInstanceBuilder* pBuilder, bool bTakeOwnership) : JSWidget<SalInstanceComboBoxWithoutEdit, ::ListBox>(pSender, pListBox, pBuilder, commit 74e8476d23b72f06328dcbe183597847471771e1 Author: Szymon Kłos <szymon.k...@collabora.com> AuthorDate: Fri Mar 10 10:03:49 2023 +0100 Commit: Szymon Kłos <szymon.k...@collabora.com> CommitDate: Tue Mar 21 15:00:25 2023 +0000 jsdialog: add wrapper for ScrolledWindow Change-Id: I59489e4cf1e5fb492272108e3a19afb4212753f5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148610 Tested-by: Szymon Kłos <szymon.k...@collabora.com> Reviewed-by: Szymon Kłos <szymon.k...@collabora.com> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149200 diff --git a/include/vcl/jsdialog/executor.hxx b/include/vcl/jsdialog/executor.hxx index 9bccad3f1865..50f71272bb61 100644 --- a/include/vcl/jsdialog/executor.hxx +++ b/include/vcl/jsdialog/executor.hxx @@ -27,6 +27,16 @@ public: static void trigger_changed(weld::IconView& rIconView) { rIconView.signal_selection_changed(); } + static void trigger_scrollv(weld::ScrolledWindow& rScrolledWindow) + { + rScrolledWindow.signal_vadjustment_changed(); + } + + static void trigger_scrollh(weld::ScrolledWindow& rScrolledWindow) + { + rScrolledWindow.signal_hadjustment_changed(); + } + static void trigger_toggled(weld::Toggleable& rButton) { rButton.signal_toggled(); } static void trigger_row_activated(weld::TreeView& rTreeView) diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx index 4acece25f052..d22fa5eb616e 100644 --- a/include/vcl/weld.hxx +++ b/include/vcl/weld.hxx @@ -404,6 +404,8 @@ public: class VCL_DLLPUBLIC ScrolledWindow : virtual public Container { + friend class ::LOKTrigger; + Link<ScrolledWindow&, void> m_aVChangeHdl; Link<ScrolledWindow&, void> m_aHChangeHdl; 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; @@ -368,6 +371,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) @@ -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)