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
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __C_GUI_TAB_CONTROL_H_INCLUDED__
#define __C_GUI_TAB_CONTROL_H_INCLUDED__
#include "IrrCompileConfig.h"
#ifdef _IRR_COMPILE_WITH_GUI_
#include "IGUITabControl.h"
#include "irrArray.h"
#include "IGUISkin.h"
namespace irr
{
namespace gui
{
class CGUITabControl;
class IGUIButton;
// A tab, onto which other gui elements could be added.
class CGUITab : public IGUITab
{
public:
//! constructor
CGUITab(s32 number, IGUIEnvironment* environment,
IGUIElement* parent, const core::rect<s32>& rectangle,
s32 id);
//! destructor
//virtual ~CGUITab();
//! Returns number of this tab in tabcontrol. Can be accessed
//! later IGUITabControl::getTab() by this number.
virtual s32 getNumber() const;
//! Sets the number
virtual void setNumber(s32 n);
//! draws the element and its children
virtual void draw();
//! sets if the tab should draw its background
virtual void setDrawBackground(bool draw=true);
//! sets the color of the background, if it should be drawn.
virtual void setBackgroundColor(video::SColor c);
//! sets the color of the text
virtual void setTextColor(video::SColor c);
//! returns true if the tab is drawing its background, false if not
virtual bool isDrawingBackground() const;
//! returns the color of the background
virtual video::SColor getBackgroundColor() const;
virtual video::SColor getTextColor() const;
//! Writes attributes of the element.
virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const;
//! Reads attributes of the element
virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options);
//! only for internal use by CGUITabControl
void refreshSkinColors();
private:
s32 Number;
video::SColor BackColor;
bool OverrideTextColorEnabled;
video::SColor TextColor;
bool DrawBackground;
};
//! A standard tab control
class CGUITabControl : public IGUITabControl
{
public:
//! destructor
CGUITabControl(IGUIEnvironment* environment,
IGUIElement* parent, const core::rect<s32>& rectangle,
bool fillbackground=true, bool border=true, s32 id=-1);
//! destructor
virtual ~CGUITabControl();
//! Adds a tab
virtual IGUITab* addTab(const wchar_t* caption, s32 id=-1);
//! Adds a tab that has already been created
virtual void addTab(CGUITab* tab);
//! Insert the tab at the given index
virtual IGUITab* insertTab(s32 idx, const wchar_t* caption, s32 id=-1);
//! Removes a tab from the tabcontrol
virtual void removeTab(s32 idx);
//! Clears the tabcontrol removing all tabs
virtual void clear();
//! Returns amount of tabs in the tabcontrol
virtual s32 getTabCount() const;
//! Returns a tab based on zero based index
virtual IGUITab* getTab(s32 idx) const;
//! Brings a tab to front.
virtual bool setActiveTab(s32 idx);
//! Brings a tab to front.
virtual bool setActiveTab(IGUITab *tab);
//! Returns which tab is currently active
virtual s32 getActiveTab() const;
//! get the the id of the tab at the given absolute coordinates
virtual s32 getTabAt(s32 xpos, s32 ypos) const;
//! called if an event happened.
virtual bool OnEvent(const SEvent& event);
//! draws the element and its children
virtual void draw();
//! Removes a child.
virtual void removeChild(IGUIElement* child);
//! Writes attributes of the element.
virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const;
//! Set the height of the tabs
virtual void setTabHeight( s32 height );
//! Reads attributes of the element
virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options);
//! Get the height of the tabs
virtual s32 getTabHeight() const;
//! set the maximal width of a tab. Per default width is 0 which means "no width restriction".
virtual void setTabMaxWidth(s32 width );
//! get the maximal width of a tab
virtual s32 getTabMaxWidth() const;
//! Set the alignment of the tabs
//! note: EGUIA_CENTER is not an option
virtual void setTabVerticalAlignment( gui::EGUI_ALIGNMENT alignment );
//! Get the alignment of the tabs
virtual gui::EGUI_ALIGNMENT getTabVerticalAlignment() const;
//! Set the extra width added to tabs on each side of the text
virtual void setTabExtraWidth( s32 extraWidth );
//! Get the extra width added to tabs on each side of the text
virtual s32 getTabExtraWidth() const;
//! Update the position of the element, decides scroll button status
virtual void updateAbsolutePosition();
private:
void scrollLeft();
void scrollRight();
bool needScrollControl( s32 startIndex=0, bool withScrollControl=false );
s32 calcTabWidth(s32 pos, IGUIFont* font, const wchar_t* text, bool withScrollControl ) const;
core::rect<s32> calcTabPos();
void recalculateScrollButtonPlacement();
void recalculateScrollBar();
void refreshSprites();
core::array<CGUITab*> Tabs; // CGUITab* because we need setNumber (which is certainly not nice)
s32 ActiveTab;
bool Border;
bool FillBackground;
bool ScrollControl;
s32 TabHeight;
gui::EGUI_ALIGNMENT VerticalAlignment;
IGUIButton* UpButton;
IGUIButton* DownButton;
s32 TabMaxWidth;
s32 CurrentScrollTabIndex;
s32 TabExtraWidth;
};
} // end namespace gui
} // end namespace irr
#endif // _IRR_COMPILE_WITH_GUI_
#endif
|