aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/irrlicht-1.8/source/Irrlicht/CGUITable.h
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/irrlicht-1.8/source/Irrlicht/CGUITable.h')
-rw-r--r--libraries/irrlicht-1.8/source/Irrlicht/CGUITable.h224
1 files changed, 224 insertions, 0 deletions
diff --git a/libraries/irrlicht-1.8/source/Irrlicht/CGUITable.h b/libraries/irrlicht-1.8/source/Irrlicht/CGUITable.h
new file mode 100644
index 0000000..69cfea5
--- /dev/null
+++ b/libraries/irrlicht-1.8/source/Irrlicht/CGUITable.h
@@ -0,0 +1,224 @@
1// Copyright (C) 2002-2012 Nikolaus Gebhardt
2// This file is part of the "Irrlicht Engine".
3// For conditions of distribution and use, see copyright notice in irrlicht.h
4
5// 07.10.2005 - Multicolor-Listbox addet by A. Buschhueter (Acki)
6// A_Buschhueter@gmx.de
7
8#ifndef __C_GUI_TABLE_BAR_H_INCLUDED__
9#define __C_GUI_TABLE_BAR_H_INCLUDED__
10
11#include "IrrCompileConfig.h"
12#ifdef _IRR_COMPILE_WITH_GUI_
13
14#include "IGUITable.h"
15#include "irrArray.h"
16
17namespace irr
18{
19namespace gui
20{
21
22 class IGUIFont;
23 class IGUIScrollBar;
24
25 class CGUITable : public IGUITable
26 {
27 public:
28 //! constructor
29 CGUITable(IGUIEnvironment* environment, IGUIElement* parent,
30 s32 id, const core::rect<s32>& rectangle, bool clip=true,
31 bool drawBack=false, bool moveOverSelect=true);
32
33 //! destructor
34 ~CGUITable();
35
36 //! Adds a column
37 //! If columnIndex is outside the current range, do push new colum at the end
38 virtual void addColumn(const wchar_t* caption, s32 columnIndex=-1);
39
40 //! remove a column from the table
41 virtual void removeColumn(u32 columnIndex);
42
43 //! Returns the number of columns in the table control
44 virtual s32 getColumnCount() const;
45
46 //! Makes a column active. This will trigger an ordering process.
47 /** \param idx: The id of the column to make active.
48 \return True if successful. */
49 virtual bool setActiveColumn(s32 columnIndex, bool doOrder=false);
50
51 //! Returns which header is currently active
52 virtual s32 getActiveColumn() const;
53
54 //! Returns the ordering used by the currently active column
55 virtual EGUI_ORDERING_MODE getActiveColumnOrdering() const;
56
57 //! set a column width
58 virtual void setColumnWidth(u32 columnIndex, u32 width);
59
60 //! Get the width of a column
61 virtual u32 getColumnWidth(u32 columnIndex) const;
62
63 //! columns can be resized by drag 'n drop
64 virtual void setResizableColumns(bool resizable);
65
66 //! can columns be resized by dran 'n drop?
67 virtual bool hasResizableColumns() const;
68
69 //! This tells the table control which ordering mode should be used when
70 //! a column header is clicked.
71 /** \param columnIndex: The index of the column header.
72 \param state: If true, a EGET_TABLE_HEADER_CHANGED message will be sent and you can order the table data as you whish.*/
73 //! \param mode: One of the modes defined in EGUI_COLUMN_ORDERING
74 virtual void setColumnOrdering(u32 columnIndex, EGUI_COLUMN_ORDERING mode);
75
76 //! Returns which row is currently selected
77 virtual s32 getSelected() const;
78
79 //! set wich row is currently selected
80 virtual void setSelected( s32 index );
81
82 //! Returns amount of rows in the tabcontrol
83 virtual s32 getRowCount() const;
84
85 //! adds a row to the table
86 /** \param rowIndex: zero based index of rows. The row will be
87 inserted at this position. If a row already exists
88 there, it will be placed after it. If the row is larger
89 than the actual number of rows by more than one, it
90 won't be created. Note that if you create a row that is
91 not at the end, there might be performance issues*/
92 virtual u32 addRow(u32 rowIndex);
93
94 //! Remove a row from the table
95 virtual void removeRow(u32 rowIndex);
96
97 //! clear the table rows, but keep the columns intact
98 virtual void clearRows();
99
100 //! Swap two row positions. This is useful for a custom ordering algo.
101 virtual void swapRows(u32 rowIndexA, u32 rowIndexB);
102
103 //! This tells the table to start ordering all the rows. You
104 //! need to explicitly tell the table to reorder the rows when
105 //! a new row is added or the cells data is changed. This makes
106 //! the system more flexible and doesn't make you pay the cost
107 //! of ordering when adding a lot of rows.
108 //! \param columnIndex: When set to -1 the active column is used.
109 virtual void orderRows(s32 columnIndex=-1, EGUI_ORDERING_MODE mode=EGOM_NONE);
110
111
112 //! Set the text of a cell
113 virtual void setCellText(u32 rowIndex, u32 columnIndex, const core::stringw& text);
114
115 //! Set the text of a cell, and set a color of this cell.
116 virtual void setCellText(u32 rowIndex, u32 columnIndex, const core::stringw& text, video::SColor color);
117
118 //! Set the data of a cell
119 //! data will not be serialized.
120 virtual void setCellData(u32 rowIndex, u32 columnIndex, void *data);
121
122 //! Set the color of a cell text
123 virtual void setCellColor(u32 rowIndex, u32 columnIndex, video::SColor color);
124
125 //! Get the text of a cell
126 virtual const wchar_t* getCellText(u32 rowIndex, u32 columnIndex ) const;
127
128 //! Get the data of a cell
129 virtual void* getCellData(u32 rowIndex, u32 columnIndex ) const;
130
131 //! clears the table, deletes all items in the table
132 virtual void clear();
133
134 //! called if an event happened.
135 virtual bool OnEvent(const SEvent &event);
136
137 //! draws the element and its children
138 virtual void draw();
139
140 //! Set flags, as defined in EGUI_TABLE_DRAW_FLAGS, which influence the layout
141 virtual void setDrawFlags(s32 flags);
142
143 //! Get the flags, as defined in EGUI_TABLE_DRAW_FLAGS, which influence the layout
144 virtual s32 getDrawFlags() const;
145
146 //! Writes attributes of the object.
147 //! Implement this to expose the attributes of your scene node animator for
148 //! scripting languages, editors, debuggers or xml serialization purposes.
149 virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const;
150
151 //! Reads attributes of the object.
152 //! Implement this to set the attributes of your scene node animator for
153 //! scripting languages, editors, debuggers or xml deserialization purposes.
154 virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0);
155
156 protected:
157 virtual void refreshControls();
158 virtual void checkScrollbars();
159
160 private:
161
162 struct Cell
163 {
164 Cell() : IsOverrideColor(false), Data(0) {}
165 core::stringw Text;
166 core::stringw BrokenText;
167 bool IsOverrideColor;
168 video::SColor Color;
169 void *Data;
170 };
171
172 struct Row
173 {
174 Row() {}
175 core::array<Cell> Items;
176 };
177
178 struct Column
179 {
180 Column() : Width(0), OrderingMode(EGCO_NONE) {}
181 core::stringw Name;
182 u32 Width;
183 EGUI_COLUMN_ORDERING OrderingMode;
184 };
185
186 void breakText(const core::stringw &text, core::stringw & brokenText, u32 cellWidth);
187 void selectNew(s32 ypos, bool onlyHover=false);
188 bool selectColumnHeader(s32 xpos, s32 ypos);
189 bool dragColumnStart(s32 xpos, s32 ypos);
190 bool dragColumnUpdate(s32 xpos);
191 void recalculateHeights();
192 void recalculateWidths();
193
194 core::array< Column > Columns;
195 core::array< Row > Rows;
196 gui::IGUIFont* Font;
197 gui::IGUIScrollBar* VerticalScrollBar;
198 gui::IGUIScrollBar* HorizontalScrollBar;
199 bool Clip;
200 bool DrawBack;
201 bool MoveOverSelect;
202 bool Selecting;
203 s32 CurrentResizedColumn;
204 s32 ResizeStart;
205 bool ResizableColumns;
206
207 s32 ItemHeight;
208 s32 TotalItemHeight;
209 s32 TotalItemWidth;
210 s32 Selected;
211 s32 CellHeightPadding;
212 s32 CellWidthPadding;
213 s32 ActiveTab;
214 EGUI_ORDERING_MODE CurrentOrdering;
215 s32 DrawFlags;
216 };
217
218} // end namespace gui
219} // end namespace irr
220
221#endif // _IRR_COMPILE_WITH_GUI_
222
223#endif
224