MyGUI 3.4.3
MyGUI_ItemBox.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_ITEM_BOX_H_
8#define MYGUI_ITEM_BOX_H_
9
10#include "MyGUI_Prerequest.h"
11#include "MyGUI_DDContainer.h"
12#include "MyGUI_IBItemInfo.h"
13#include "MyGUI_Any.h"
14#include "MyGUI_EventPair.h"
16
17namespace MyGUI
18{
19
26
30 class MYGUI_EXPORT ItemBox : public DDContainer, protected ScrollViewBase, public MemberObsolete<ItemBox>
31 {
33
34 public:
35 ItemBox();
36
37 //------------------------------------------------------------------------------//
38 // манипуляции айтемами
39
41 size_t getItemCount() const;
42
44 void insertItemAt(size_t _index, Any _data = Any::Null, bool update = true);
45
47 void addItem(Any _data = Any::Null, bool update = true);
48
50 void removeItemAt(size_t _index, bool update = true);
51
53 void removeAllItems();
54
56 void redrawItemAt(size_t _index);
57
59 void redrawAllItems();
60
61
62 //------------------------------------------------------------------------------//
63 // манипуляции выделениями
64
66 size_t getIndexSelected() const;
67
69 void setIndexSelected(size_t _index);
70
72 void clearIndexSelected();
73
74
75 //------------------------------------------------------------------------------//
76 // манипуляции данными
77
79 void setItemDataAt(size_t _index, Any _data);
80
82 void clearItemDataAt(size_t _index);
83
85 template<typename ValueType>
86 ValueType* getItemDataAt(size_t _index, bool _throw = true)
87 {
88 MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "ItemBox::getItemDataAt");
89 return mItemsInfo[_index].data.castType<ValueType>(_throw);
90 }
91
92
94 void setVerticalAlignment(bool _vert);
96 bool getVerticalAlignment() const;
97
99 size_t getIndexByWidget(Widget* _widget) const;
100
102 Widget* getWidgetDrag() const;
103
109 Widget* getWidgetByIndex(size_t _index);
110
112 void resetDrag();
113
115 void setPosition(const IntPoint& _point) override;
117 void setSize(const IntSize& _size) override;
119 void setCoord(const IntCoord& _coord) override;
120
122 using Widget::setSize;
123 using Widget::setCoord;
124
126 void setVisibleVScroll(bool _value);
128 bool isVisibleVScroll() const;
129
131 void setVisibleHScroll(bool _value);
133 bool isVisibleHScroll() const;
134
136 void setViewOffset(const IntPoint& _value);
138 IntPoint getViewOffset() const;
139
140 IntSize getViewSize() const override;
141
142 /*events:*/
149
157
165
172
179
186
193
194 /*internal:*/
195 void _resetContainer(bool _update) override;
196
197 protected:
198 void initialiseOverride() override;
199 void shutdownOverride() override;
200
202 {
204 data(_data)
205 {
206 }
208 };
209 using VectorItemInfo = std::vector<ItemDataInfo>;
210
211 void onMouseButtonPressed(int _left, int _top, MouseButton _id) override;
212 void onMouseButtonReleased(int _left, int _top, MouseButton _id) override;
213 void onKeyButtonPressed(KeyCode _key, Char _char) override;
214 void onKeyButtonReleased(KeyCode _key) override;
215 void onMouseDrag(int _left, int _top, MouseButton _id) override;
216
217 void onMouseWheel(int _rel) override;
218 void onKeyLostFocus(Widget* _new) override;
219 void onKeySetFocus(Widget* _old) override;
220
221 void notifyKeyButtonPressed(Widget* _sender, KeyCode _key, Char _char);
222 void notifyKeyButtonReleased(Widget* _sender, KeyCode _key);
223 void notifyScrollChangePosition(ScrollBar* _sender, size_t _index);
224 void notifyMouseWheel(Widget* _sender, int _rel);
225 void notifyRootMouseChangeFocus(Widget* _sender, bool _focus);
227 size_t _getItemIndex(Widget* _item) const override;
228 void notifyMouseDrag(Widget* _sender, int _left, int _top, MouseButton _id);
229 void notifyMouseButtonPressed(Widget* _sender, int _left, int _top, MouseButton _id);
230 void notifyMouseButtonReleased(Widget* _sender, int _left, int _top, MouseButton _id);
231
232
233 void removeDropItems() override;
234 void updateDropItems() override;
235 void updateDropItemsState(const DDWidgetState& _state) override;
236
237 // Обновляет данные о айтемах, при изменении размеров
238 void updateMetrics();
239
240 // просто обновляет все виджеты что видны
241 void _updateAllVisible(bool _redraw);
242
243 void updateFromResize();
244
245 // returns next item, create new one if requesting next one
246 // can be requested only sequentially
247 Widget* getItemWidget(size_t _index);
248
249 void _setContainerItemInfo(size_t _index, bool _set, bool _accept) override;
250
251 // сбрасываем старую подсветку
253 // ищет и устанавливает подсвеченный айтем
255
256 // запрашиваем у конейтера айтем по позиции мыши
257 size_t _getContainerIndex(const IntPoint& _point) const override;
258
259 void setPropertyOverride(std::string_view _key, std::string_view _value) override;
260
261 private:
262 size_t calcIndexByWidget(Widget* _widget) const;
263
264 void requestItemSize();
265
266 IntSize getContentSize() const override;
267 IntPoint getContentPosition() const override;
268 void eraseContent() override;
269 size_t getHScrollPage() const override;
270 size_t getVScrollPage() const override;
271 Align getContentAlign() const override;
272 void setContentPosition(const IntPoint& _point) override;
273
274 private:
275 // наши дети в строках
276 VectorWidgetPtr mVectorItems;
277
278 // размер одного айтема
279 IntSize mSizeItem;
280
281 // размерность скролла в пикселях
282 IntSize mContentSize;
283 // позиция скролла п пикселях
284 IntPoint mContentPosition;
285
286 // колличество айтемов в одной строке
287 int mCountItemInLine{0};
288 // колличество линий
289 int mCountLines{0};
290
291 // самая верхняя строка
292 int mFirstVisibleIndex{0};
293 // текущее смещение верхнего элемента в пикселях
294 // сколько его пикселей не видно сверху
295 int mFirstOffsetIndex{0};
296
297 // текущий выделенный элемент или ITEM_NONE
298 size_t mIndexSelect{ITEM_NONE};
299 // подсвеченный элемент или ITEM_NONE
300 size_t mIndexActive{ITEM_NONE};
301 // индекс со свойством приема или ITEM_NONE
302 size_t mIndexAccept{ITEM_NONE};
303 // индекс со свойством отказа или ITEM_NONE
304 size_t mIndexRefuse{ITEM_NONE};
305
306 // имеем ли мы фокус ввода
307 bool mIsFocus{false};
308
309 // структура данных об айтеме
310 VectorItemInfo mItemsInfo;
311
312 Widget* mItemDrag{nullptr};
313 IntPoint mPointDragOffset;
314
315 bool mAlignVert{true};
316
317 std::string mDragLayer;
318 };
319
320} // namespace MyGUI
321
322#endif // MYGUI_ITEM_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
widget description should be here.
void onMouseButtonPressed(int _left, int _top, MouseButton _id) override
void onKeyButtonPressed(KeyCode _key, Char _char) override
void clearItemDataAt(size_t _index)
Clear an item data at a specified position.
void notifyMouseDrag(Widget *_sender, int _left, int _top, MouseButton _id)
void notifyMouseButtonReleased(Widget *_sender, int _left, int _top, MouseButton _id)
size_t getItemCount() const
Get number of items.
EventHandle_ItemBoxPtrWidgetPtrCIBCellDrawInfoRef requestDrawItem
void notifyMouseWheel(Widget *_sender, int _rel)
void shutdownOverride() override
void removeItemAt(size_t _index, bool update=true)
Remove item at a specified position.
void notifyMouseButtonDoubleClick(Widget *_sender)
void onKeySetFocus(Widget *_old) override
void redrawItemAt(size_t _index)
Redraw at a specified position.
void onMouseWheel(int _rel) override
void onKeyButtonReleased(KeyCode _key) override
void notifyScrollChangePosition(ScrollBar *_sender, size_t _index)
Widget * getItemWidget(size_t _index)
void setIndexSelected(size_t _index)
Select specified _index.
void redrawAllItems()
Redraw all items.
void initialiseOverride() override
void resetCurrentActiveItem()
void onMouseDrag(int _left, int _top, MouseButton _id) override
void onKeyLostFocus(Widget *_new) override
void insertItemAt(size_t _index, Any _data=Any::Null, bool update=true)
Insert an item into a array at a specified position.
size_t _getContainerIndex(const IntPoint &_point) const override
void notifyMouseButtonPressed(Widget *_sender, int _left, int _top, MouseButton _id)
void setPropertyOverride(std::string_view _key, std::string_view _value) override
EventHandle_ItemBoxPtrSizeT eventMouseItemActivate
EventHandle_ItemBoxPtrWidgetPtr requestCreateWidgetItem
EventHandle_ItemBoxPtrSizeT eventSelectItemAccept
void notifyKeyButtonReleased(Widget *_sender, KeyCode _key)
std::vector< ItemDataInfo > VectorItemInfo
void setItemDataAt(size_t _index, Any _data)
Replace an item data at a specified position.
void updateDropItems() override
size_t _getItemIndex(Widget *_item) const override
void _updateAllVisible(bool _redraw)
void updateDropItemsState(const DDWidgetState &_state) override
size_t getIndexSelected() const
Get index of selected item (ITEM_NONE if none selected)
void _resetContainer(bool _update) override
void notifyRootMouseChangeFocus(Widget *_sender, bool _focus)
ValueType * getItemDataAt(size_t _index, bool _throw=true)
Get item data from specified position.
void findCurrentActiveItem()
void onMouseButtonReleased(int _left, int _top, MouseButton _id) override
void removeAllItems()
Remove all items.
void notifyKeyButtonPressed(Widget *_sender, KeyCode _key, Char _char)
void removeDropItems() override
void _setContainerItemInfo(size_t _index, bool _set, bool _accept) override
void clearIndexSelected()
Clear item selection.
void addItem(Any _data=Any::Null, bool update=true)
Add an item to the end of a array.
EventHandle_ItemBoxPtrIntCoordRefBool requestCoordItem
EventHandle_ItemBoxPtrCIBNotifyCellDataRef eventNotifyItem
EventHandle_ItemBoxPtrSizeT eventChangeItemPosition
widget description should be here.
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< ItemBox *, const IBNotifyItemData & > EventHandle_ItemBoxPtrCIBNotifyCellDataRef
types::TPoint< int > IntPoint
Definition MyGUI_Types.h:27
delegates::Delegate< ItemBox *, IntCoord &, bool > EventHandle_ItemBoxPtrIntCoordRefBool
delegates::Delegate< ItemBox *, Widget * > EventHandle_ItemBoxPtrWidgetPtr
delegates::Delegate< ItemBox *, Widget *, const IBDrawItemInfo & > EventHandle_ItemBoxPtrWidgetPtrCIBCellDrawInfoRef
unsigned int Char
Definition MyGUI_Types.h:50
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< ItemBox *, size_t > EventHandle_ItemBoxPtrSizeT