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 * This file incorporates work covered by the following license notice: 10 * 11 * Licensed to the Apache Software Foundation (ASF) under one or more 12 * contributor license agreements. See the NOTICE file distributed 13 * with this work for additional information regarding copyright 14 * ownership. The ASF licenses this file to you under the Apache 15 * License, Version 2.0 (the "License"); you may not use this file 16 * except in compliance with the License. You may obtain a copy of 17 * the License at http://www.apache.org/licenses/LICENSE-2.0 . 18 */ 19 #ifndef INCLUDED_SVX_SOURCE_SIDEBAR_LINE_LINEPROPERTYPANELBASE_HXX 20 #define INCLUDED_SVX_SOURCE_SIDEBAR_LINE_LINEPROPERTYPANELBASE_HXX 21 22 #include <vcl/weld.hxx> 23 #include <memory> 24 #include <svl/poolitem.hxx> 25 #include <sfx2/sidebar/PanelLayout.hxx> 26 #include <svx/sidebar/LineWidthPopup.hxx> 27 #include <svx/svxdllapi.h> 28 #include <com/sun/star/frame/XFrame.hpp> 29 30 class ToolbarUnoDispatcher; 31 class XLineStyleItem; 32 class XLineDashItem; 33 class XLineStartItem; 34 class XLineWidthItem; 35 class XLineEndItem; 36 class XLineEndList; 37 class XLineJointItem; 38 class XLineCapItem; 39 class XLineTransparenceItem; 40 class XDashList; 41 42 namespace svx::sidebar 43 { 44 class LineStyleNoneChange; 45 46 class SVX_DLLPUBLIC LinePropertyPanelBase : public PanelLayout 47 { 48 public: 49 virtual ~LinePropertyPanelBase() override; 50 51 void SetWidth(tools::Long nWidth); 52 void SetWidthIcon(int n); 53 void SetWidthIcon(); 54 55 void EndLineWidthPopup(); 56 57 // constructor/destructor 58 LinePropertyPanelBase(weld::Widget* pParent, 59 const css::uno::Reference<css::frame::XFrame>& rxFrame); 60 61 virtual void setLineWidth(const XLineWidthItem& rItem) = 0; 62 SetNoneLineStyle(bool bNoneLineStyle)63 void SetNoneLineStyle(bool bNoneLineStyle) 64 { 65 if (bNoneLineStyle != mbNoneLineStyle) 66 { 67 mbNoneLineStyle = bNoneLineStyle; 68 ActivateControls(); 69 } 70 } 71 72 protected: 73 void ActivateControls(); 74 75 virtual void setLineTransparency(const XLineTransparenceItem& rItem) = 0; 76 virtual void setLineJoint(const XLineJointItem* pItem) = 0; 77 virtual void setLineCap(const XLineCapItem* pItem) = 0; 78 79 void updateLineTransparence(bool bDisabled, bool bSetOrDefault, const SfxPoolItem* pItem); 80 virtual void updateLineWidth(bool bDisabled, bool bSetOrDefault, const SfxPoolItem* pItem); 81 void updateLineJoint(bool bDisabled, bool bSetOrDefault, const SfxPoolItem* pItem); 82 void updateLineCap(bool bDisabled, bool bSetOrDefault, const SfxPoolItem* pItem); 83 84 void setMapUnit(MapUnit eMapUnit); 85 86 void enableArrowHead(); 87 void disableArrowHead(); 88 89 protected: 90 std::unique_ptr<weld::Toolbar> mxTBColor; 91 std::unique_ptr<ToolbarUnoDispatcher> mxColorDispatch; 92 93 std::unique_ptr<weld::Toolbar> mxLineStyleTB; 94 std::unique_ptr<ToolbarUnoDispatcher> mxLineStyleDispatch; 95 96 sal_Int32 mnWidthCoreValue; 97 98 private: 99 //ui controls 100 std::unique_ptr<weld::Label> mxFTWidth; 101 std::unique_ptr<weld::Toolbar> mxTBWidth; 102 std::unique_ptr<weld::Label> mxFTTransparency; 103 std::unique_ptr<weld::MetricSpinButton> mxMFTransparent; 104 std::unique_ptr<weld::Label> mxFTEdgeStyle; 105 std::unique_ptr<weld::ComboBox> mxLBEdgeStyle; 106 std::unique_ptr<weld::Label> mxFTCapStyle; 107 std::unique_ptr<weld::ComboBox> mxLBCapStyle; 108 std::unique_ptr<weld::Widget> mxGridLineProps; 109 std::unique_ptr<weld::Widget> mxBoxArrowProps; 110 //popup windows 111 std::unique_ptr<LineWidthPopup> mxLineWidthPopup; 112 113 std::unique_ptr<LineStyleNoneChange> mxLineStyleNoneChange; 114 115 sal_uInt16 mnTrans; 116 MapUnit meMapUnit; 117 118 // images from resource 119 OUString maIMGNone; 120 121 // multi-images 122 OUString maIMGWidthIcon[8]; 123 124 bool mbWidthValuable : 1; 125 bool mbArrowSupported; 126 bool mbNoneLineStyle; 127 128 void Initialize(); 129 130 DECL_LINK(ToolboxWidthSelectHdl, const OString&, void); 131 DECL_LINK(ChangeTransparentHdl, weld::MetricSpinButton&, void); 132 DECL_LINK(ChangeEdgeStyleHdl, weld::ComboBox&, void); 133 DECL_LINK(ChangeCapStyleHdl, weld::ComboBox&, void); 134 }; 135 136 } // end of namespace svx::sidebar 137 138 #endif 139 140 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 141