1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_VCL_TABCTRL_HXX
#define INCLUDED_VCL_TABCTRL_HXX
#include <vcl/dllapi.h>
#include <vcl/ctrl.hxx>
#include <vcl/toolbox.hxx>
#include <vcl/button.hxx>
#include <vcl/EnumContext.hxx>
#include <vcl/NotebookbarContextControl.hxx>
struct ImplTabItem;
struct ImplTabCtrlData;
class TabPage;
class PushButton;
class ListBox;
#ifndef TAB_APPEND
#define TAB_APPEND (sal_uInt16(0xFFFF))
#define TAB_PAGE_NOTFOUND (sal_uInt16(0xFFFF))
#endif /* !TAB_APPEND */
#define TAB_OFFSET 3
#define TAB_TABOFFSET_X 3
#define TAB_TABOFFSET_Y 3
#define TAB_EXTRASPACE_X 6
#define TAB_BORDER_LEFT 1
#define TAB_BORDER_TOP 1
#define TAB_BORDER_RIGHT 2
#define TAB_BORDER_BOTTOM 2
class VCL_DLLPUBLIC TabControl : public Control
{
protected:
ImplTabCtrlData* mpTabCtrlData;
long mnLastWidth;
long mnLastHeight;
long mnMaxPageWidth;
sal_uInt16 mnActPageId;
sal_uInt16 mnCurPageId;
bool mbFormat;
bool mbRestoreHelpId;
bool mbSmallInvalidate;
bool mbLayoutDirty;
Link<TabControl*,void> maActivateHdl;
Link<TabControl*,bool> maDeactivateHdl;
using Control::ImplInitSettings;
SAL_DLLPRIVATE void ImplInitSettings( bool bBackground );
SAL_DLLPRIVATE ImplTabItem* ImplGetItem( sal_uInt16 nId ) const;
SAL_DLLPRIVATE Size ImplGetItemSize( ImplTabItem* pItem, long nMaxWidth );
SAL_DLLPRIVATE tools::Rectangle ImplGetTabRect( sal_uInt16 nPos, long nWidth = -1, long nHeight = -1 );
SAL_DLLPRIVATE void ImplChangeTabPage( sal_uInt16 nId, sal_uInt16 nOldId );
SAL_DLLPRIVATE bool ImplPosCurTabPage();
virtual void ImplActivateTabPage( bool bNext );
SAL_DLLPRIVATE void ImplShowFocus();
SAL_DLLPRIVATE void ImplDrawItem(vcl::RenderContext& rRenderContext, ImplTabItem* pItem,
const tools::Rectangle& rCurRect, bool bFirstInGroup,
bool bLastInGroup);
SAL_DLLPRIVATE void ImplFreeLayoutData();
SAL_DLLPRIVATE bool ImplHandleKeyEvent( const KeyEvent& rKeyEvent );
DECL_DLLPRIVATE_LINK( ImplListBoxSelectHdl, ListBox&, void );
DECL_DLLPRIVATE_LINK( ImplWindowEventListener, VclWindowEvent&, void );
using Window::ImplInit;
SAL_DLLPRIVATE void ImplInit( vcl::Window* pParent, WinBits nStyle );
virtual void FillLayoutData() const override;
virtual const vcl::Font& GetCanonicalFont( const StyleSettings& _rStyle ) const override;
virtual const Color& GetCanonicalTextColor( const StyleSettings& _rStyle ) const override;
SAL_DLLPRIVATE tools::Rectangle* ImplFindPartRect( const Point& rPt );
virtual bool ImplPlaceTabs( long nWidth );
virtual void ImplPaint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect);
public:
TabControl( vcl::Window* pParent,
WinBits nStyle = WB_STDTABCONTROL );
virtual ~TabControl() override;
virtual void dispose() override;
virtual void MouseButtonDown( const MouseEvent& rMEvt ) override;
virtual void KeyInput( const KeyEvent& rKEvt ) override;
virtual void Paint( vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect ) override;
virtual void Resize() override;
virtual void GetFocus() override;
virtual void LoseFocus() override;
virtual void RequestHelp( const HelpEvent& rHEvt ) override;
virtual void Command( const CommandEvent& rCEvt ) override;
virtual bool EventNotify( NotifyEvent& rNEvt ) override;
virtual void StateChanged( StateChangedType nType ) override;
virtual void DataChanged( const DataChangedEvent& rDCEvt ) override;
virtual bool PreNotify( NotifyEvent& rNEvt ) override;
virtual void ActivatePage();
virtual bool DeactivatePage();
virtual Size GetOptimalSize() const override;
void SetTabPageSizePixel( const Size& rSize );
Size GetTabPageSizePixel() const;
// pixel offset for the tab items, default is (0,0)
void SetItemsOffset( const Point& rOffs );
Point GetItemsOffset() const;
void InsertPage( sal_uInt16 nPageId, const OUString& rText,
sal_uInt16 nPos = TAB_APPEND );
void RemovePage( sal_uInt16 nPageId );
void Clear();
void EnablePage( sal_uInt16 nPageId, bool bEnable = true );
sal_uInt16 GetPagePos( sal_uInt16 nPageId ) const;
sal_uInt16 GetPageCount() const;
sal_uInt16 GetPageId( sal_uInt16 nPos ) const;
virtual sal_uInt16 GetPageId( const Point& rPos ) const;
sal_uInt16 GetPageId( const TabPage& rPage ) const;
sal_uInt16 GetPageId( const OString& rName ) const;
virtual void SetCurPageId( sal_uInt16 nPageId );
sal_uInt16 GetCurPageId() const;
virtual void SelectTabPage( sal_uInt16 nPageId );
void SetTabPage( sal_uInt16 nPageId, TabPage* pPage );
TabPage* GetTabPage( sal_uInt16 nPageId ) const;
void SetPageText( sal_uInt16 nPageId, const OUString& rText );
OUString const & GetPageText( sal_uInt16 nPageId ) const;
void SetHelpText( sal_uInt16 nPageId, const OUString& rText );
const OUString& GetHelpText( sal_uInt16 nPageId ) const;
void SetHelpId( sal_uInt16 nPageId, const OString& rId ) const;
OString GetHelpId( sal_uInt16 nPageId ) const;
void SetPageName( sal_uInt16 nPageId, const OString& rName ) const;
OString GetPageName( sal_uInt16 nPageId ) const;
void SetPageImage( sal_uInt16 nPageId, const Image& rImage );
using Control::SetHelpId;
using Control::GetHelpId;
void SetActivatePageHdl( const Link<TabControl*,void>& rLink ) { maActivateHdl = rLink; }
void SetDeactivatePageHdl( const Link<TabControl*, bool>& rLink ) { maDeactivateHdl = rLink; }
// returns (control relative) bounding rectangle for the
// character at index nIndex relative to the text of page nPageId
using Control::GetCharacterBounds;
tools::Rectangle GetCharacterBounds( sal_uInt16 nPageId, long nIndex ) const;
// returns the index relative to the text of page nPageId (also returned)
// at position rPoint (control relative)
using Control::GetIndexForPoint;
long GetIndexForPoint( const Point& rPoint, sal_uInt16& rPageId ) const;
// returns the rectangle of the tab for page nPageId
tools::Rectangle GetTabBounds( sal_uInt16 nPageId ) const;
virtual void SetPosPixel(const Point& rPos) override;
virtual void SetSizePixel(const Size& rNewSize) override;
virtual void SetPosSizePixel(const Point& rNewPos, const Size& rNewSize) override;
virtual Size calculateRequisition() const;
void setAllocation(const Size &rAllocation);
std::vector<sal_uInt16> GetPageIDs() const;
virtual FactoryFunction GetUITestFactory() const override;
virtual void queue_resize(StateChangedType eReason = StateChangedType::Layout) override;
};
class NotebookBar;
class VCL_DLLPUBLIC NotebookbarTabControlBase : public TabControl,
public NotebookbarContextControl
{
public:
NotebookbarTabControlBase( vcl::Window* pParent );
~NotebookbarTabControlBase() override;
void dispose() override;
void SetContext( vcl::EnumContext::Context eContext ) override;
void SetIconClickHdl( Link<NotebookBar*, void> aHdl );
void SetToolBox( ToolBox* pToolBox );
ToolBox* GetToolBox() { return m_pShortcuts; }
virtual sal_uInt16 GetPageId( const Point& rPos ) const override;
virtual void SelectTabPage( sal_uInt16 nPageId ) override;
virtual void SetCurPageId( sal_uInt16 nPageId ) override;
virtual Size calculateRequisition() const override;
static sal_uInt16 GetHeaderHeight();
protected:
virtual bool ImplPlaceTabs( long nWidth ) override;
virtual void ImplPaint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect) override;
virtual void ImplActivateTabPage( bool bNext ) override;
private:
bool bLastContextWasSupported;
vcl::EnumContext::Context eLastContext;
Link<NotebookBar*,void> m_aIconClickHdl;
static sal_uInt16 m_nHeaderHeight;
VclPtr<ToolBox> m_pShortcuts;
VclPtr<PushButton> m_pOpenMenu;
DECL_LINK(OpenMenu, Button*, void);
};
#endif // INCLUDED_VCL_TABCTRL_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|