MyGUI 3.4.1
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
25
30 public DDContainer,
31 protected ScrollViewBase,
32 public MemberObsolete<ItemBox>
33 {
35
36 public:
37 ItemBox();
38
39 //------------------------------------------------------------------------------//
40 // манипуляции айтемами
41
43 size_t getItemCount() const;
44
46 void insertItemAt(size_t _index, Any _data = Any::Null, bool update = true);
47
49 void addItem(Any _data = Any::Null, bool update = true);
50
52 void removeItemAt(size_t _index, bool update = true);
53
55 void removeAllItems();
56
58 void redrawItemAt(size_t _index);
59
61 void redrawAllItems();
62
63
64 //------------------------------------------------------------------------------//
65 // манипуляции выделениями
66
68 size_t getIndexSelected() const;
69
71 void setIndexSelected(size_t _index);
72
74 void clearIndexSelected();
75
76
77 //------------------------------------------------------------------------------//
78 // манипуляции данными
79
81 void setItemDataAt(size_t _index, Any _data);
82
84 void clearItemDataAt(size_t _index);
85
87 template <typename ValueType>
88 ValueType* getItemDataAt(size_t _index, bool _throw = true)
89 {
90 MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "ItemBox::getItemDataAt");
91 return mItemsInfo[_index].data.castType<ValueType>(_throw);
92 }
93
94
96 void setVerticalAlignment(bool _value);
98 bool getVerticalAlignment() const;
99
101 size_t getIndexByWidget(Widget* _widget) const;
102
104 Widget* getWidgetDrag() const;
105
111 Widget* getWidgetByIndex(size_t _index);
112
114 void resetDrag();
115
117 void setPosition(const IntPoint& _value) override;
119 void setSize(const IntSize& _value) override;
121 void setCoord(const IntCoord& _value) override;
122
124 using Widget::setSize;
125 using Widget::setCoord;
126
128 void setVisibleVScroll(bool _value);
130 bool isVisibleVScroll() const;
131
133 void setVisibleHScroll(bool _value);
135 bool isVisibleHScroll() const;
136
138 void setViewOffset(const IntPoint& _value);
140 IntPoint getViewOffset() const;
141
142 IntSize getViewSize() const override;
143
144 /*events:*/
151
159
167
174
181
188
195
196 /*internal:*/
197 void _resetContainer(bool _update) override;
198
199 protected:
200 void initialiseOverride() override;
201 void shutdownOverride() override;
202
204 {
206 data(_data) { }
208 };
209 typedef std::vector<ItemDataInfo> VectorItemInfo;
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);
226 void notifyMouseButtonDoubleClick(Widget* _sender);
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 // сбрасываем старую подсветку
252 void resetCurrentActiveItem();
253 // ищет и устанавливает подсвеченный айтем
254 void findCurrentActiveItem();
255
256 // запрашиваем у конейтера айтем по позиции мыши
257 size_t _getContainerIndex(const IntPoint& _point) const override;
258
259 void setPropertyOverride(const std::string& _key, const std::string& _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;
288 // колличество линий
289 int mCountLines;
290
291 // самая верхняя строка
292 int mFirstVisibleIndex;
293 // текущее смещение верхнего элемента в пикселях
294 // сколько его пикселей не видно сверху
295 int mFirstOffsetIndex;
296
297 // текущий выделенный элемент или ITEM_NONE
298 size_t mIndexSelect;
299 // подсвеченный элемент или ITEM_NONE
300 size_t mIndexActive;
301 // индекс со свойством приема или ITEM_NONE
302 size_t mIndexAccept;
303 // индекс со свойством отказа или ITEM_NONE
304 size_t mIndexRefuse;
305
306 // имеем ли мы фокус ввода
307 bool mIsFocus;
308
309 // структура данных об айтеме
310 VectorItemInfo mItemsInfo;
311
312 Widget* mItemDrag;
313 IntPoint mPointDragOffset;
314
315 bool mAlignVert;
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:48
static AnyEmpty Null
Definition: MyGUI_Any.h:59
widget description should be here.
widget description should be here.
Definition: MyGUI_ItemBox.h:33
EventHandle_ItemBoxPtrWidgetPtrCIBCellDrawInfoRef requestDrawItem
std::vector< ItemDataInfo > VectorItemInfo
EventHandle_ItemBoxPtrSizeT eventMouseItemActivate
EventHandle_ItemBoxPtrWidgetPtr requestCreateWidgetItem
EventHandle_ItemBoxPtrSizeT eventSelectItemAccept
ValueType * getItemDataAt(size_t _index, bool _throw=true)
Get item data from specified position.
Definition: MyGUI_ItemBox.h:88
EventHandle_ItemBoxPtrIntCoordRefBool requestCoordItem
EventHandle_ItemBoxPtrCIBNotifyCellDataRef eventNotifyItem
EventHandle_ItemBoxPtrSizeT eventChangeItemPosition
widget description should be here.
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::CDelegate3< ItemBox *, IntCoord &, bool > EventHandle_ItemBoxPtrIntCoordRefBool
Definition: MyGUI_ItemBox.h:21
delegates::CMultiDelegate2< ItemBox *, size_t > EventHandle_ItemBoxPtrSizeT
Definition: MyGUI_ItemBox.h:23
delegates::CDelegate2< ItemBox *, Widget * > EventHandle_ItemBoxPtrWidgetPtr
Definition: MyGUI_ItemBox.h:20
std::vector< Widget * > VectorWidgetPtr
delegates::CDelegate3< ItemBox *, Widget *, const IBDrawItemInfo & > EventHandle_ItemBoxPtrWidgetPtrCIBCellDrawInfoRef
Definition: MyGUI_ItemBox.h:22
delegates::CMultiDelegate2< ItemBox *, const IBNotifyItemData & > EventHandle_ItemBoxPtrCIBNotifyCellDataRef
Definition: MyGUI_ItemBox.h:24
unsigned int Char
Definition: MyGUI_Types.h:49