MyGUI 3.2.2

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"
15 #include "MyGUI_ScrollViewBase.h"
16
17 namespace MyGUI
18 {
19
20 typedef delegates::CDelegate2<ItemBox*, Widget*> EventHandle_ItemBoxPtrWidgetPtr;
21 typedef delegates::CDelegate3<ItemBox*, IntCoord&, bool> EventHandle_ItemBoxPtrIntCoordRefBool;
22 typedef delegates::CDelegate3<ItemBox*, Widget*, const IBDrawItemInfo&> EventHandle_ItemBoxPtrWidgetPtrCIBCellDrawInfoRef;
23 typedef delegates::CMultiDelegate2<ItemBox*, size_t> EventHandle_ItemBoxPtrSizeT;
24 typedef delegates::CMultiDelegate2<ItemBox*, const IBNotifyItemData&> EventHandle_ItemBoxPtrCIBNotifyCellDataRef;
25
29 class MYGUI_EXPORT ItemBox :
30 public DDContainer,
31 protected ScrollViewBase,
32 public MemberObsolete<ItemBox>
33 {
34 MYGUI_RTTI_DERIVED( ItemBox )
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);
47
49 void addItem(Any _data = Any::Null);
50
52 void removeItemAt(size_t _index);
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);
102
104 Widget* getWidgetDrag();
105
111 Widget* getWidgetByIndex(size_t _index);
112
114 void resetDrag();
115
117 virtual void setPosition(const IntPoint& _value);
119 virtual void setSize(const IntSize& _value);
121 virtual void setCoord(const IntCoord& _value);
122
124 void setPosition(int _left, int _top);
126 void setSize(int _width, int _height);
128 void setCoord(int _left, int _top, int _width, int _height);
129
131 void setViewOffset(const IntPoint& _value);
133 IntPoint getViewOffset();
134
135 virtual IntSize getViewSize();
136
137 /*events:*/
143 EventHandle_ItemBoxPtrWidgetPtr requestCreateWidgetItem;
144
151 EventHandle_ItemBoxPtrIntCoordRefBool requestCoordItem;
152
159 EventHandle_ItemBoxPtrWidgetPtrCIBCellDrawInfoRef requestDrawItem;
160
166 EventHandle_ItemBoxPtrSizeT eventSelectItemAccept;
167
173 EventHandle_ItemBoxPtrSizeT eventChangeItemPosition;
174
180 EventHandle_ItemBoxPtrSizeT eventMouseItemActivate;
181
187 EventHandle_ItemBoxPtrCIBNotifyCellDataRef eventNotifyItem;
188
189 /*internal:*/
190 virtual void _resetContainer(bool _update);
191
192 protected:
193 virtual void initialiseOverride();
194 virtual void shutdownOverride();
195
196 struct ItemDataInfo
197 {
198 ItemDataInfo(Any _data) :
199 data(_data) { }
200 Any data;
201 };
202 typedef std::vector<ItemDataInfo> VectorItemInfo;
203
204 virtual void onMouseButtonPressed(int _left, int _top, MouseButton _id);
205 virtual void onMouseButtonReleased(int _left, int _top, MouseButton _id);
206 virtual void onKeyButtonPressed(KeyCode _key, Char _char);
207 virtual void onKeyButtonReleased(KeyCode _key);
208 virtual void onMouseDrag(int _left, int _top, MouseButton _id);
209
210 virtual void onMouseWheel(int _rel);
211 virtual void onKeyLostFocus(Widget* _new);
212 virtual void onKeySetFocus(Widget* _old);
213
214 void notifyKeyButtonPressed(Widget* _sender, KeyCode _key, Char _char);
215 void notifyKeyButtonReleased(Widget* _sender, KeyCode _key);
216 void notifyScrollChangePosition(ScrollBar* _sender, size_t _index);
217 void notifyMouseWheel(Widget* _sender, int _rel);
218 void notifyRootMouseChangeFocus(Widget* _sender, bool _focus);
219 void notifyMouseButtonDoubleClick(Widget* _sender);
220 virtual size_t _getItemIndex(Widget* _item);
221 void notifyMouseDrag(Widget* _sender, int _left, int _top, MouseButton _id);
222 void notifyMouseButtonPressed(Widget* _sender, int _left, int _top, MouseButton _id);
223 void notifyMouseButtonReleased(Widget* _sender, int _left, int _top, MouseButton _id);
224
225
226 virtual void removeDropItems();
227 virtual void updateDropItems();
228 virtual void updateDropItemsState(const DDWidgetState& _state);
229
230 // Обновляет данные о айтемах, при изменении размеров
231 void updateMetrics();
232
233 // просто обновляет все виджеты что видны
234 void _updateAllVisible(bool _redraw);
235
236 void updateFromResize();
237
238 // возвращает следующий айтем, если нет его, то создается
239 // запросы только последовательно
240 Widget* getItemWidget(size_t _index);
241
242 void _setContainerItemInfo(size_t _index, bool _set, bool _accept);
243
244 // сбрасываем старую подсветку
245 void resetCurrentActiveItem();
246 // ищет и устанавливает подсвеченный айтем
247 void findCurrentActiveItem();
248
249 // запрашиваем у конейтера айтем по позиции мыши
250 virtual size_t _getContainerIndex(const IntPoint& _point);
251
252 virtual void setPropertyOverride(const std::string& _key, const std::string& _value);
253
254 private:
255 size_t calcIndexByWidget(Widget* _widget);
256
257 void requestItemSize();
258
259 virtual IntSize getContentSize();
260 virtual IntPoint getContentPosition();
261 virtual void eraseContent();
262 virtual size_t getHScrollPage();
263 virtual size_t getVScrollPage();
264 virtual Align getContentAlign();
265 virtual void setContentPosition(const IntPoint& _point);
266
267 IntRect _getClientAbsoluteRect();
268 Widget* _getClientWidget();
269
270 private:
271 // наши дети в строках
272 VectorWidgetPtr mVectorItems;
273
274 // размер одного айтема
275 IntSize mSizeItem;
276
277 // размерность скролла в пикселях
278 IntSize mContentSize;
279 // позиция скролла п пикселях
280 IntPoint mContentPosition;
281
282 // колличество айтемов в одной строке
283 int mCountItemInLine;
284 // колличество линий
285 int mCountLines;
286
287 // самая верхняя строка
288 int mFirstVisibleIndex;
289 // текущее смещение верхнего элемента в пикселях
290 // сколько его пикселей не видно сверху
291 int mFirstOffsetIndex;
292
293 // текущий выделенный элемент или ITEM_NONE
294 size_t mIndexSelect;
295 // подсвеченный элемент или ITEM_NONE
296 size_t mIndexActive;
297 // индекс со свойством приема или ITEM_NONE
298 size_t mIndexAccept;
299 // индекс со свойством отказа или ITEM_NONE
300 size_t mIndexRefuse;
301
302 // имеем ли мы фокус ввода
303 bool mIsFocus;
304
305 // структура данных об айтеме
306 VectorItemInfo mItemsInfo;
307
308 Widget* mItemDrag;
309 IntPoint mPointDragOffset;
310
311 bool mAlignVert;
312
313 std::string mDragLayer;
314 };
315
316 } // namespace MyGUI
317
318 #endif // MYGUI_ITEM_BOX_H_
MyGUI::types::TCoord< int >
MyGUI::Widget
Widget properties. Widget_skin_childs Skin childs. Widget widget description should be here...
Definition: MyGUI_Widget.h:29
MyGUI::types::TPoint< int >
MyGUI::ItemBox::ItemDataInfo::ItemDataInfo
ItemDataInfo(Any _data)
Definition: MyGUI_ItemBox.h:198
MyGUI::EventHandle_ItemBoxPtrCIBNotifyCellDataRef
delegates::CMultiDelegate2< ItemBox *, const IBNotifyItemData & > EventHandle_ItemBoxPtrCIBNotifyCellDataRef
Definition: MyGUI_ItemBox.h:24
MyGUI_Prerequest.h
MyGUI::ItemBox::eventSelectItemAccept
EventHandle_ItemBoxPtrSizeT eventSelectItemAccept
Definition: MyGUI_ItemBox.h:166
MyGUI::KeyCode
Definition: MyGUI_KeyCode.h:15
MyGUI::ItemBox
ItemBox properties. ItemBox_skin_childs Skin childs. ItemBox widget description should be here...
Definition: MyGUI_ItemBox.h:29
MyGUI::types::TSize< int >
MyGUI::ItemBox::requestDrawItem
EventHandle_ItemBoxPtrWidgetPtrCIBCellDrawInfoRef requestDrawItem
Definition: MyGUI_ItemBox.h:159
MyGUI::delegates::CDelegate2< ItemBox *, Widget * >
MyGUI::Any
Definition: MyGUI_Any.h:63
MyGUI::DDWidgetState
Definition: MyGUI_DDItemInfo.h:98
MyGUI::EventHandle_ItemBoxPtrWidgetPtrCIBCellDrawInfoRef
delegates::CDelegate3< ItemBox *, Widget *, const IBDrawItemInfo & > EventHandle_ItemBoxPtrWidgetPtrCIBCellDrawInfoRef
Definition: MyGUI_ItemBox.h:22
MyGUI::EventHandle_ItemBoxPtrSizeT
delegates::CMultiDelegate2< ItemBox *, size_t > EventHandle_ItemBoxPtrSizeT
Definition: MyGUI_ItemBox.h:23
MyGUI::ItemBox::eventMouseItemActivate
EventHandle_ItemBoxPtrSizeT eventMouseItemActivate
Definition: MyGUI_ItemBox.h:180
MyGUI::delegates::CDelegate3< ItemBox *, IntCoord &, bool >
MyGUI_DDContainer.h
MyGUI_ScrollViewBase.h
MyGUI::MouseButton
Definition: MyGUI_MouseButton.h:15
MyGUI::ScrollViewBase
Definition: MyGUI_ScrollViewBase.h:16
MyGUI::ItemBox::requestCreateWidgetItem
EventHandle_ItemBoxPtrWidgetPtr requestCreateWidgetItem
Definition: MyGUI_ItemBox.h:143
MyGUI::ItemBox::getItemDataAt
ValueType * getItemDataAt(size_t _index, bool _throw=true)
Get item data from specified position.
Definition: MyGUI_ItemBox.h:88
MyGUI
Definition: MyGUI_ActionController.h:14
MYGUI_RTTI_DERIVED
#define MYGUI_RTTI_DERIVED(DerivedType)
Definition: MyGUI_RTTI.h:65
MYGUI_EXPORT
#define MYGUI_EXPORT
Definition: MyGUI_Platform.h:103
MyGUI::types::TRect< int >
MyGUI::ItemBox::ItemDataInfo::data
Any data
Definition: MyGUI_ItemBox.h:200
MyGUI::EventHandle_ItemBoxPtrWidgetPtr
delegates::CDelegate2< ItemBox *, Widget * > EventHandle_ItemBoxPtrWidgetPtr
Definition: MyGUI_ItemBox.h:20
MyGUI_IBItemInfo.h
MyGUI::VectorWidgetPtr
std::vector< Widget * > VectorWidgetPtr
Definition: MyGUI_WidgetDefines.h:19
MyGUI::ItemBox::VectorItemInfo
std::vector< ItemDataInfo > VectorItemInfo
Definition: MyGUI_ItemBox.h:202
MyGUI::Char
unsigned int Char
Definition: MyGUI_Types.h:51
MyGUI::ItemBox::eventNotifyItem
EventHandle_ItemBoxPtrCIBNotifyCellDataRef eventNotifyItem
Definition: MyGUI_ItemBox.h:187
MyGUI_Any.h
MyGUI::DDContainer
DDContainer properties. DDContainer_skin_childs Skin childs. DDContainer widget description should b...
Definition: MyGUI_DDContainer.h:27
MyGUI::delegates::CMultiDelegate2< ItemBox *, size_t >
MyGUI::EventHandle_ItemBoxPtrIntCoordRefBool
delegates::CDelegate3< ItemBox *, IntCoord &, bool > EventHandle_ItemBoxPtrIntCoordRefBool
Definition: MyGUI_ItemBox.h:21
MYGUI_ASSERT_RANGE
#define MYGUI_ASSERT_RANGE(index, size, owner)
Definition: MyGUI_Diagnostic.h:54
MyGUI::ItemBox::requestCoordItem
EventHandle_ItemBoxPtrIntCoordRefBool requestCoordItem
Definition: MyGUI_ItemBox.h:151
MyGUI::MemberObsolete
Definition: MyGUI_DeprecatedTypes.h:13
MyGUI_EventPair.h
MyGUI::Align
Definition: MyGUI_Align.h:19
MyGUI::ItemBox::eventChangeItemPosition
EventHandle_ItemBoxPtrSizeT eventChangeItemPosition
Definition: MyGUI_ItemBox.h:173
MyGUI::ScrollBar
ScrollBar properties. ScrollBar_skin_childs Skin childs. ScrollBar widget description should be here...
Definition: MyGUI_ScrollBar.h:23
MyGUI::Any::Null
static AnyEmpty Null
Definition: MyGUI_Any.h:67
MyGUI::ItemBox::ItemDataInfo
Definition: MyGUI_ItemBox.h:196