LibreOffice Module vcl (master)  1
status.hxx
Go to the documentation of this file.
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 
20 #ifndef INCLUDED_VCL_STATUS_HXX
21 #define INCLUDED_VCL_STATUS_HXX
22 
23 #include <tools/solar.h>
24 #include <vcl/dllapi.h>
25 #include <vcl/window.hxx>
26 #include <o3tl/typed_flags_set.hxx>
27 #include <memory>
28 #include <vector>
29 
30 class DataChangedEvent;
31 class HelpEvent;
32 class MouseEvent;
33 class UserDrawEvent;
34 struct ImplStatusItem;
35 
36 void DrawProgress(vcl::Window* pWindow, vcl::RenderContext& rRenderContext, const Point& rPos,
37  long nOffset, long nPrgsWidth, long nPrgsHeight,
38  sal_uInt16 nPercent1, sal_uInt16 nPercent2, sal_uInt16 nPercentCount,
39  const tools::Rectangle& rFramePosSize);
40 
41 
42 enum class StatusBarItemBits {
43  NONE = 0x0000,
44  Left = 0x0001,
45  Center = 0x0002,
46  Right = 0x0004,
47  In = 0x0008,
48  Out = 0x0010,
49  Flat = 0x0020,
50  AutoSize = 0x0040,
51  UserDraw = 0x0080,
52  Mandatory = 0x0100,
53 };
54 namespace o3tl
55 {
56  template<> struct typed_flags<StatusBarItemBits> : is_typed_flags<StatusBarItemBits, 0x01ff> {};
57 }
58 
59 #define STATUSBAR_APPEND (sal_uInt16(0xFFFF))
60 #define STATUSBAR_ITEM_NOTFOUND (sal_uInt16(0xFFFF))
61 #define STATUSBAR_OFFSET (long(5))
62 
63 
65 {
66  class ImplData;
67 private:
68  std::vector<std::unique_ptr<ImplStatusItem>> mvItemList;
69  std::unique_ptr<ImplData> mpImplData;
70  OUString maPrgsTxt;
73  long mnPrgsSize;
75  long mnDX;
76  long mnDY;
78  long mnTextY;
79  sal_uInt16 mnCurItemId;
80  sal_uInt16 mnPercent;
81  sal_uInt16 mnPercentCount;
82  bool mbFormat;
88 
89  using Window::ImplInit;
90  SAL_DLLPRIVATE void ImplInit( vcl::Window* pParent, WinBits nStyle );
91  SAL_DLLPRIVATE void ImplInitSettings();
92  SAL_DLLPRIVATE void ImplFormat();
93  SAL_DLLPRIVATE bool ImplIsItemUpdate();
94 
95  SAL_DLLPRIVATE void ImplDrawText(vcl::RenderContext& rRenderContext);
96  SAL_DLLPRIVATE void ImplDrawItem(vcl::RenderContext& rRenderContext, bool bOffScreen,
97  sal_uInt16 nPos);
98  SAL_DLLPRIVATE void ImplDrawProgress(vcl::RenderContext& rRenderContext, sal_uInt16 nNewPerc);
99  SAL_DLLPRIVATE void ImplCalcProgressRect();
100  SAL_DLLPRIVATE tools::Rectangle ImplGetItemRectPos( sal_uInt16 nPos ) const;
101  SAL_DLLPRIVATE sal_uInt16 ImplGetFirstVisiblePos() const;
102 
103 protected:
104  virtual void ApplySettings(vcl::RenderContext& rRenderContext) override;
105 
106 public:
107  StatusBar( vcl::Window* pParent,
108  WinBits nWinStyle = WB_BORDER | WB_RIGHT );
109  virtual ~StatusBar() override;
110  virtual void dispose() override;
111 
112  void AdjustItemWidthsForHiDPI();
113 
114  virtual void MouseButtonDown( const MouseEvent& rMEvt ) override;
115  virtual void Paint( vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect ) override;
116  virtual void Resize() override;
117  virtual void RequestHelp( const HelpEvent& rHEvt ) override;
118  virtual void StateChanged( StateChangedType nType ) override;
119  virtual void DataChanged( const DataChangedEvent& rDCEvt ) override;
120 
121  void Click();
122  void DoubleClick();
123  virtual void UserDraw( const UserDrawEvent& rUDEvt );
124 
125  void InsertItem( sal_uInt16 nItemId, sal_uLong nWidth,
127  long nOffset = STATUSBAR_OFFSET,
128  sal_uInt16 nPos = STATUSBAR_APPEND );
129  void RemoveItem( sal_uInt16 nItemId );
130 
131  void ShowItem( sal_uInt16 nItemId );
132  void HideItem( sal_uInt16 nItemId );
133  bool IsItemVisible( sal_uInt16 nItemId ) const;
134 
135  void RedrawItem( sal_uInt16 nItemId );
136 
137  void Clear();
138 
139  sal_uInt16 GetItemCount() const;
140  sal_uInt16 GetItemId( sal_uInt16 nPos ) const;
141  sal_uInt16 GetItemId( const Point& rPos ) const;
142  sal_uInt16 GetItemPos( sal_uInt16 nItemId ) const;
143  tools::Rectangle GetItemRect( sal_uInt16 nItemId ) const;
144  Point GetItemTextPos( sal_uInt16 nItemId ) const;
145  sal_uInt16 GetCurItemId() const { return mnCurItemId; }
146 
147  sal_uLong GetItemWidth( sal_uInt16 nItemId ) const;
148  StatusBarItemBits GetItemBits( sal_uInt16 nItemId ) const;
149 
150  long GetItemOffset( sal_uInt16 nItemId ) const;
151 
153  void SetItemText( sal_uInt16 nItemId, const OUString& rText, int nCharsWidth = -1 );
154  const OUString& GetItemText( sal_uInt16 nItemId ) const;
155 
156  void SetItemData( sal_uInt16 nItemId, void* pNewData );
157  void* GetItemData( sal_uInt16 nItemId ) const;
158 
159  void SetItemCommand( sal_uInt16 nItemId, const OUString& rCommand );
160  OUString GetItemCommand( sal_uInt16 nItemId );
161 
162  void SetHelpText( sal_uInt16 nItemId, const OUString& rText );
163  const OUString& GetHelpText( sal_uInt16 nItemId ) const;
164 
166  void SetQuickHelpText( sal_uInt16 nItemId, const OUString& rText );
168  const OUString& GetQuickHelpText( sal_uInt16 nItemId ) const;
169 
170  void SetHelpId( sal_uInt16 nItemId, const OString& rHelpId );
171 
172  void StartProgressMode( const OUString& rText );
173  void SetProgressValue( sal_uInt16 nPercent );
174  void EndProgressMode();
175  bool IsProgressMode() const { return mbProgressMode; }
176 
177  void SetText( const OUString& rText ) override;
178 
179  Size CalcWindowSizePixel() const;
180 
181  void SetClickHdl( const Link<StatusBar*,void>& rLink ) { maClickHdl = rLink; }
182  void SetDoubleClickHdl( const Link<StatusBar*,void>& rLink ) { maDoubleClickHdl = rLink; }
183 
185  void SetAccessibleName( sal_uInt16 nItemId, const OUString& rName );
187  const OUString& GetAccessibleName( sal_uInt16 nItemId ) const;
188 };
189 
190 #endif // INCLUDED_VCL_STATUS_HXX
191 
192 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
virtual void SetText(const OUString &rStr)
Definition: window.cxx:3030
long mnTextY
Definition: status.hxx:78
long mnItemsWidth
Definition: status.hxx:74
tools::Rectangle maPrgsFrameRect
Definition: status.hxx:72
virtual void MouseButtonDown(const MouseEvent &rMEvt)
Definition: mouse.cxx:413
#define VCL_DLLPUBLIC
Definition: dllapi.h:29
sal_uIntPtr sal_uLong
void DrawProgress(vcl::Window *pWindow, vcl::RenderContext &rRenderContext, const Point &rPos, long nOffset, long nPrgsWidth, long nPrgsHeight, sal_uInt16 nPercent1, sal_uInt16 nPercent2, sal_uInt16 nPercentCount, const tools::Rectangle &rFramePosSize)
Definition: status.cxx:469
const OUString & GetHelpText() const
Definition: window.cxx:3094
const OUString & GetQuickHelpText() const
Definition: window2.cxx:1221
void SetAccessibleName(const OUString &rName)
void SetHelpId(const OString &)
Definition: window2.cxx:823
virtual void dispose() override
This is intended to be used to clear any locally held references to other Window-subclass objects...
Definition: window.cxx:141
Link< StatusBar *, void > maDoubleClickHdl
Definition: status.hxx:87
void SetQuickHelpText(const OUString &rHelpText)
Definition: window2.cxx:1215
StateChangedType
Definition: window.hxx:311
OUString GetAccessibleName() const
long mnDY
Definition: status.hxx:76
sal_Int64 WinBits
#define STATUSBAR_APPEND
Definition: status.hxx:59
sal_uInt16 GetCurItemId() const
Definition: status.hxx:145
void SetDoubleClickHdl(const Link< StatusBar *, void > &rLink)
Definition: status.hxx:182
sal_uInt16 mnPercentCount
Definition: status.hxx:81
void SetHelpText(const OUString &rHelpText)
Definition: window2.cxx:1209
void SetClickHdl(const Link< StatusBar *, void > &rLink)
Definition: status.hxx:181
bool mbInUserDraw
Definition: status.hxx:84
virtual void ApplySettings(vcl::RenderContext &rRenderContext)
Definition: window.cxx:3804
Some things multiple-inherit from VclAbstractDialog and OutputDevice, so we need to use virtual inher...
Definition: outdev.hxx:304
bool mbFormat
Definition: status.hxx:82
virtual void Resize()
Definition: window.cxx:1798
bool mbAdjustHiDPI
Definition: status.hxx:85
std::vector< std::unique_ptr< ImplStatusItem > > mvItemList
Definition: status.hxx:66
OUString maPrgsTxt
Definition: status.hxx:70
bool IsProgressMode() const
Definition: status.hxx:175
long mnDX
Definition: status.hxx:75
StatusBarItemBits
Definition: status.hxx:42
SAL_DLLPRIVATE void ImplInit(vcl::Window *pParent, WinBits nStyle, SystemParentData *pSystemParentData)
Definition: window.cxx:931
Point maPrgsTxtPos
Definition: status.hxx:71
static void ImplDrawText(OutputDevice &rTargetDevice, const tools::Rectangle &rRect, const OUString &rOrigStr, DrawTextFlags nStyle, MetricVector *pVector, OUString *pDisplayText, vcl::ITextLayout &_rLayout)
Definition: text.cxx:1453
long mnPrgsSize
Definition: status.hxx:73
virtual void Paint(vcl::RenderContext &rRenderContext, const tools::Rectangle &rRect)
Definition: paint.cxx:1013
std::unique_ptr< ImplData > mpImplData
Definition: status.hxx:69
Link< StatusBar *, void > maClickHdl
Definition: status.hxx:86
virtual void StateChanged(StateChangedType nStateChange)
Definition: window.cxx:1903
Event to pass information for UserDraw() handling eg. in comboboxes.
Definition: event.hxx:205
long mnCalcHeight
Definition: status.hxx:77
virtual void RequestHelp(const HelpEvent &rHEvt)
Definition: window.cxx:1832
sal_uInt16 mnPercent
Definition: status.hxx:80
bool mbProgressMode
Definition: status.hxx:83
#define STATUSBAR_OFFSET
Definition: status.hxx:61
sal_uInt16 mnCurItemId
Definition: status.hxx:79
virtual void DataChanged(const DataChangedEvent &rDCEvt)
Definition: event.cxx:35