summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-05-22 10:38:34 +0100
committerCaolán McNamara <caolanm@redhat.com>2018-05-24 14:24:06 +0200
commiteeaf6dee2d278eaa037d95a756ad0ffab3314bc2 (patch)
treea997fee717ad079fb59ff0901d418938ab7585f7 /include
parentc10928e703366341ab912c42e8959a087a7fa9ff (diff)
rework custom widget welding to enable inheritence
Change-Id: I0d391b3fe9d2d610ae41e2a03cd2e195a866e103 Reviewed-on: https://gerrit.libreoffice.org/54681 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'include')
-rw-r--r--include/sfx2/charwin.hxx32
-rw-r--r--include/sfx2/new.hxx15
-rw-r--r--include/svx/charmap.hxx42
-rw-r--r--include/svx/dlgctrl.hxx41
-rw-r--r--include/svx/graphctl.hxx21
-rw-r--r--include/svx/searchcharmap.hxx9
-rw-r--r--include/vcl/customweld.hxx100
7 files changed, 168 insertions, 92 deletions
diff --git a/include/sfx2/charwin.hxx b/include/sfx2/charwin.hxx
index 992df5206e11..85c40d84b225 100644
--- a/include/sfx2/charwin.hxx
+++ b/include/sfx2/charwin.hxx
@@ -22,14 +22,13 @@
#include <sfx2/tbxctrl.hxx>
#include <sfx2/dllapi.h>
+#include <vcl/customweld.hxx>
#include <vcl/weld.hxx>
-class SFX2_DLLPUBLIC SvxCharView
+class SFX2_DLLPUBLIC SvxCharView : public weld::CustomWidgetController
{
private:
VclPtr<VirtualDevice> mxVirDev;
- std::unique_ptr<weld::DrawingArea> mxDrawingArea;
- Size m_aSize;
long mnY;
Point maPosition;
vcl::Font maFont;
@@ -40,34 +39,29 @@ private:
Link<SvxCharView*, void> maClearClickHdl;
Link<SvxCharView*, void> maClearAllClickHdl;
-
- DECL_LINK(DoPaint, weld::DrawingArea::draw_args, void);
- DECL_LINK(DoResize, const Size& rSize, void);
- DECL_LINK(DoMouseButtonDown, const MouseEvent&, void);
- DECL_LINK(DoKeyDown, const KeyEvent&, bool);
- DECL_LINK(DoGetFocus, weld::Widget&, void);
- DECL_LINK(DoLoseFocus, weld::Widget&, void);
+ virtual void Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect) override;
+ virtual void Resize() override;
+ virtual void MouseButtonDown(const MouseEvent&) override;
+ virtual void GetFocus() override;
+ virtual void LoseFocus() override;
+ virtual bool KeyInput(const KeyEvent&) override;
+ virtual void SetDrawingArea(weld::DrawingArea* pDrawingArea) override;
public:
- SvxCharView(weld::Builder& rBuilder, const OString& rId, const VclPtr<VirtualDevice>& rVirDev);
+ SvxCharView(const VclPtr<VirtualDevice>& rVirDev);
void SetFont( const vcl::Font& rFont );
vcl::Font GetFont() const { return maFont; }
void SetText( const OUString& rText );
OUString GetText() const { return m_sText; }
- void Show() { mxDrawingArea->show(); }
- void Hide() { mxDrawingArea->hide(); }
void SetHasInsert( bool bInsert );
void InsertCharToDoc();
void createContextMenu();
- void grab_focus() { mxDrawingArea->grab_focus(); }
- void queue_draw() { mxDrawingArea->queue_draw(); }
- Size get_preferred_size() const { return mxDrawingArea->get_preferred_size(); }
-
- void connect_focus_in(const Link<weld::Widget&, void>& rLink) { mxDrawingArea->connect_focus_in(rLink); }
- void connect_focus_out(const Link<weld::Widget&, void>& rLink) { mxDrawingArea->connect_focus_out(rLink); }
+ Size get_preferred_size() const { return GetDrawingArea()->get_preferred_size(); }
+ void connect_focus_in(const Link<weld::Widget&, void>& rLink);
+ void connect_focus_out(const Link<weld::Widget&, void>& rLink);
void setMouseClickHdl(const Link<SvxCharView*,void> &rLink);
void setClearClickHdl(const Link<SvxCharView*,void> &rLink);
diff --git a/include/sfx2/new.hxx b/include/sfx2/new.hxx
index 4eb1fa8d48c3..f5c30c23060f 100644
--- a/include/sfx2/new.hxx
+++ b/include/sfx2/new.hxx
@@ -25,6 +25,7 @@
#include <sfx2/objsh.hxx>
#include <vcl/idle.hxx>
+#include <vcl/customweld.hxx>
#include <vcl/weld.hxx>
#include <sfx2/doctempl.hxx>
#include <o3tl/typed_flags_set.hxx>
@@ -57,6 +58,13 @@ namespace o3tl
class SFX2_DLLPUBLIC SfxNewFileDialog : public weld::GenericDialogController
{
private:
+ Idle m_aPrevIdle;
+ SfxNewFileDialogMode m_nFlags;
+ SfxDocumentTemplates m_aTemplates;
+ SfxObjectShellLock m_xDocShell;
+
+ std::unique_ptr<SfxPreviewWin_Impl> m_xPreviewController;
+
std::unique_ptr<weld::TreeView> m_xRegionLb;
std::unique_ptr<weld::TreeView> m_xTemplateLb;
std::unique_ptr<weld::CheckButton> m_xTextStyleCB;
@@ -66,13 +74,8 @@ private:
std::unique_ptr<weld::CheckButton> m_xMergeStyleCB;
std::unique_ptr<weld::Button> m_xLoadFilePB;
std::unique_ptr<weld::Expander> m_xMoreBt;
- std::unique_ptr<SfxPreviewWin_Impl> m_xPreviewWin;
+ std::unique_ptr<weld::CustomWeld> m_xPreviewWin;
std::unique_ptr<weld::Label> m_xAltTitleFt;
- Idle m_aPrevIdle;
-
- SfxNewFileDialogMode m_nFlags;
- SfxDocumentTemplates m_aTemplates;
- SfxObjectShellLock m_xDocShell;
DECL_LINK( Update, Timer *, void );
diff --git a/include/svx/charmap.hxx b/include/svx/charmap.hxx
index 3df37695eb75..2446c0607cbb 100644
--- a/include/svx/charmap.hxx
+++ b/include/svx/charmap.hxx
@@ -35,6 +35,7 @@
#include <vcl/outdev.hxx>
#include <vcl/metric.hxx>
#include <vcl/vclptr.hxx>
+#include <vcl/customweld.hxx>
#include <vcl/weld.hxx>
#include <vcl/window.hxx>
#include <vcl/textview.hxx>
@@ -56,19 +57,15 @@ namespace svx
class SvxShowCharSetAcc;
}
-class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxShowCharSet
+class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxShowCharSet : public weld::CustomWidgetController
{
protected:
VclPtr<VirtualDevice> mxVirDev;
- std::unique_ptr<weld::DrawingArea> mxDrawingArea;
- std::unique_ptr<weld::ScrolledWindow> mxScrollArea;
vcl::Font maFont;
- Size maSize;
+ std::unique_ptr<weld::ScrolledWindow> mxScrollArea;
public:
- SvxShowCharSet(weld::Builder& rBuilder, const OString& rDrawingId,
- const OString& rScrollId, const VclPtr<VirtualDevice>& rVirDev);
-
- virtual ~SvxShowCharSet();
+ SvxShowCharSet(weld::ScrolledWindow* pScrollArea, const VclPtr<VirtualDevice>& rVirDev);
+ virtual ~SvxShowCharSet() override;
virtual void RecalculateFont(vcl::RenderContext& rRenderContext);
@@ -106,25 +103,22 @@ public:
void Show() { mxScrollArea->show(); }
void Hide() { mxScrollArea->hide(); }
- bool HasFocus() const { return mxDrawingArea->has_focus(); }
- void GrabFocus() { mxDrawingArea->grab_focus(); }
- bool IsEnabled() const { return mxDrawingArea->get_sensitive(); }
- bool IsVisible() const { return mxDrawingArea->get_visible(); }
- const Size& GetSize() const { return maSize; }
- uno::Reference<css::accessibility::XAccessible> getAccessibleParent() { return mxDrawingArea->get_accessible_parent(); }
+ uno::Reference<css::accessibility::XAccessible> getAccessibleParent() { return GetDrawingArea()->get_accessible_parent(); }
private:
- DECL_LINK(DoPaint, weld::DrawingArea::draw_args, void);
- DECL_LINK(DoResize, const Size& rSize, void);
- DECL_LINK(DoMouseButtonDown, const MouseEvent& rMEvt, void);
- DECL_LINK(DoMouseMove, const MouseEvent& rMEvt, void);
- DECL_LINK(DoMouseButtonUp, const MouseEvent& rMEvt, void);
- DECL_LINK(DoKeyDown, const KeyEvent& rKEvt, bool);
- DECL_LINK(DoGetFocus, weld::Widget&, void);
- DECL_LINK(DoLoseFocus, weld::Widget&, void);
-
- css::uno::Reference<css::accessibility::XAccessible> CreateAccessible();
+ virtual void SetDrawingArea(weld::DrawingArea* pDrawingArea) override;
+ virtual void Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect) override;
+ virtual void Resize() override;
+ virtual void MouseButtonDown(const MouseEvent& rMEvt) override;
+ virtual void MouseMove(const MouseEvent& rMEvt) override;
+ virtual void MouseButtonUp(const MouseEvent& rMEvt) override;
+ virtual void GetFocus() override;
+ virtual void LoseFocus() override;
+ virtual bool KeyInput(const KeyEvent&) override;
+
+ virtual css::uno::Reference<css::accessibility::XAccessible> CreateAccessible() override;
+ virtual FactoryFunction GetUITestFactory() const override;
protected:
typedef std::map<sal_Int32, std::shared_ptr<svx::SvxShowCharSetItem> > ItemsMap;
diff --git a/include/svx/dlgctrl.hxx b/include/svx/dlgctrl.hxx
index 4752c8033066..c14761bd8017 100644
--- a/include/svx/dlgctrl.hxx
+++ b/include/svx/dlgctrl.hxx
@@ -24,6 +24,7 @@
#include <svx/svxdllapi.h>
#include <svx/rectenum.hxx>
#include <vcl/graph.hxx>
+#include <vcl/customweld.hxx>
#include <vcl/weld.hxx>
#include <svx/xtable.hxx>
#include <rtl/ref.hxx>
@@ -146,10 +147,9 @@ public:
bool IsCompletelyDisabled() const { return mbCompleteDisable; }
};
-class SAL_WARN_UNUSED SVX_DLLPUBLIC RectCtl
+class SAL_WARN_UNUSED SVX_DLLPUBLIC RectCtl : public weld::CustomWidgetController
{
private:
- std::unique_ptr<weld::DrawingArea> m_xControl;
VclPtr<SvxTabPage> m_pPage;
SVX_DLLPRIVATE void InitSettings(vcl::RenderContext& rRenderContext);
@@ -157,11 +157,13 @@ private:
SVX_DLLPRIVATE BitmapEx& GetRectBitmap();
SVX_DLLPRIVATE void Resize_Impl();
+ RectCtl(const RectCtl&) = delete;
+ RectCtl& operator=(const RectCtl&) = delete;
+
protected:
rtl::Reference<RectCtlAccessibleContext> pAccContext;
sal_uInt16 nBorderWidth;
sal_uInt16 nRadius;
- Size m_aSize;
Point aPtLT, aPtMT, aPtRT;
Point aPtLM, aPtMM, aPtRM;
Point aPtLB, aPtMB, aPtRB;
@@ -178,19 +180,19 @@ protected:
Point GetApproxLogPtFromPixPt( const Point& rRoughPixelPoint ) const;
public:
- RectCtl(weld::Builder& rBuilder, const OString& rDrawingId, SvxTabPage* pPage,
- RectPoint eRpt = RectPoint::MM, sal_uInt16 nBorder = 200, sal_uInt16 nCircle = 80);
+ RectCtl(SvxTabPage* pPage, RectPoint eRpt = RectPoint::MM, sal_uInt16 nBorder = 200, sal_uInt16 nCircle = 80);
void SetControlSettings(RectPoint eRpt, sal_uInt16 nBorder, sal_uInt16 nCircl);
- ~RectCtl();
+ virtual ~RectCtl() override;
- DECL_LINK(DoPaint, weld::DrawingArea::draw_args, void);
- DECL_LINK(DoResize, const Size& rSize, void);
- DECL_LINK(DoMouseButtonDown, const MouseEvent&, void);
- DECL_LINK(DoKeyDown, const KeyEvent&, bool);
- DECL_LINK(DoGetFocus, weld::Widget&, void);
- DECL_LINK(DoLoseFocus, weld::Widget&, void);
- DECL_LINK(MarkToResetSettings, weld::Widget&, void);
- DECL_LINK(DoFocusRect, weld::Widget&, tools::Rectangle);
+ virtual void Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle&) override;
+ virtual void Resize() override;
+ virtual void MouseButtonDown(const MouseEvent&) override;
+ virtual bool KeyInput(const KeyEvent&) override;
+ virtual void GetFocus() override;
+ virtual void LoseFocus() override;
+ virtual tools::Rectangle GetFocusRect() override;
+ virtual void SetDrawingArea(weld::DrawingArea* pDrawingArea) override;
+ virtual void StyleUpdated() override;
void Reset();
RectPoint GetActualRP() const { return eRP;}
@@ -203,19 +205,14 @@ public:
tools::Rectangle CalculateFocusRectangle() const;
tools::Rectangle CalculateFocusRectangle( RectPoint eRectPoint ) const;
- css::uno::Reference<css::accessibility::XAccessible> getAccessibleParent() { return m_xControl->get_accessible_parent(); }
- css::uno::Reference<css::accessibility::XAccessible> CreateAccessible();
- a11yrelationset get_accessible_relation_set() { return m_xControl->get_accessible_relation_set(); }
+ css::uno::Reference<css::accessibility::XAccessible> getAccessibleParent() { return GetDrawingArea()->get_accessible_parent(); }
+ virtual css::uno::Reference<css::accessibility::XAccessible> CreateAccessible() override;
+ a11yrelationset get_accessible_relation_set() { return GetDrawingArea()->get_accessible_relation_set(); }
RectPoint GetApproxRPFromPixPt( const css::awt::Point& rPixelPoint ) const;
bool IsCompletelyDisabled() const { return mbCompleteDisable; }
void DoCompletelyDisable(bool bNew);
-
- bool IsVisible() const { return m_xControl->get_visible(); }
- bool HasFocus() const { return m_xControl->has_focus(); }
- void GrabFocus() { m_xControl->grab_focus(); }
- Size GetSize() const { return m_aSize; }
};
/*************************************************************************
diff --git a/include/svx/graphctl.hxx b/include/svx/graphctl.hxx
index 492e3dd62987..de9b0e7d9060 100644
--- a/include/svx/graphctl.hxx
+++ b/include/svx/graphctl.hxx
@@ -21,6 +21,7 @@
#include <vcl/ctrl.hxx>
#include <vcl/graph.hxx>
+#include <vcl/customweld.hxx>
#include <vcl/weld.hxx>
#include <svx/svxdllapi.h>
@@ -124,31 +125,19 @@ public:
virtual css::uno::Reference< css::accessibility::XAccessible > CreateAccessible() override;
};
-class SVX_DLLPUBLIC SvxGraphCtrl
+class SVX_DLLPUBLIC SvxGraphCtrl : public weld::CustomWidgetController
{
MapMode aMap100;
Graphic aGraphic;
Size aGraphSize;
- Size maSize;
- std::unique_ptr<weld::DrawingArea> mxDrawingArea;
-
- DECL_LINK(DoPaint, weld::DrawingArea::draw_args, void);
- DECL_LINK(DoResize, const Size& rSize, void);
+ virtual void Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect) override;
public:
- SvxGraphCtrl(weld::Builder& rBuilder, const OString& rDrawingId);
- virtual ~SvxGraphCtrl();
-
+ SvxGraphCtrl();
+ virtual ~SvxGraphCtrl() override;
void SetGraphic( const Graphic& rGraphic );
-
- const Size& GetSize() const { return maSize; }
-
- void set_size_request(int nWidth, int nHeight)
- {
- mxDrawingArea->set_size_request(nWidth, nHeight);
- }
};
class GraphCtrlView : public SdrView
diff --git a/include/svx/searchcharmap.hxx b/include/svx/searchcharmap.hxx
index 8f23c4b96d5a..bcc4ac2dc5b9 100644
--- a/include/svx/searchcharmap.hxx
+++ b/include/svx/searchcharmap.hxx
@@ -53,8 +53,7 @@ class ScrollBar;
class SVX_DLLPUBLIC SvxSearchCharSet : public SvxShowCharSet
{
public:
- SvxSearchCharSet(weld::Builder& rBuilder, const OString& rDrawingId,
- const OString& rScrollId, const VclPtr<VirtualDevice> &rDevice);
+ SvxSearchCharSet(weld::ScrolledWindow* pScrolledWindow, const VclPtr<VirtualDevice> &rDevice);
virtual ~SvxSearchCharSet() override;
virtual void RecalculateFont(vcl::RenderContext& rRenderContext) override;
@@ -77,9 +76,9 @@ private:
//to uniquely identify each appended element
std::unordered_map<sal_Int32, sal_UCS4> m_aItemList;
private:
- virtual void DrawChars_Impl(vcl::RenderContext& rRenderContext, int n1, int n2) override;
- DECL_LINK(DoPaint, weld::DrawingArea::draw_args, void);
- DECL_LINK(DoKeyDown, const KeyEvent&, bool);
+ virtual void DrawChars_Impl(vcl::RenderContext& rRenderContext, int n1, int n2) override;
+ virtual void Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect) override;
+ virtual bool KeyInput(const KeyEvent& rKEvt) override;
};
#endif
diff --git a/include/vcl/customweld.hxx b/include/vcl/customweld.hxx
new file mode 100644
index 000000000000..4eef04e85323
--- /dev/null
+++ b/include/vcl/customweld.hxx
@@ -0,0 +1,100 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_VCL_CUSTOMWELD_HXX
+#define INCLUDED_VCL_CUSTOMWELD_HXX
+
+#include <vcl/weld.hxx>
+
+namespace weld
+{
+class VCL_DLLPUBLIC CustomWidgetController
+{
+private:
+ Size m_aSize;
+ weld::DrawingArea* m_pDrawingArea;
+
+public:
+ virtual void Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect) = 0;
+ virtual void Resize() {}
+ virtual void MouseButtonDown(const MouseEvent&) {}
+ virtual void MouseMove(const MouseEvent&) {}
+ virtual void MouseButtonUp(const MouseEvent&) {}
+ virtual void GetFocus() {}
+ virtual void LoseFocus() {}
+ virtual void StyleUpdated() { Invalidate(); }
+ virtual bool KeyInput(const KeyEvent&) { return false; }
+ virtual css::uno::Reference<css::accessibility::XAccessible> CreateAccessible()
+ {
+ return css::uno::Reference<css::accessibility::XAccessible>();
+ }
+ virtual tools::Rectangle GetFocusRect() { return tools::Rectangle(); }
+ virtual FactoryFunction GetUITestFactory() const { return nullptr; }
+ Size GetOutputSizePixel() const { return m_aSize; }
+ void SetOutputSizePixel(const Size& rSize) { m_aSize = rSize; }
+ virtual void SetDrawingArea(weld::DrawingArea* pDrawingArea) { m_pDrawingArea = pDrawingArea; }
+ weld::DrawingArea* GetDrawingArea() const { return m_pDrawingArea; }
+ void Invalidate() { m_pDrawingArea->queue_draw(); }
+ void Invalidate(const tools::Rectangle& rRect)
+ {
+ m_pDrawingArea->queue_draw_area(rRect.Left(), rRect.Top(), rRect.GetWidth(),
+ rRect.GetHeight());
+ }
+ void Show() { m_pDrawingArea->show(); }
+ void Hide() { m_pDrawingArea->hide(); }
+ void GrabFocus() { m_pDrawingArea->grab_focus(); }
+ bool HasFocus() const { return m_pDrawingArea->has_focus(); }
+ bool IsVisible() const { return m_pDrawingArea->get_visible(); }
+ bool IsEnabled() const { return m_pDrawingArea->get_sensitive(); }
+ void grab_add() { m_pDrawingArea->grab_add(); }
+ void grab_remove() { m_pDrawingArea->grab_remove(); }
+ void set_size_request(int nWidth, int nHeight)
+ {
+ m_pDrawingArea->set_size_request(nWidth, nHeight);
+ }
+ virtual ~CustomWidgetController();
+};
+
+class VCL_DLLPUBLIC CustomWeld
+{
+private:
+ weld::CustomWidgetController& m_rWidgetController;
+ std::unique_ptr<weld::DrawingArea> m_xDrawingArea;
+
+ DECL_LINK(DoResize, const Size& rSize, void);
+ DECL_LINK(DoPaint, weld::DrawingArea::draw_args, void);
+ DECL_LINK(DoMouseButtonDown, const MouseEvent&, void);
+ DECL_LINK(DoMouseMove, const MouseEvent&, void);
+ DECL_LINK(DoMouseButtonUp, const MouseEvent&, void);
+ DECL_LINK(DoGetFocus, weld::Widget&, void);
+ DECL_LINK(DoLoseFocus, weld::Widget&, void);
+ DECL_LINK(DoKeyPress, const KeyEvent&, bool);
+ DECL_LINK(DoFocusRect, weld::Widget&, tools::Rectangle);
+ DECL_LINK(DoStyleUpdated, weld::Widget&, void);
+
+public:
+ CustomWeld(weld::Builder& rBuilder, const OString& rDrawingId,
+ CustomWidgetController& rWidgetController);
+ void queue_draw() { m_xDrawingArea->queue_draw(); }
+ void queue_draw_area(int x, int y, int width, int height)
+ {
+ m_xDrawingArea->queue_draw_area(x, y, width, height);
+ }
+ void set_size_request(int nWidth, int nHeight)
+ {
+ m_xDrawingArea->set_size_request(nWidth, nHeight);
+ }
+ void show() { m_xDrawingArea->show(); }
+ void set_margin_top(int nMargin) { m_xDrawingArea->set_margin_top(nMargin); }
+ void set_margin_bottom(int nMargin) { m_xDrawingArea->set_margin_bottom(nMargin); }
+};
+}
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */