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 SAL_DLLPRIVATE 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;
83  bool mbFormat;
89 
90  using Window::ImplInit;
91  SAL_DLLPRIVATE void ImplInit( vcl::Window* pParent, WinBits nStyle );
92  SAL_DLLPRIVATE void ImplInitSettings();
93  SAL_DLLPRIVATE void ImplFormat();
94  SAL_DLLPRIVATE bool ImplIsItemUpdate();
95 
96  SAL_DLLPRIVATE void ImplDrawText(vcl::RenderContext& rRenderContext);
97  SAL_DLLPRIVATE void ImplDrawItem(vcl::RenderContext& rRenderContext, bool bOffScreen,
98  sal_uInt16 nPos);
99  SAL_DLLPRIVATE void ImplDrawProgress(vcl::RenderContext& rRenderContext, sal_uInt16 nNewPerc);
100  SAL_DLLPRIVATE void ImplCalcProgressRect();
101  SAL_DLLPRIVATE tools::Rectangle ImplGetItemRectPos( sal_uInt16 nPos ) const;
102  SAL_DLLPRIVATE sal_uInt16 ImplGetFirstVisiblePos() const;
103 
104 protected:
105  virtual void ApplySettings(vcl::RenderContext& rRenderContext) override;
106 
107 public:
108  StatusBar( vcl::Window* pParent,
109  WinBits nWinStyle = WB_BORDER | WB_RIGHT );
110  virtual ~StatusBar() override;
111  virtual void dispose() override;
112 
113  void AdjustItemWidthsForHiDPI();
114 
115  virtual void MouseButtonDown( const MouseEvent& rMEvt ) override;
116  virtual void Paint( vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect ) override;
117  virtual void Resize() override;
118  virtual void RequestHelp( const HelpEvent& rHEvt ) override;
119  virtual void StateChanged( StateChangedType nType ) override;
120  virtual void DataChanged( const DataChangedEvent& rDCEvt ) override;
121 
122  void Click();
123  void DoubleClick();
124  virtual void UserDraw( const UserDrawEvent& rUDEvt );
125 
126  void InsertItem( sal_uInt16 nItemId, sal_uLong nWidth,
128  long nOffset = STATUSBAR_OFFSET,
129  sal_uInt16 nPos = STATUSBAR_APPEND );
130  void RemoveItem( sal_uInt16 nItemId );
131 
132  void ShowItem( sal_uInt16 nItemId );
133  void HideItem( sal_uInt16 nItemId );
134  bool IsItemVisible( sal_uInt16 nItemId ) const;
135 
136  void RedrawItem( sal_uInt16 nItemId );
137 
138  void Clear();
139 
140  sal_uInt16 GetItemCount() const;
141  sal_uInt16 GetItemId( sal_uInt16 nPos ) const;
142  sal_uInt16 GetItemId( const Point& rPos ) const;
143  sal_uInt16 GetItemPos( sal_uInt16 nItemId ) const;
144  tools::Rectangle GetItemRect( sal_uInt16 nItemId ) const;
145  Point GetItemTextPos( sal_uInt16 nItemId ) const;
146  sal_uInt16 GetCurItemId() const { return mnCurItemId; }
147 
148  sal_uLong GetItemWidth( sal_uInt16 nItemId ) const;
149  StatusBarItemBits GetItemBits( sal_uInt16 nItemId ) const;
150 
151  long GetItemOffset( sal_uInt16 nItemId ) const;
152 
154  void SetItemText( sal_uInt16 nItemId, const OUString& rText, int nCharsWidth = -1 );
155  const OUString& GetItemText( sal_uInt16 nItemId ) const;
156 
157  void SetItemData( sal_uInt16 nItemId, void* pNewData );
158  void* GetItemData( sal_uInt16 nItemId ) const;
159 
160  void SetItemCommand( sal_uInt16 nItemId, const OUString& rCommand );
161  OUString GetItemCommand( sal_uInt16 nItemId );
162 
163  void SetHelpText( sal_uInt16 nItemId, const OUString& rText );
164  const OUString& GetHelpText( sal_uInt16 nItemId ) const;
165 
167  void SetQuickHelpText( sal_uInt16 nItemId, const OUString& rText );
169  const OUString& GetQuickHelpText( sal_uInt16 nItemId ) const;
170 
171  void SetHelpId( sal_uInt16 nItemId, const OString& rHelpId );
172 
173  void StartProgressMode( const OUString& rText );
174  void SetProgressValue( sal_uInt16 nPercent );
175  void EndProgressMode();
176  bool IsProgressMode() const { return mbProgressMode; }
177 
178  void SetText( const OUString& rText ) override;
179 
180  Size CalcWindowSizePixel() const;
181 
182  void SetClickHdl( const Link<StatusBar*,void>& rLink ) { maClickHdl = rLink; }
183  void SetDoubleClickHdl( const Link<StatusBar*,void>& rLink ) { maDoubleClickHdl = rLink; }
184 
186  void SetAccessibleName( sal_uInt16 nItemId, const OUString& rName );
188  const OUString& GetAccessibleName( sal_uInt16 nItemId ) const;
189 };
190 
191 #endif // INCLUDED_VCL_STATUS_HXX
192 
193 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
virtual void SetText(const OUString &rStr)
Definition: window.cxx:3056
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:414
#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:470
const OUString & GetHelpText() const
Definition: window.cxx:3120
const OUString & GetQuickHelpText() const
Definition: window2.cxx:1232
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:145
Link< StatusBar *, void > maDoubleClickHdl
Definition: status.hxx:88
void SetQuickHelpText(const OUString &rHelpText)
Definition: window2.cxx:1226
StateChangedType
Definition: window.hxx:310
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:146
void SetDoubleClickHdl(const Link< StatusBar *, void > &rLink)
Definition: status.hxx:183
sal_uInt16 mnPercentCount
Definition: status.hxx:81
void SetHelpText(const OUString &rHelpText)
Definition: window2.cxx:1220
void SetClickHdl(const Link< StatusBar *, void > &rLink)
Definition: status.hxx:182
bool mbInUserDraw
Definition: status.hxx:85
virtual void ApplySettings(vcl::RenderContext &rRenderContext)
Definition: window.cxx:3826
Some things multiple-inherit from VclAbstractDialog and OutputDevice, so we need to use virtual inher...
Definition: outdev.hxx:302
bool mbFormat
Definition: status.hxx:83
sal_uInt32 mnLastProgressPaint_ms
Definition: status.hxx:82
virtual void Resize()
Definition: window.cxx:1830
bool mbAdjustHiDPI
Definition: status.hxx:86
std::vector< std::unique_ptr< ImplStatusItem > > mvItemList
Definition: status.hxx:68
OUString maPrgsTxt
Definition: status.hxx:70
bool IsProgressMode() const
Definition: status.hxx:176
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:936
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:1464
long mnPrgsSize
Definition: status.hxx:73
virtual void Paint(vcl::RenderContext &rRenderContext, const tools::Rectangle &rRect)
Definition: paint.cxx:1019
std::unique_ptr< ImplData > mpImplData
Definition: status.hxx:69
Link< StatusBar *, void > maClickHdl
Definition: status.hxx:87
virtual void StateChanged(StateChangedType nStateChange)
Definition: window.cxx:1935
Event to pass information for UserDraw() handling eg. in comboboxes.
Definition: event.hxx:218
long mnCalcHeight
Definition: status.hxx:77
virtual void RequestHelp(const HelpEvent &rHEvt)
Definition: window.cxx:1864
sal_uInt16 mnPercent
Definition: status.hxx:80
bool mbProgressMode
Definition: status.hxx:84
#define STATUSBAR_OFFSET
Definition: status.hxx:61
sal_uInt16 mnCurItemId
Definition: status.hxx:79
virtual void DataChanged(const DataChangedEvent &rDCEvt)
Definition: event.cxx:35