summaryrefslogtreecommitdiff
path: root/vcl/source/app/salvtables.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'vcl/source/app/salvtables.cxx')
-rw-r--r--vcl/source/app/salvtables.cxx79
1 files changed, 79 insertions, 0 deletions
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index f3c7f8e8a7a3..2f5d542b0fc5 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -2488,6 +2488,79 @@ IMPL_LINK_NOARG(SalInstanceScrolledWindow, HscrollHdl, ScrollBar*, void)
m_aOrigHScrollHdl.Call(&m_xScrolledWindow->getHorzScrollBar());
}
+namespace
+{
+class SalInstanceScrollbar : public SalInstanceWidget, public virtual weld::Scrollbar
+{
+private:
+ VclPtr<ScrollBar> m_xScrollBar;
+ Link<ScrollBar*, void> m_aOrigScrollHdl;
+
+ DECL_LINK(ScrollHdl, ScrollBar*, void);
+
+public:
+ SalInstanceScrollbar(ScrollBar* pScrollbar, SalInstanceBuilder* pBuilder, bool bTakeOwnership)
+ : SalInstanceWidget(pScrollbar, pBuilder, bTakeOwnership)
+ , m_xScrollBar(pScrollbar)
+ {
+ m_aOrigScrollHdl = m_xScrollBar->GetScrollHdl();
+ m_xScrollBar->SetScrollHdl(LINK(this, SalInstanceScrollbar, ScrollHdl));
+ }
+
+ virtual void adjustment_configure(int value, int lower, int upper, int step_increment,
+ int page_increment, int page_size) override
+ {
+ m_xScrollBar->SetRangeMin(lower);
+ m_xScrollBar->SetRangeMax(upper);
+ m_xScrollBar->SetLineSize(step_increment);
+ m_xScrollBar->SetPageSize(page_increment);
+ m_xScrollBar->SetThumbPos(value);
+ m_xScrollBar->SetVisibleSize(page_size);
+ }
+
+ virtual int adjustment_get_value() const override { return m_xScrollBar->GetThumbPos(); }
+
+ virtual void adjustment_set_value(int value) override
+ {
+ m_xScrollBar->SetThumbPos(value);
+ m_aOrigScrollHdl.Call(m_xScrollBar.get());
+ }
+
+ virtual int adjustment_get_upper() const override { return m_xScrollBar->GetRangeMax(); }
+
+ virtual void adjustment_set_upper(int upper) override { m_xScrollBar->SetRangeMax(upper); }
+
+ virtual int adjustment_get_lower() const override { return m_xScrollBar->GetRangeMin(); }
+
+ virtual void adjustment_set_lower(int lower) override { m_xScrollBar->SetRangeMin(lower); }
+
+ virtual int adjustment_get_page_size() const override { return m_xScrollBar->GetVisibleSize(); }
+
+ virtual void adjustment_set_page_size(int size) override
+ {
+ return m_xScrollBar->SetVisibleSize(size);
+ }
+
+ virtual void adjustment_set_page_increment(int size) override
+ {
+ return m_xScrollBar->SetPageSize(size);
+ }
+
+ virtual void adjustment_set_step_increment(int size) override
+ {
+ return m_xScrollBar->SetLineSize(size);
+ }
+
+ virtual ~SalInstanceScrollbar() override { m_xScrollBar->SetScrollHdl(m_aOrigScrollHdl); }
+};
+}
+
+IMPL_LINK_NOARG(SalInstanceScrollbar, ScrollHdl, ScrollBar*, void)
+{
+ signal_adjustment_changed();
+ m_aOrigScrollHdl.Call(m_xScrollBar.get());
+}
+
SalInstanceNotebook::SalInstanceNotebook(TabControl* pNotebook, SalInstanceBuilder* pBuilder,
bool bTakeOwnership)
: SalInstanceWidget(pNotebook, pBuilder, bTakeOwnership)
@@ -7355,6 +7428,12 @@ std::unique_ptr<weld::Toolbar> SalInstanceBuilder::weld_toolbar(const OString& i
return pToolBox ? std::make_unique<SalInstanceToolbar>(pToolBox, this, false) : nullptr;
}
+std::unique_ptr<weld::Scrollbar> SalInstanceBuilder::weld_scrollbar(const OString& id)
+{
+ ScrollBar* pScrollbar = m_xBuilder->get<ScrollBar>(id);
+ return pScrollbar ? std::make_unique<SalInstanceScrollbar>(pScrollbar, this, false) : nullptr;
+}
+
std::unique_ptr<weld::SizeGroup> SalInstanceBuilder::create_size_group()
{
return std::make_unique<SalInstanceSizeGroup>();