1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 /* 3 * This file is part of the LibreOffice project. 4 * 5 * This Source Code Form is subject to the terms of the Mozilla Public 6 * License, v. 2.0. If a copy of the MPL was not distributed with this 7 * file, You can obtain one at http://mozilla.org/MPL/2.0/. 8 */ 9 10 #ifndef INCLUDED_VCL_CUSTOMWELD_HXX 11 #define INCLUDED_VCL_CUSTOMWELD_HXX 12 13 #include <vcl/weld.hxx> 14 15 namespace weld 16 { 17 class VCL_DLLPUBLIC CustomWidgetController 18 { 19 private: 20 Size m_aSize; 21 weld::DrawingArea* m_pDrawingArea; 22 23 public: CreateAccessible()24 virtual css::uno::Reference<css::accessibility::XAccessible> CreateAccessible() 25 { 26 return css::uno::Reference<css::accessibility::XAccessible>(); 27 } 28 virtual void Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect) = 0; Resize()29 virtual void Resize() {} MouseButtonDown(const MouseEvent &)30 virtual bool MouseButtonDown(const MouseEvent&) { return false; } MouseMove(const MouseEvent &)31 virtual bool MouseMove(const MouseEvent&) { return false; } MouseButtonUp(const MouseEvent &)32 virtual bool MouseButtonUp(const MouseEvent&) { return false; } GetFocus()33 virtual void GetFocus() {} LoseFocus()34 virtual void LoseFocus() {} StyleUpdated()35 virtual void StyleUpdated() { Invalidate(); } Command(const CommandEvent &)36 virtual bool Command(const CommandEvent&) { return false; } KeyInput(const KeyEvent &)37 virtual bool KeyInput(const KeyEvent&) { return false; } GetFocusRect()38 virtual tools::Rectangle GetFocusRect() { return tools::Rectangle(); } GetUITestFactory() const39 virtual FactoryFunction GetUITestFactory() const { return nullptr; } RequestHelp(tools::Rectangle &)40 virtual OUString RequestHelp(tools::Rectangle&) { return OUString(); } GetHelpText() const41 virtual OUString GetHelpText() const { return m_pDrawingArea->get_tooltip_text(); } GetOutputSizePixel() const42 Size const& GetOutputSizePixel() const { return m_aSize; } SetOutputSizePixel(const Size & rSize)43 void SetOutputSizePixel(const Size& rSize) { m_aSize = rSize; } SetDrawingArea(weld::DrawingArea * pDrawingArea)44 virtual void SetDrawingArea(weld::DrawingArea* pDrawingArea) { m_pDrawingArea = pDrawingArea; } GetDrawingArea() const45 weld::DrawingArea* GetDrawingArea() const { return m_pDrawingArea; } Invalidate()46 void Invalidate() { m_pDrawingArea->queue_draw(); } IsUpdateMode()47 static bool IsUpdateMode() { return true; } Invalidate(const tools::Rectangle & rRect)48 void Invalidate(const tools::Rectangle& rRect) 49 { 50 m_pDrawingArea->queue_draw_area(rRect.Left(), rRect.Top(), rRect.GetWidth(), 51 rRect.GetHeight()); 52 } Show()53 virtual void Show() { m_pDrawingArea->show(); } Hide()54 virtual void Hide() { m_pDrawingArea->hide(); } GrabFocus()55 void GrabFocus() { m_pDrawingArea->grab_focus(); } HasFocus() const56 bool HasFocus() const { return m_pDrawingArea->has_focus(); } IsVisible() const57 bool IsVisible() const { return m_pDrawingArea->get_visible(); } IsReallyVisible() const58 bool IsReallyVisible() const { return m_pDrawingArea->is_visible(); } IsEnabled() const59 bool IsEnabled() const { return m_pDrawingArea->get_sensitive(); } IsActive() const60 bool IsActive() const { return m_pDrawingArea->is_active(); } GetTextHeight() const61 int GetTextHeight() const { return m_pDrawingArea->get_text_height(); } GetAccessibleName() const62 OUString GetAccessibleName() const { return m_pDrawingArea->get_accessible_name(); } GetAccessibleDescription() const63 OUString GetAccessibleDescription() const 64 { 65 return m_pDrawingArea->get_accessible_description(); 66 } CaptureMouse()67 void CaptureMouse() { m_pDrawingArea->grab_add(); } IsMouseCaptured() const68 bool IsMouseCaptured() const { return m_pDrawingArea->has_grab(); } EnableRTL(bool bEnable)69 void EnableRTL(bool bEnable) { m_pDrawingArea->set_direction(bEnable); } IsRTLEnabled() const70 bool IsRTLEnabled() const { return m_pDrawingArea->get_direction(); } ReleaseMouse()71 void ReleaseMouse() { m_pDrawingArea->grab_remove(); } SetPointer(PointerStyle ePointerStyle)72 void SetPointer(PointerStyle ePointerStyle) { m_pDrawingArea->set_cursor(ePointerStyle); } SetHelpId(const OString & rHelpId)73 void SetHelpId(const OString& rHelpId) { m_pDrawingArea->set_help_id(rHelpId); } SetAccessibleName(const OUString & rName)74 void SetAccessibleName(const OUString& rName) { m_pDrawingArea->set_accessible_name(rName); } set_size_request(int nWidth,int nHeight)75 void set_size_request(int nWidth, int nHeight) 76 { 77 m_pDrawingArea->set_size_request(nWidth, nHeight); 78 } queue_resize()79 void queue_resize() { m_pDrawingArea->queue_resize(); } CustomWidgetController()80 CustomWidgetController() 81 : m_pDrawingArea(nullptr) 82 { 83 } 84 virtual ~CustomWidgetController(); 85 86 CustomWidgetController(CustomWidgetController const&) = default; 87 CustomWidgetController(CustomWidgetController&&) = default; 88 CustomWidgetController& operator=(CustomWidgetController const&) = default; 89 CustomWidgetController& operator=(CustomWidgetController&&) = default; 90 }; 91 92 class VCL_DLLPUBLIC CustomWeld 93 { 94 private: 95 weld::CustomWidgetController& m_rWidgetController; 96 std::unique_ptr<weld::DrawingArea> m_xDrawingArea; 97 98 DECL_LINK(DoResize, const Size& rSize, void); 99 DECL_LINK(DoPaint, weld::DrawingArea::draw_args, void); 100 DECL_LINK(DoMouseButtonDown, const MouseEvent&, bool); 101 DECL_LINK(DoMouseMove, const MouseEvent&, bool); 102 DECL_LINK(DoMouseButtonUp, const MouseEvent&, bool); 103 DECL_LINK(DoGetFocus, weld::Widget&, void); 104 DECL_LINK(DoLoseFocus, weld::Widget&, void); 105 DECL_LINK(DoKeyPress, const KeyEvent&, bool); 106 DECL_LINK(DoFocusRect, weld::Widget&, tools::Rectangle); 107 DECL_LINK(DoCommand, const CommandEvent&, bool); 108 DECL_LINK(DoStyleUpdated, weld::Widget&, void); 109 DECL_LINK(DoRequestHelp, tools::Rectangle&, OUString); 110 111 public: 112 CustomWeld(weld::Builder& rBuilder, const OString& rDrawingId, 113 CustomWidgetController& rWidgetController); queue_draw()114 void queue_draw() { m_xDrawingArea->queue_draw(); } queue_draw_area(int x,int y,int width,int height)115 void queue_draw_area(int x, int y, int width, int height) 116 { 117 m_xDrawingArea->queue_draw_area(x, y, width, height); 118 } set_size_request(int nWidth,int nHeight)119 void set_size_request(int nWidth, int nHeight) 120 { 121 m_xDrawingArea->set_size_request(nWidth, nHeight); 122 } show()123 void show() { m_xDrawingArea->show(); } hide()124 void hide() { m_xDrawingArea->hide(); } set_margin_top(int nMargin)125 void set_margin_top(int nMargin) { m_xDrawingArea->set_margin_top(nMargin); } set_margin_bottom(int nMargin)126 void set_margin_bottom(int nMargin) { m_xDrawingArea->set_margin_bottom(nMargin); } set_sensitive(bool bSensitive)127 void set_sensitive(bool bSensitive) { m_xDrawingArea->set_sensitive(bSensitive); } get_sensitive() const128 bool get_sensitive() const { return m_xDrawingArea->get_sensitive(); } get_visible() const129 bool get_visible() const { return m_xDrawingArea->get_visible(); } set_grid_left_attach(int nAttach)130 void set_grid_left_attach(int nAttach) { m_xDrawingArea->set_grid_left_attach(nAttach); } get_grid_left_attach() const131 int get_grid_left_attach() const { return m_xDrawingArea->get_grid_left_attach(); } set_help_id(const OString & rHelpId)132 void set_help_id(const OString& rHelpId) { m_xDrawingArea->set_help_id(rHelpId); } 133 }; 134 } 135 #endif 136 137 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 138