xref: /AOO41X/main/vcl/inc/vcl/status.hxx (revision 47148b3bc50811ceb41802e4cc50a5db21535900)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _SV_STATUS_HXX
25 #define _SV_STATUS_HXX
26 
27 #include <vcl/sv.h>
28 #include <vcl/dllapi.h>
29 #include <vcl/window.hxx>
30 
31 class ImplStatusItemList;
32 
33 // --------------------
34 // - Progress-Ausgabe -
35 // --------------------
36 
37 void VCL_DLLPUBLIC DrawProgress( Window* pWindow, const Point& rPos,
38                                  long nOffset, long nPrgsWidth, long nPrgsHeight,
39                                  sal_uInt16 nPercent1, sal_uInt16 nPercent2, sal_uInt16 nPercentCount,
40                                  const Rectangle& rFramePosSize
41                                  );
42 
43 // ---------------------
44 // - StatusBarItemBits -
45 // ---------------------
46 
47 typedef sal_uInt16 StatusBarItemBits;
48 
49 // ----------------------------
50 // - Bits fuer StatusBarItems -
51 // ----------------------------
52 
53 #define SIB_LEFT                    ((StatusBarItemBits)0x0001)
54 #define SIB_CENTER                  ((StatusBarItemBits)0x0002)
55 #define SIB_RIGHT                   ((StatusBarItemBits)0x0004)
56 #define SIB_IN                      ((StatusBarItemBits)0x0008)
57 #define SIB_OUT                     ((StatusBarItemBits)0x0010)
58 #define SIB_FLAT                    ((StatusBarItemBits)0x0020)
59 #define SIB_AUTOSIZE                ((StatusBarItemBits)0x0040)
60 #define SIB_USERDRAW                ((StatusBarItemBits)0x0080)
61 
62 // -------------------
63 // - StatusBar-Types -
64 // -------------------
65 
66 #define STATUSBAR_APPEND            ((sal_uInt16)0xFFFF)
67 #define STATUSBAR_ITEM_NOTFOUND     ((sal_uInt16)0xFFFF)
68 #define STATUSBAR_OFFSET            ((long)5)
69 
70 // -------------
71 // - StatusBar -
72 // -------------
73 
74 class VCL_DLLPUBLIC StatusBar : public Window
75 {
76     class   ImplData;
77 private:
78     ImplStatusItemList* mpItemList;
79     ImplData*           mpImplData;
80     XubString           maPrgsTxt;
81     Point               maPrgsTxtPos;
82     Rectangle           maPrgsFrameRect;
83     long                mnPrgsSize;
84     long                mnItemsWidth;
85     long                mnDX;
86     long                mnDY;
87     long                mnCalcHeight;
88     long                mnTextY;
89     long                mnItemY;
90     sal_uInt16              mnCurItemId;
91     sal_uInt16              mnPercent;
92     sal_uInt16              mnPercentCount;
93     sal_Bool                mbVisibleItems;
94     sal_Bool                mbFormat;
95     sal_Bool                mbProgressMode;
96     sal_Bool                mbInUserDraw;
97     sal_Bool                mbBottomBorder;
98     Link                maClickHdl;
99     Link                maDoubleClickHdl;
100 
101     using Window::ImplInit;
102     SAL_DLLPRIVATE void      ImplInit( Window* pParent, WinBits nStyle );
103     SAL_DLLPRIVATE void      ImplInitSettings( sal_Bool bFont, sal_Bool bForeground, sal_Bool bBackground );
104     SAL_DLLPRIVATE void      ImplFormat();
105     SAL_DLLPRIVATE sal_Bool      ImplIsItemUpdate();
106 //    #if 0 // _SOLAR__PRIVATE
107     using OutputDevice::ImplDrawText;
108 //    #endif
109     SAL_DLLPRIVATE void      ImplDrawText( sal_Bool bOffScreen, long nOldTextWidth );
110     SAL_DLLPRIVATE void      ImplDrawItem( sal_Bool bOffScreen, sal_uInt16 nPos, sal_Bool bDrawText, sal_Bool bDrawFrame );
111     SAL_DLLPRIVATE void      ImplDrawProgress( sal_Bool bPaint,
112                                                sal_uInt16 nOldPerc, sal_uInt16 nNewPerc );
113     SAL_DLLPRIVATE void      ImplCalcProgressRect();
114     SAL_DLLPRIVATE Rectangle ImplGetItemRectPos( sal_uInt16 nPos ) const;
115     SAL_DLLPRIVATE sal_uInt16    ImplGetFirstVisiblePos() const;
116     SAL_DLLPRIVATE void      ImplCalcBorder();
117 
118 public:
119                         StatusBar( Window* pParent,
120                                    WinBits nWinStyle = WB_BORDER | WB_RIGHT );
121                         StatusBar( Window* pParent, const ResId& rResId );
122                         ~StatusBar();
123 
124     virtual void        MouseButtonDown( const MouseEvent& rMEvt );
125     virtual void        Paint( const Rectangle& rRect );
126     virtual void        Move();
127     virtual void        Resize();
128     virtual void        RequestHelp( const HelpEvent& rHEvt );
129     virtual void        StateChanged( StateChangedType nType );
130     virtual void        DataChanged( const DataChangedEvent& rDCEvt );
131 
132     virtual void        Click();
133     virtual void        DoubleClick();
134     virtual void        UserDraw( const UserDrawEvent& rUDEvt );
135 
136     void                InsertItem( sal_uInt16 nItemId, sal_uLong nWidth,
137                                     StatusBarItemBits nBits = SIB_CENTER | SIB_IN,
138                                     long nOffset = STATUSBAR_OFFSET,
139                                     sal_uInt16 nPos = STATUSBAR_APPEND );
140     void                RemoveItem( sal_uInt16 nItemId );
141 
142     void                ShowItem( sal_uInt16 nItemId );
143     void                HideItem( sal_uInt16 nItemId );
144     sal_Bool                IsItemVisible( sal_uInt16 nItemId ) const;
145 
146     void                ShowItems();
147     void                HideItems();
AreItemsVisible() const148     sal_Bool                AreItemsVisible() const { return mbVisibleItems; }
149 
150     void                RedrawItem( sal_uInt16 nItemId );
151 
152     void                CopyItems( const StatusBar& rStatusBar );
153     void                Clear();
154 
155     sal_uInt16              GetItemCount() const;
156     sal_uInt16              GetItemId( sal_uInt16 nPos ) const;
157     sal_uInt16              GetItemId( const Point& rPos ) const;
158     sal_uInt16              GetItemPos( sal_uInt16 nItemId ) const;
159     Rectangle           GetItemRect( sal_uInt16 nItemId ) const;
160     Point               GetItemTextPos( sal_uInt16 nItemId ) const;
GetCurItemId() const161     sal_uInt16              GetCurItemId() const { return mnCurItemId; }
162 
163     sal_uLong               GetItemWidth( sal_uInt16 nItemId ) const;
164     StatusBarItemBits   GetItemBits( sal_uInt16 nItemId ) const;
165     long                GetItemOffset( sal_uInt16 nItemId ) const;
166 
167     void                SetItemText( sal_uInt16 nItemId, const XubString& rText );
168     const XubString&    GetItemText( sal_uInt16 nItemId ) const;
169 
170     void                SetItemData( sal_uInt16 nItemId, void* pNewData );
171     void*               GetItemData( sal_uInt16 nItemId ) const;
172 
173     void                SetItemCommand( sal_uInt16 nItemId, const XubString& rCommand );
174     const XubString&    GetItemCommand( sal_uInt16 nItemId );
175 
176     void                SetHelpText( sal_uInt16 nItemId, const XubString& rText );
177     const XubString&    GetHelpText( sal_uInt16 nItemId ) const;
178 
179     using Window::SetQuickHelpText;
180     void                SetQuickHelpText( sal_uInt16 nItemId, const XubString& rText );
181     using Window::GetQuickHelpText;
182     const XubString&    GetQuickHelpText( sal_uInt16 nItemId ) const;
183 
184     void                SetHelpId( sal_uInt16 nItemId, const rtl::OString& rHelpId );
185     rtl::OString        GetHelpId( sal_uInt16 nItemId ) const;
186 
187     void                SetBottomBorder( sal_Bool bBottomBorder = sal_True );
IsBottomBorder() const188     sal_Bool                IsBottomBorder() const { return mbBottomBorder; }
189 
190     void                SetTopBorder( sal_Bool bTopBorder = sal_True );
191     sal_Bool                IsTopBorder() const;
192 
193     void                StartProgressMode( const XubString& rText );
194     void                SetProgressValue( sal_uInt16 nPercent );
195     void                EndProgressMode();
IsProgressMode() const196     sal_Bool                IsProgressMode() const { return mbProgressMode; }
197     void                ResetProgressMode();
198 
199     void                SetText( const XubString& rText );
200 
SetHelpText(const XubString & rText)201     void                SetHelpText( const XubString& rText )
202                             { Window::SetHelpText( rText ); }
GetHelpText() const203     const XubString&    GetHelpText() const
204                             { return Window::GetHelpText(); }
205 
SetHelpId(const rtl::OString & rId)206     void                SetHelpId( const rtl::OString& rId )
207                             { Window::SetHelpId( rId ); }
GetHelpId() const208     const rtl::OString& GetHelpId() const
209                             { return Window::GetHelpId(); }
210 
211     Size                CalcWindowSizePixel() const;
212 
SetClickHdl(const Link & rLink)213     void                SetClickHdl( const Link& rLink ) { maClickHdl = rLink; }
GetClickHdl() const214     const Link&         GetClickHdl() const { return maClickHdl; }
SetDoubleClickHdl(const Link & rLink)215     void                SetDoubleClickHdl( const Link& rLink ) { maDoubleClickHdl = rLink; }
GetDoubleClickHdl() const216     const Link&         GetDoubleClickHdl() const { return maDoubleClickHdl; }
217 
218     using Window::SetAccessibleName;
219     void                SetAccessibleName( sal_uInt16 nItemId, const XubString& rName );
220     using Window::GetAccessibleName;
221     const XubString&    GetAccessibleName( sal_uInt16 nItemId ) const;
222 };
223 
224 #endif  // _SV_STATUS_HXX
225