MyGUI 3.4.3
MyGUI_MultiListBox.h
Go to the documentation of this file.
1/*
2 * This source file is part of MyGUI. For the latest info, see http://mygui.info/
3 * Distributed under the MIT License
4 * (See accompanying file COPYING.MIT or copy at http://opensource.org/licenses/MIT)
5 */
6
7#ifndef MYGUI_MULTI_LIST_BOX_H_
8#define MYGUI_MULTI_LIST_BOX_H_
9
10#include "MyGUI_Prerequest.h"
11#include "MyGUI_Widget.h"
12#include "MyGUI_ListBox.h"
13#include "MyGUI_Any.h"
14#include "MyGUI_BiIndexBase.h"
15#include "MyGUI_EventPair.h"
16#include "MyGUI_IItem.h"
19
20namespace MyGUI
21{
22
23 //OBSOLETE
26
34
39 public Widget,
40 public BiIndexBase,
41 public IItemContainer,
42 public MemberObsolete<MultiListBox>
43 {
45
46 public:
48 void setPosition(const IntPoint& _point) override;
50 void setSize(const IntSize& _size) override;
52 void setCoord(const IntCoord& _coord) override;
53
55 using Widget::setSize;
56 using Widget::setCoord;
57
58 //------------------------------------------------------------------------------//
59 // Methods for work with columns (RU:методы для работы со столбцами)
60 //------------------------------------------------------------------------------//
61 // манипуляции айтемами
62
64 size_t getColumnCount() const;
65
72 void insertColumnAt(size_t _column, const UString& _name, int _width = 0, Any _data = Any::Null);
73
79 void addColumn(const UString& _name, int _width = 0, Any _data = Any::Null);
80
82 void removeColumnAt(size_t _column);
83
85 void removeAllColumns();
86
88 void swapColumnsAt(size_t _index1, size_t _index2);
89
90 //------------------------------------------------------------------------------//
91 // манипуляции отображением
92
97 void setColumnNameAt(size_t _column, const UString& _name);
98
103 void setColumnName(MultiListItem* _item, const UString& _name);
104
109 void setColumnWidthAt(size_t _column, int _width);
110
115 void setColumnWidth(MultiListItem* _item, int _width);
116
118 const UString& getColumnNameAt(size_t _column) const;
119
121 const UString& getColumnName(const MultiListItem* _item) const;
122
124 int getColumnWidthAt(size_t _column) const;
125
127 void sortByColumn(size_t _column, bool _backward = false);
128
130 size_t getColumnIndex(const MultiListItem* _item) const;
131
141 void setColumnResizingPolicyAt(size_t _index, ResizingPolicy _value);
142
143 //------------------------------------------------------------------------------//
144 // манипуляции данными
145
147 void setColumnDataAt(size_t _index, Any _data);
148
150 void clearColumnDataAt(size_t _index);
151
153 template<typename ValueType>
154 ValueType* getColumnDataAt(size_t _index, bool _throw = true)
155 {
156 MYGUI_ASSERT_RANGE(_index, mVectorColumnInfo.size(), "MultiListBox::getItemDataAt");
157 return mVectorColumnInfo[_index].data.castType<ValueType>(_throw);
158 }
159
160 //------------------------------------------------------------------------------//
161 // Methods for work with lines (RU:методы для работы со строками)
166
167 //------------------------------------------------------------------------------//
168 // манипуляции айтемами
169
171 size_t getItemCount() const;
172
174 void insertItemAt(size_t _index, const UString& _name, Any _data = Any::Null);
175
177 void addItem(const UString& _name, Any _data = Any::Null);
178
180 void removeItemAt(size_t _index);
181
183 void removeAllItems();
184
186 void swapItemsAt(size_t _index1, size_t _index2);
187
188
189 //------------------------------------------------------------------------------//
190 // манипуляции отображением
191
193 void setItemNameAt(size_t _index, const UString& _name);
194
196 const UString& getItemNameAt(size_t _index) const;
197
198
199 //------------------------------------------------------------------------------//
200 // манипуляции выделениями
201
203 size_t getIndexSelected() const;
204
206 void setIndexSelected(size_t _index);
207
209 void clearIndexSelected();
210
211
212 //------------------------------------------------------------------------------//
213 // манипуляции данными
214
216 void setItemDataAt(size_t _index, Any _data);
217
219 void clearItemDataAt(size_t _index);
220
222 template<typename ValueType>
223 ValueType* getItemDataAt(size_t _index, bool _throw = true)
224 {
225 return getSubItemDataAt<ValueType>(0, _index, _throw);
226 }
227
228
229 //------------------------------------------------------------------------------//
230 // Methods for work with sub lines (RU:методы для работы со саб строками)
231 //------------------------------------------------------------------------------//
232 // манипуляции данными
233
239 void setSubItemNameAt(size_t _column, size_t _index, const UString& _name);
240
242 const UString& getSubItemNameAt(size_t _column, size_t _index) const;
243
245 size_t findSubItemWith(size_t _column, const UString& _name);
246
247 //------------------------------------------------------------------------------//
248 // манипуляции данными
249
251 void setSubItemDataAt(size_t _column, size_t _index, Any _data);
252
254 void clearSubItemDataAt(size_t _column, size_t _index);
255
257 template<typename ValueType>
258 ValueType* getSubItemDataAt(size_t _column, size_t _index, bool _throw = true)
259 {
261 _index,
262 mVectorColumnInfo.begin()->list->getItemCount(),
263 "MultiListBox::getSubItemDataAt");
264
265 size_t index = BiIndexBase::convertToBack(_index);
266 return getSubItemAt(_column)->getItemDataAt<ValueType>(index, _throw);
267 }
268
269 /*events:*/
276
283
292 EventPair<
296
303
304 /*internal:*/
305 // IItemContainer impl
306 size_t _getItemCount() const override;
307 void _addItem(const MyGUI::UString& _name) override;
308 void _removeItemAt(size_t _index) override;
309 Widget* _getItemAt(size_t _index) const override;
310 void _setItemNameAt(size_t _index, const UString& _name) override;
311 const UString& _getItemNameAt(size_t _index) const override;
312
313 protected:
314 void initialiseOverride() override;
315 void shutdownOverride() override;
316
317 void onWidgetCreated(Widget* _widget) override;
318 void onWidgetDestroy(Widget* _widget) override;
319
320 private:
321 void notifyListChangePosition(ListBox* _sender, size_t _position);
322 void notifyListChangeFocus(ListBox* _sender, size_t _position);
323 void notifyListChangeScrollPosition(ListBox* _sender, size_t _position);
324 void notifyButtonClick(Widget* _sender);
325 void notifyListSelectAccept(ListBox* _sender, size_t _position);
326 void notifyListNotifyItem(ListBox* _sender, const MyGUI::IBNotifyItemData& _info);
327
328 void updateColumns();
329 void redrawButtons();
330 void updateOnlyEmpty();
331
332 bool compare(ListBox* _list, size_t _left, size_t _right);
333 void sortList();
334 void flipList();
335
336 Widget* getOrCreateSeparator(size_t _index);
337
338 void updateBackSelected(size_t _index);
339
340 struct ColumnInfo
341 {
342 MultiListItem* item;
343 ListBox* list;
344 Button* button;
345 int width;
346 int realWidth;
347 UString name;
348 Any data;
349 ResizingPolicy sizeType;
350 };
351
352 using VectorColumnInfo = std::vector<ColumnInfo>;
353
354 void frameEntered(float _frame);
355 void frameAdvise(bool _advise);
356
357 ListBox* getSubItemAt(size_t _column) const;
358 int getButtonHeight() const;
359
360 void _wrapItem(MultiListItem* _item);
361 void _unwrapItem(MultiListItem* _item);
362 void _swapColumnsAt(size_t _index1, size_t _index2);
363
364 int getColumnWidth(size_t _index, int _freeSpace, size_t _countStars, size_t _lastIndexStar, int _starWidth)
365 const;
366 bool getUpdateByResize() const;
367 int updateWidthColumns(size_t& _countStars, size_t& _lastIndexStar);
368
369 private:
370 int mHeightButton{0};
371 int mWidthBar{0};
372 std::string mSkinButton;
373 std::string mSkinList;
374 Widget* mWidgetEmpty{nullptr};
375
376 VectorColumnInfo mVectorColumnInfo;
377
378 VectorWidgetPtr mSeparators;
379
380 size_t mLastMouseFocusIndex{ITEM_NONE};
381
382 bool mSortUp{true};
383 size_t mSortColumnIndex{ITEM_NONE};
384
385 int mWidthSeparator{0};
386 std::string mSkinSeparator;
387
388 size_t mItemSelected{ITEM_NONE};
389
390 bool mFrameAdvise{false};
391 Widget* mHeaderPlace{nullptr};
392 };
393
394} // namespace MyGUI
395
396#endif // MYGUI_MULTI_LIST_BOX_H_
#define MYGUI_ASSERT_RANGE(index, size, owner)
#define MYGUI_EXPORT
#define MYGUI_RTTI_DERIVED(DerivedType)
Definition MyGUI_RTTI.h:69
static const Any Null
Definition MyGUI_Any.h:58
size_t convertToBack(size_t _index) const
widget description should be here.
widget description should be here.
widget description should be here.
size_t _getItemCount() const override
void setColumnWidthAt(size_t _column, int _width)
void onWidgetDestroy(Widget *_widget) override
void _removeItemAt(size_t _index) override
void setColumnResizingPolicyAt(size_t _index, ResizingPolicy _value)
void setColumnWidth(MultiListItem *_item, int _width)
void _setItemNameAt(size_t _index, const UString &_name) override
void setCoord(const IntCoord &_coord) override
EventPair< EventHandle_MultiListPtrSizeTCUTFStringRefCUTFStringRefBoolRef, EventHandle_MultiListPtrSizeTSizeTSizeTBoolRef > requestOperatorLess
void setColumnDataAt(size_t _index, Any _data)
Replace an item data at a specified position.
EventPair< EventHandle_WidgetSizeT, EventHandle_MultiListPtrSizeT > eventListChangePosition
void sortByColumn(size_t _column, bool _backward=false)
const UString & _getItemNameAt(size_t _index) const override
void insertColumnAt(size_t _column, const UString &_name, int _width=0, Any _data=Any::Null)
int getColumnWidthAt(size_t _column) const
void setSize(const IntSize &_size) override
EventPair< EventHandle_WidgetSizeT, EventHandle_MultiListPtrSizeT > eventListSelectAccept
size_t getColumnCount() const
Get number of columns.
void onWidgetCreated(Widget *_widget) override
ValueType * getSubItemDataAt(size_t _column, size_t _index, bool _throw=true)
Get item data from specified position.
void removeColumnAt(size_t _column)
Widget * _getItemAt(size_t _index) const override
void setPosition(const IntPoint &_point) override
void _addItem(const MyGUI::UString &_name) override
void clearColumnDataAt(size_t _index)
Clear an item data at a specified position.
void shutdownOverride() override
EventHandle_MultiListPtrCIBNotifyCellDataRef eventNotifyItem
void initialiseOverride() override
size_t getColumnIndex(const MultiListItem *_item) const
Get column index.
void setColumnNameAt(size_t _column, const UString &_name)
ValueType * getColumnDataAt(size_t _index, bool _throw=true)
Get item data from specified position.
void addColumn(const UString &_name, int _width=0, Any _data=Any::Null)
ValueType * getItemDataAt(size_t _index, bool _throw=true)
Get item data from specified position.
void setColumnName(MultiListItem *_item, const UString &_name)
void setColumnResizingPolicy(MultiListItem *_item, ResizingPolicy _value)
const UString & getColumnNameAt(size_t _column) const
void swapColumnsAt(size_t _index1, size_t _index2)
Swap columns at a specified positions.
const UString & getColumnName(const MultiListItem *_item) const
widget description should be here.
A UTF-16 string with implicit conversion to/from std::string and std::wstring.
widget description should be here.
void setSize(const IntSize &_size) override
void setPosition(const IntPoint &_point) override
void setCoord(const IntCoord &_coord) override
delegates::MultiDelegate< MultiListBox *, const IBNotifyItemData & > EventHandle_MultiListPtrCIBNotifyCellDataRef
types::TPoint< int > IntPoint
Definition MyGUI_Types.h:27
delegates::Delegate< MultiListBox *, size_t, size_t, size_t, bool & > EventHandle_MultiListPtrSizeTSizeTSizeTBoolRef
delegates::Delegate< MultiListBox *, size_t, const UString &, const UString &, bool & > EventHandle_MultiListPtrSizeTCUTFStringRefCUTFStringRefBoolRef
delegates::MultiDelegate< Widget *, size_t, const UString &, const UString &, bool & > EventHandle_WidgetIntUTFStringUTFStringBool
constexpr size_t ITEM_NONE
types::TCoord< int > IntCoord
Definition MyGUI_Types.h:36
types::TSize< int > IntSize
Definition MyGUI_Types.h:30
std::vector< Widget * > VectorWidgetPtr
delegates::MultiDelegate< MultiListBox *, size_t > EventHandle_MultiListPtrSizeT