1*3334a7e6SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*3334a7e6SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*3334a7e6SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*3334a7e6SAndrew Rist * distributed with this work for additional information 6*3334a7e6SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*3334a7e6SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*3334a7e6SAndrew Rist * "License"); you may not use this file except in compliance 9*3334a7e6SAndrew Rist * with the License. You may obtain a copy of the License at 10*3334a7e6SAndrew Rist * 11*3334a7e6SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*3334a7e6SAndrew Rist * 13*3334a7e6SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*3334a7e6SAndrew Rist * software distributed under the License is distributed on an 15*3334a7e6SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*3334a7e6SAndrew Rist * KIND, either express or implied. See the License for the 17*3334a7e6SAndrew Rist * specific language governing permissions and limitations 18*3334a7e6SAndrew Rist * under the License. 19*3334a7e6SAndrew Rist * 20*3334a7e6SAndrew Rist *************************************************************/ 21*3334a7e6SAndrew Rist 22*3334a7e6SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir #ifndef SVX_FRMSEL_HXX 25cdf0e10cSrcweir #define SVX_FRMSEL_HXX 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include <memory> 28cdf0e10cSrcweir #include <tools/color.hxx> 29cdf0e10cSrcweir #include <vcl/ctrl.hxx> 30cdf0e10cSrcweir #include <vcl/bitmap.hxx> 31cdf0e10cSrcweir #include <svx/framebordertype.hxx> 32cdf0e10cSrcweir #include "svx/svxdllapi.h" 33cdf0e10cSrcweir 34cdf0e10cSrcweir class SvxBorderLine; 35cdf0e10cSrcweir 36cdf0e10cSrcweir namespace svx { 37cdf0e10cSrcweir 38cdf0e10cSrcweir struct FrameSelectorImpl; 39cdf0e10cSrcweir 40cdf0e10cSrcweir // ============================================================================ 41cdf0e10cSrcweir 42cdf0e10cSrcweir typedef int FrameSelFlags; 43cdf0e10cSrcweir 44cdf0e10cSrcweir const FrameSelFlags FRAMESEL_NONE = 0x0000; 45cdf0e10cSrcweir /** If set, the left frame border is enabled. */ 46cdf0e10cSrcweir const FrameSelFlags FRAMESEL_LEFT = 0x0001; 47cdf0e10cSrcweir /** If set, the right frame border is enabled. */ 48cdf0e10cSrcweir const FrameSelFlags FRAMESEL_RIGHT = 0x0002; 49cdf0e10cSrcweir /** If set, the top frame border is enabled. */ 50cdf0e10cSrcweir const FrameSelFlags FRAMESEL_TOP = 0x0004; 51cdf0e10cSrcweir /** If set, the bottom frame border is enabled. */ 52cdf0e10cSrcweir const FrameSelFlags FRAMESEL_BOTTOM = 0x0008; 53cdf0e10cSrcweir /** If set, the inner horizontal frame border is enabled. */ 54cdf0e10cSrcweir const FrameSelFlags FRAMESEL_INNER_HOR = 0x0010; 55cdf0e10cSrcweir /** If set, the inner vertical frame border is enabled. */ 56cdf0e10cSrcweir const FrameSelFlags FRAMESEL_INNER_VER = 0x0020; 57cdf0e10cSrcweir /** If set, the top-left to bottom-right diagonal frame border is enabled. */ 58cdf0e10cSrcweir const FrameSelFlags FRAMESEL_DIAG_TLBR = 0x0040; 59cdf0e10cSrcweir /** If set, the bottom-left to top-right diagonal frame border is enabled. */ 60cdf0e10cSrcweir const FrameSelFlags FRAMESEL_DIAG_BLTR = 0x0080; 61cdf0e10cSrcweir 62cdf0e10cSrcweir /** If set, all four outer frame borders are enabled. */ 63cdf0e10cSrcweir const FrameSelFlags FRAMESEL_OUTER = FRAMESEL_LEFT|FRAMESEL_RIGHT|FRAMESEL_TOP|FRAMESEL_BOTTOM; 64cdf0e10cSrcweir /** If set, both inner frame borders are enabled. */ 65cdf0e10cSrcweir const FrameSelFlags FRAMESEL_INNER = FRAMESEL_INNER_HOR|FRAMESEL_INNER_VER; 66cdf0e10cSrcweir /** If set, both diagonal frame borders are enabled. */ 67cdf0e10cSrcweir const FrameSelFlags FRAMESEL_DIAGONAL = FRAMESEL_DIAG_TLBR|FRAMESEL_DIAG_BLTR; 68cdf0e10cSrcweir 69cdf0e10cSrcweir /** If set, all frame borders will support the don't care state. */ 70cdf0e10cSrcweir const FrameSelFlags FRAMESEL_DONTCARE = 0x0100; 71cdf0e10cSrcweir 72cdf0e10cSrcweir // ---------------------------------------------------------------------------- 73cdf0e10cSrcweir 74cdf0e10cSrcweir /** All possible states of a frame border. */ 75cdf0e10cSrcweir enum FrameBorderState 76cdf0e10cSrcweir { 77cdf0e10cSrcweir FRAMESTATE_SHOW, /// Frame border has a visible style. 78cdf0e10cSrcweir FRAMESTATE_HIDE, /// Frame border is hidden (off). 79cdf0e10cSrcweir FRAMESTATE_DONTCARE /// Frame border is in don't care state (if enabled). 80cdf0e10cSrcweir }; 81cdf0e10cSrcweir 82cdf0e10cSrcweir // ============================================================================ 83cdf0e10cSrcweir 84cdf0e10cSrcweir class SVX_DLLPUBLIC FrameSelector : public Control 85cdf0e10cSrcweir { 86cdf0e10cSrcweir public: 87cdf0e10cSrcweir explicit FrameSelector( Window* pParent, const ResId& rResId ); 88cdf0e10cSrcweir virtual ~FrameSelector(); 89cdf0e10cSrcweir 90cdf0e10cSrcweir /** Initializes the control, enables/disables frame borders according to flags. */ 91cdf0e10cSrcweir void Initialize( FrameSelFlags nFlags ); 92cdf0e10cSrcweir 93cdf0e10cSrcweir // enabled frame borders -------------------------------------------------- 94cdf0e10cSrcweir 95cdf0e10cSrcweir /** Returns true, if the specified frame border is enabled. */ 96cdf0e10cSrcweir bool IsBorderEnabled( FrameBorderType eBorder ) const; 97cdf0e10cSrcweir /** Returns the number of enabled frame borders. */ 98cdf0e10cSrcweir sal_Int32 GetEnabledBorderCount() const; 99cdf0e10cSrcweir /** Returns the border type from the passed index (counts only enabled frame borders). */ 100cdf0e10cSrcweir FrameBorderType GetEnabledBorderType( sal_Int32 nIndex ) const; 101cdf0e10cSrcweir /** Returns the index of a frame border (counts only enabled borders) from passed type. */ 102cdf0e10cSrcweir sal_Int32 GetEnabledBorderIndex( FrameBorderType eBorder ) const; 103cdf0e10cSrcweir 104cdf0e10cSrcweir // frame border state and style ------------------------------------------- 105cdf0e10cSrcweir 106cdf0e10cSrcweir /** Returns true, if the control supports the "don't care" frame border state. */ 107cdf0e10cSrcweir bool SupportsDontCareState() const; 108cdf0e10cSrcweir 109cdf0e10cSrcweir /** Returns the state (visible/hidden/don't care) of the specified frame border. */ 110cdf0e10cSrcweir FrameBorderState GetFrameBorderState( FrameBorderType eBorder ) const; 111cdf0e10cSrcweir /** Returns the style of the specified frame border, if it is visible. */ 112cdf0e10cSrcweir const SvxBorderLine* GetFrameBorderStyle( FrameBorderType eBorder ) const; 113cdf0e10cSrcweir 114cdf0e10cSrcweir /** Shows the specified frame border using the passed style, or hides it, if pStyle is 0. */ 115cdf0e10cSrcweir void ShowBorder( FrameBorderType eBorder, const SvxBorderLine* pStyle ); 116cdf0e10cSrcweir /** Sets the specified frame border to "don't care" state. */ 117cdf0e10cSrcweir void SetBorderDontCare( FrameBorderType eBorder ); 118cdf0e10cSrcweir 119cdf0e10cSrcweir /** Returns true, if any enabled frame border has a visible style (not "don't care"). */ 120cdf0e10cSrcweir bool IsAnyBorderVisible() const; 121cdf0e10cSrcweir /** Hides all enabled frame borders. */ 122cdf0e10cSrcweir void HideAllBorders(); 123cdf0e10cSrcweir 124cdf0e10cSrcweir /** Returns true, if all visible frame borders have equal widths. 125cdf0e10cSrcweir @descr Ignores hidden and "don't care" frame borders. On success, 126cdf0e10cSrcweir returns the widths in the passed parameters. */ 127cdf0e10cSrcweir bool GetVisibleWidth( sal_uInt16& rnPrim, sal_uInt16& rnDist, sal_uInt16& rnSec ) const; 128cdf0e10cSrcweir /** Returns true, if all visible frame borders have equal color. 129cdf0e10cSrcweir @descr Ignores hidden and "don't care" frame borders. On success, 130cdf0e10cSrcweir returns the color in the passed parameter. */ 131cdf0e10cSrcweir bool GetVisibleColor( Color& rColor ) const; 132cdf0e10cSrcweir 133cdf0e10cSrcweir // frame border selection ------------------------------------------------- 134cdf0e10cSrcweir 135cdf0e10cSrcweir /** Returns the current selection handler. */ 136cdf0e10cSrcweir const Link& GetSelectHdl() const; 137cdf0e10cSrcweir /** Sets the passed handler that is called if the selection of the control changes. */ 138cdf0e10cSrcweir void SetSelectHdl( const Link& rHdl ); 139cdf0e10cSrcweir 140cdf0e10cSrcweir /** Returns true, if the specified frame border is selected. */ 141cdf0e10cSrcweir bool IsBorderSelected( FrameBorderType eBorder ) const; 142cdf0e10cSrcweir /** Selects or deselects the specified frame border. */ 143cdf0e10cSrcweir void SelectBorder( FrameBorderType eBorder, bool bSelect = true ); 144cdf0e10cSrcweir /** Deselects the specified frame border. */ DeselectBorder(FrameBorderType eBorder)145cdf0e10cSrcweir inline void DeselectBorder( FrameBorderType eBorder ) { SelectBorder( eBorder, false ); } 146cdf0e10cSrcweir 147cdf0e10cSrcweir /** Returns true, if any of the enabled frame borders is selected. */ 148cdf0e10cSrcweir bool IsAnyBorderSelected() const; 149cdf0e10cSrcweir /** Selects or deselects all frame borders. */ 150cdf0e10cSrcweir void SelectAllBorders( bool bSelect = true ); 151cdf0e10cSrcweir /** Deselects all frame borders. */ DeselectAllBorders()152cdf0e10cSrcweir inline void DeselectAllBorders() { SelectAllBorders( false ); } 153cdf0e10cSrcweir 154cdf0e10cSrcweir /** Selects or deselects all visible frame borders (ignores hidden and "don't care" borders). */ 155cdf0e10cSrcweir void SelectAllVisibleBorders( bool bSelect = true ); 156cdf0e10cSrcweir 157cdf0e10cSrcweir /** Sets the passed line widths to all selected frame borders (in twips). */ 158cdf0e10cSrcweir void SetStyleToSelection( sal_uInt16 nPrim, sal_uInt16 nDist, sal_uInt16 nSec ); 159cdf0e10cSrcweir /** Sets the passed color to all selected frame borders. */ 160cdf0e10cSrcweir void SetColorToSelection( const Color& rColor ); 161cdf0e10cSrcweir 162cdf0e10cSrcweir // accessibility ---------------------------------------------------------- 163cdf0e10cSrcweir 164cdf0e10cSrcweir virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > 165cdf0e10cSrcweir CreateAccessible(); 166cdf0e10cSrcweir 167cdf0e10cSrcweir /** Returns the accessibility child object of the specified frame border (if enabled). */ 168cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > 169cdf0e10cSrcweir GetChildAccessible( FrameBorderType eBorder ); 170cdf0e10cSrcweir /** Returns the accessibility child object with specified index (counts enabled frame borders only). */ 171cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > 172cdf0e10cSrcweir GetChildAccessible( sal_Int32 nIndex ); 173cdf0e10cSrcweir /** Returns the accessibility child object at the specified position (relative to control). */ 174cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > 175cdf0e10cSrcweir GetChildAccessible( const Point& rPos ); 176cdf0e10cSrcweir 177cdf0e10cSrcweir /** Returns true, if the passed point is inside the click area of any enabled frame border. */ 178cdf0e10cSrcweir bool ContainsClickPoint( const Point& rPos ) const; 179cdf0e10cSrcweir /** Returns the bounding rectangle of the specified frame border (if enabled). */ 180cdf0e10cSrcweir Rectangle GetClickBoundRect( FrameBorderType eBorder ) const; 181cdf0e10cSrcweir 182cdf0e10cSrcweir // ------------------------------------------------------------------------ 183cdf0e10cSrcweir protected: 184cdf0e10cSrcweir virtual void Paint( const Rectangle& rRect ); 185cdf0e10cSrcweir virtual void MouseButtonDown( const MouseEvent& rMEvt ); 186cdf0e10cSrcweir virtual void KeyInput( const KeyEvent& rKEvt ); 187cdf0e10cSrcweir virtual void GetFocus(); 188cdf0e10cSrcweir virtual void LoseFocus(); 189cdf0e10cSrcweir virtual void DataChanged( const DataChangedEvent& rDCEvt ); 190cdf0e10cSrcweir 191cdf0e10cSrcweir private: 192cdf0e10cSrcweir std::auto_ptr< FrameSelectorImpl > mxImpl; 193cdf0e10cSrcweir }; 194cdf0e10cSrcweir 195cdf0e10cSrcweir // ============================================================================ 196cdf0e10cSrcweir 197cdf0e10cSrcweir } // namespace svx 198cdf0e10cSrcweir 199cdf0e10cSrcweir #endif 200cdf0e10cSrcweir 201