MyGUI 3.4.1
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
25
30
35 public Widget,
36 public BiIndexBase,
37 public IItemContainer,
38 public MemberObsolete<MultiListBox>
39 {
41
42 public:
44
46 void setPosition(const IntPoint& _value) override;
48 void setSize(const IntSize& _value) override;
50 void setCoord(const IntCoord& _value) override;
51
53 using Widget::setSize;
54 using Widget::setCoord;
55
56 //------------------------------------------------------------------------------//
57 // Methods for work with columns (RU:методы для работы со столбцами)
58 //------------------------------------------------------------------------------//
59 // манипуляции айтемами
60
62 size_t getColumnCount() const;
63
70 void insertColumnAt(size_t _column, const UString& _name, int _width = 0, Any _data = Any::Null);
71
77 void addColumn(const UString& _name, int _width = 0, Any _data = Any::Null);
78
80 void removeColumnAt(size_t _column);
81
83 void removeAllColumns();
84
86 void swapColumnsAt(size_t _index1, size_t _index2);
87
88 //------------------------------------------------------------------------------//
89 // манипуляции отображением
90
95 void setColumnNameAt(size_t _column, const UString& _name);
96
101 void setColumnName(MultiListItem* _item, const UString& _name);
102
107 void setColumnWidthAt(size_t _column, int _width);
108
113 void setColumnWidth(MultiListItem* _item, int _width);
114
116 const UString& getColumnNameAt(size_t _column) const;
117
119 const UString& getColumnName(const MultiListItem* _item) const;
120
122 int getColumnWidthAt(size_t _column) const;
123
125 void sortByColumn(size_t _column, bool _backward = false);
126
128 size_t getColumnIndex(const MultiListItem* _item) const;
129
134 void setColumnResizingPolicy(MultiListItem* _item, ResizingPolicy _value);
139 void setColumnResizingPolicyAt(size_t _index, ResizingPolicy _value);
140
141 //------------------------------------------------------------------------------//
142 // манипуляции данными
143
145 void setColumnDataAt(size_t _index, Any _data);
146
148 void clearColumnDataAt(size_t _index);
149
151 template <typename ValueType>
152 ValueType* getColumnDataAt(size_t _index, bool _throw = true)
153 {
154 MYGUI_ASSERT_RANGE(_index, mVectorColumnInfo.size(), "MultiListBox::getItemDataAt");
155 return mVectorColumnInfo[_index].data.castType<ValueType>(_throw);
156 }
157
158 //------------------------------------------------------------------------------//
159 // Methods for work with lines (RU:методы для работы со строками)
165 //------------------------------------------------------------------------------//
166 // манипуляции айтемами
167
169 size_t getItemCount() const;
170
172 void insertItemAt(size_t _index, const UString& _name, Any _data = Any::Null);
173
175 void addItem(const UString& _name, Any _data = Any::Null);
176
178 void removeItemAt(size_t _index);
179
181 void removeAllItems();
182
184 void swapItemsAt(size_t _index1, size_t _index2);
185
186
187 //------------------------------------------------------------------------------//
188 // манипуляции отображением
189
191 void setItemNameAt(size_t _index, const UString& _name);
192
194 const UString& getItemNameAt(size_t _index) const;
195
196
197 //------------------------------------------------------------------------------//
198 // манипуляции выделениями
199
201 size_t getIndexSelected() const;
202
204 void setIndexSelected(size_t _index);
205
207 void clearIndexSelected();
208
209
210 //------------------------------------------------------------------------------//
211 // манипуляции данными
212
214 void setItemDataAt(size_t _index, Any _data);
215
217 void clearItemDataAt(size_t _index);
218
220 template <typename ValueType>
221 ValueType* getItemDataAt(size_t _index, bool _throw = true)
222 {
223 return getSubItemDataAt<ValueType>(0, _index, _throw);
224 }
225
226
227 //------------------------------------------------------------------------------//
228 // Methods for work with sub lines (RU:методы для работы со саб строками)
229 //------------------------------------------------------------------------------//
230 // манипуляции данными
231
237 void setSubItemNameAt(size_t _column, size_t _index, const UString& _name);
238
240 const UString& getSubItemNameAt(size_t _column, size_t _index) const;
241
243 size_t findSubItemWith(size_t _column, const UString& _name);
244
245 //------------------------------------------------------------------------------//
246 // манипуляции данными
247
249 void setSubItemDataAt(size_t _column, size_t _index, Any _data);
250
252 void clearSubItemDataAt(size_t _column, size_t _index);
253
255 template <typename ValueType>
256 ValueType* getSubItemDataAt(size_t _column, size_t _index, bool _throw = true)
257 {
258 MYGUI_ASSERT_RANGE(_index, mVectorColumnInfo.begin()->list->getItemCount(), "MultiListBox::getSubItemDataAt");
259
260 size_t index = BiIndexBase::convertToBack(_index);
261 return getSubItemAt(_column)->getItemDataAt<ValueType>(index, _throw);
262 }
263
264 /*events:*/
271
278
288
295
296 /*internal:*/
297 // IItemContainer impl
298 size_t _getItemCount() const override;
299 void _addItem(const MyGUI::UString& _name) override;
300 void _removeItemAt(size_t _index) override;
301 Widget* _getItemAt(size_t _index) const override;
302 void _setItemNameAt(size_t _index, const UString& _name) override;
303 const UString& _getItemNameAt(size_t _index) const override;
304
305 protected:
306 void initialiseOverride() override;
307 void shutdownOverride() override;
308
309 void onWidgetCreated(Widget* _widget) override;
310 void onWidgetDestroy(Widget* _widget) override;
311
312 private:
313 void notifyListChangePosition(ListBox* _sender, size_t _position);
314 void notifyListChangeFocus(ListBox* _sender, size_t _position);
315 void notifyListChangeScrollPosition(ListBox* _sender, size_t _position);
316 void notifyButtonClick(Widget* _sender);
317 void notifyListSelectAccept(ListBox* _sender, size_t _position);
318 void notifyListNotifyItem(ListBox* _sender, const MyGUI::IBNotifyItemData& _info);
319
320 void updateColumns();
321 void redrawButtons();
322 void updateOnlyEmpty();
323
324 bool compare(ListBox* _list, size_t _left, size_t _right);
325 void sortList();
326 void flipList();
327
328 Widget* getOrCreateSeparator(size_t _index);
329
330 void updateBackSelected(size_t _index);
331
332 struct ColumnInfo
333 {
334 MultiListItem* item;
335 ListBox* list;
336 Button* button;
337 int width;
338 int realWidth;
339 UString name;
340 Any data;
341 ResizingPolicy sizeType;
342 };
343
344 typedef std::vector<ColumnInfo> VectorColumnInfo;
345
346 void frameEntered(float _frame);
347 void frameAdvise(bool _advise);
348
349 ListBox* getSubItemAt(size_t _column) const;
350 int getButtonHeight() const;
351
352 void _wrapItem(MultiListItem* _item);
353 void _unwrapItem(MultiListItem* _item);
354 void _swapColumnsAt(size_t _index1, size_t _index2);
355
356 int getColumnWidth(size_t _index, int _freeSpace, size_t _countStars, size_t _lastIndexStar, int _starWidth) const;
357 bool getUpdateByResize() const;
358 int updateWidthColumns(size_t& _countStars, size_t& _lastIndexStar);
359
360 private:
361 int mHeightButton;
362 int mWidthBar;
363 std::string mSkinButton;
364 std::string mSkinList;
365 Widget* mWidgetEmpty;
366
367 VectorColumnInfo mVectorColumnInfo;
368
369 VectorWidgetPtr mSeparators;
370
371 size_t mLastMouseFocusIndex;
372
373 bool mSortUp;
374 size_t mSortColumnIndex;
375
376 int mWidthSeparator;
377 std::string mSkinSeparator;
378
379 size_t mItemSelected;
380
381 bool mFrameAdvise;
382 Widget* mHeaderPlace;
383 };
384
385} // namespace MyGUI
386
387#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:48
static AnyEmpty Null
Definition: MyGUI_Any.h:59
size_t convertToBack(size_t _index) const
widget description should be here.
Definition: MyGUI_Button.h:22
widget description should be here.
Definition: MyGUI_ListBox.h:31
widget description should be here.
EventPair< EventHandle_WidgetSizeT, EventHandle_MultiListPtrSizeT > eventListChangePosition
EventPair< EventHandle_WidgetSizeT, EventHandle_MultiListPtrSizeT > eventListSelectAccept
ValueType * getSubItemDataAt(size_t _column, size_t _index, bool _throw=true)
Get item data from specified position.
EventPair< EventHandle_MultiListPtrSizeTCUTFStringRefCUTFStringRefBoolRef, EventHandle_MultiListPtrSizeTSizeTSizeTBoolRef > requestOperatorLess
EventHandle_MultiListPtrCIBNotifyCellDataRef eventNotifyItem
ValueType * getColumnDataAt(size_t _index, bool _throw=true)
Get item data from specified position.
ValueType * getItemDataAt(size_t _index, bool _throw=true)
Get item data from specified position.
widget description should be here.
A UTF-16 string with implicit conversion to/from std::string and std::wstring.
widget description should be here.
Definition: MyGUI_Widget.h:37
void setCoord(const IntCoord &_value) override
void setPosition(const IntPoint &_value) override
void setSize(const IntSize &_value) override
delegates::CMultiDelegate5< Widget *, size_t, const UString &, const UString &, bool & > EventHandle_WidgetIntUTFStringUTFStringBool
delegates::CDelegate5< MultiListBox *, size_t, const UString &, const UString &, bool & > EventHandle_MultiListPtrSizeTCUTFStringRefCUTFStringRefBoolRef
delegates::CMultiDelegate2< MultiListBox *, const IBNotifyItemData & > EventHandle_MultiListPtrCIBNotifyCellDataRef
delegates::CMultiDelegate2< MultiListBox *, size_t > EventHandle_MultiListPtrSizeT
std::vector< Widget * > VectorWidgetPtr
delegates::CDelegate5< MultiListBox *, size_t, size_t, size_t, bool & > EventHandle_MultiListPtrSizeTSizeTSizeTBoolRef