ScummVM API documentation
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
tab.h
1 /* ScummVM - Graphic Adventure Engine
2  *
3  * ScummVM is the legal property of its developers, whose names
4  * are too numerous to list here. Please refer to the COPYRIGHT
5  * file distributed with this source distribution.
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #ifndef GUI_WIDGETS_TAB_H
23 #define GUI_WIDGETS_TAB_H
24 
25 #include "gui/widget.h"
26 #include "common/str.h"
27 #include "common/array.h"
28 
29 namespace GUI {
30 
31 enum {
32  kTabForwards = 1,
33  kTabBackwards = -1
34 };
35 
36 class TabWidget : public Widget {
37  struct Tab {
38  Common::U32String title;
39  Common::String dialogName;
40  Widget *firstWidget;
41  int _tabWidth;
42  };
44 
45 protected:
46  int _activeTab;
47  int _firstVisibleTab;
48  int _lastVisibleTab;
49  TabList _tabs;
50  int _tabHeight;
51  int _minTabWidth;
52  int _titleSpacing;
53 
55 
56  int _bodyRP, _bodyTP, _bodyLP, _bodyBP;
57  ThemeEngine::DialogBackground _bodyBackgroundType;
58 
59  int _titleVPad;
60 
61  int _butRP, _butTP, _butW, _butH;
62 
63  ButtonWidget *_navLeft, *_navRight;
64  bool _navButtonsVisible;
65  int _lastRead;
66 
67  void recalc();
68 
69 public:
70  TabWidget(GuiObject *boss, int x, int y, int w, int h, ThemeEngine::TextAlignVertical alignV = ThemeEngine::kTextAlignVTop);
71  TabWidget(GuiObject *boss, const Common::String &name, ThemeEngine::TextAlignVertical alignV = ThemeEngine::kTextAlignVTop);
72  ~TabWidget() override;
73 
74  void init();
75 
80  int addTab(const Common::U32String &title, const Common::String &dialogName);
81 
91  void removeTab(int tabID);
92 
93  int getActiveTab() {
94  return _activeTab;
95  }
96 
102  void setActiveTab(int tabID);
103 
104  int getTabCount();
105 
106  void setTabTitle(int tabID, const Common::U32String &title) {
107  assert(0 <= tabID && tabID < (int)_tabs.size());
108  _tabs[tabID].title = title;
109  }
110 
111  void handleMouseDown(int x, int y, int button, int clickCount) override;
112  void handleMouseMoved(int x, int y, int button) override;
113  void handleMouseLeft(int button) override { _lastRead = -1; };
114  bool handleKeyDown(Common::KeyState state) override;
115  void handleMouseWheel(int x, int y, int direction) override;
116  void handleCommand(CommandSender *sender, uint32 cmd, uint32 data) override;
117  virtual int getFirstVisible() const;
118  virtual void setFirstVisible(int tabID, bool adjustIfRoom = false);
119 
120  bool containsWidget(Widget *) const override;
121 
122  void reflowLayout() override;
123 
124  void draw() override;
125  void markAsDirty() override;
126 
127 protected:
128  // We overload getChildY to make sure child widgets are positioned correctly.
129  // Essentially this compensates for the space taken up by the tab title header.
130  int16 getChildY() const override;
131  uint16 getHeight() const override;
132 
133  void drawWidget() override;
134 
135  Widget *findWidget(int x, int y) override;
136 
137  virtual void adjustTabs(int value);
138 
139  virtual void computeLastVisibleTab(bool adjustFirstIfRoom);
140 };
141 
142 } // End of namespace GUI
143 
144 #endif
Definition: str.h:59
TextAlignVertical
Vertical alignment of the text.
Definition: ThemeEngine.h:218
void setActiveTab(int tabID)
Definition: system.h:46
Definition: object.h:60
void draw() override
Definition: ustr.h:57
DialogBackground
Dialog background type.
Definition: ThemeEngine.h:239
void markAsDirty() override
int addTab(const Common::U32String &title, const Common::String &dialogName)
size_type size() const
Definition: array.h:315
Definition: widget.h:101
Definition: keyboard.h:294
Definition: tab.h:36
void removeTab(int tabID)
Definition: widget.h:234
Definition: object.h:40