summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorSzymon Kłos <szymon.klos@collabora.com>2023-03-10 10:03:49 +0100
committerSzymon Kłos <szymon.klos@collabora.com>2023-03-21 15:00:25 +0000
commit74e8476d23b72f06328dcbe183597847471771e1 (patch)
tree9f096a3bbce152561e4fd3b2169415727f8138b5 /vcl
parent5f5e1a3204b98b9e74bded50ba0eddd4fb371301 (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.hxx26
-rw-r--r--vcl/jsdialog/executor.cxx21
-rw-r--r--vcl/jsdialog/jsdialogbuilder.cxx51
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)