MyGUI 3.2.0

- Main Page
- Related Pages
- Namespaces
- Data Structures
- Files
- Examples

- File List
- Globals

MyGUI_ItemBox.h
Go to the documentation of this file.
1
6 /*
7 This file is part of MyGUI.
8
9 MyGUI is free software: you can redistribute it and/or modify
10 it under the terms of the GNU Lesser General Public License as published by
11 the Free Software Foundation, either version 3 of the License, or
12 (at your option) any later version.
13
14 MyGUI is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU Lesser General Public License for more details.
18
19 You should have received a copy of the GNU Lesser General Public License
20 along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
21 */
22 #ifndef __MYGUI_ITEM_BOX_H__
23 #define __MYGUI_ITEM_BOX_H__
24
25 #include "MyGUI_Prerequest.h"
26 #include "MyGUI_DDContainer.h"
27 #include "MyGUI_IBItemInfo.h"
28 #include "MyGUI_Any.h"
29 #include "MyGUI_EventPair.h"
30 #include "MyGUI_ScrollViewBase.h"
31
32 namespace MyGUI
33 {
34
35 typedef delegates::CDelegate2<ItemBox*, Widget*> EventHandle_ItemBoxPtrWidgetPtr;
36 typedef delegates::CDelegate3<ItemBox*, IntCoord&, bool> EventHandle_ItemBoxPtrIntCoordRefBool;
37 typedef delegates::CDelegate3<ItemBox*, Widget*, const IBDrawItemInfo&> EventHandle_ItemBoxPtrWidgetPtrCIBCellDrawInfoRef;
38 typedef delegates::CMultiDelegate2<ItemBox*, size_t> EventHandle_ItemBoxPtrSizeT;
39 typedef delegates::CMultiDelegate2<ItemBox*, const IBNotifyItemData&> EventHandle_ItemBoxPtrCIBNotifyCellDataRef;
40
41 class MYGUI_EXPORT ItemBox :
42 public DDContainer,
43 protected ScrollViewBase,
44 public MemberObsolete<ItemBox>
45 {
46 MYGUI_RTTI_DERIVED( ItemBox )
47
48 public:
49 ItemBox();
50
51 //------------------------------------------------------------------------------//
52 // манипуляции айтемами
53
55 size_t getItemCount() const;
56
58 void insertItemAt(size_t _index, Any _data = Any::Null);
59
61 void addItem(Any _data = Any::Null);
62
64 void removeItemAt(size_t _index);
65
67 void removeAllItems();
68
70 void redrawItemAt(size_t _index);
71
73 void redrawAllItems();
74
75
76 //------------------------------------------------------------------------------//
77 // манипуляции выделениями
78
80 size_t getIndexSelected() const;
81
83 void setIndexSelected(size_t _index);
84
86 void clearIndexSelected();
87
88
89 //------------------------------------------------------------------------------//
90 // манипуляции данными
91
93 void setItemDataAt(size_t _index, Any _data);
94
96 void clearItemDataAt(size_t _index);
97
99 template <typename ValueType>
100 ValueType* getItemDataAt(size_t _index, bool _throw = true)
101 {
102 MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "ItemBox::getItemDataAt");
103 return mItemsInfo[_index].data.castType<ValueType>(_throw);
104 }
105
106
108 void setVerticalAlignment(bool _value);
110 bool getVerticalAlignment() const;
111
113 size_t getIndexByWidget(Widget* _widget);
114
116 Widget* getWidgetDrag();
117
123 Widget* getWidgetByIndex(size_t _index);
124
126 void resetDrag();
127
129 virtual void setPosition(const IntPoint& _value);
131 virtual void setSize(const IntSize& _value);
133 virtual void setCoord(const IntCoord& _value);
134
136 void setPosition(int _left, int _top);
138 void setSize(int _width, int _height);
140 void setCoord(int _left, int _top, int _width, int _height);
141
142 /*events:*/
148 EventHandle_ItemBoxPtrWidgetPtr
149 requestCreateWidgetItem;
150
157 EventHandle_ItemBoxPtrIntCoordRefBool
158 requestCoordItem;
159
166 EventHandle_ItemBoxPtrWidgetPtrCIBCellDrawInfoRef
167 requestDrawItem;
168
174 EventHandle_ItemBoxPtrSizeT
175 eventSelectItemAccept;
176
182 EventHandle_ItemBoxPtrSizeT
183 eventChangeItemPosition;
184
190 EventHandle_ItemBoxPtrSizeT
191 eventMouseItemActivate;
192
198 EventHandle_ItemBoxPtrCIBNotifyCellDataRef
199 eventNotifyItem;
200
201 /*internal:*/
202 virtual void _resetContainer(bool _update);
203
204 protected:
205 virtual void initialiseOverride();
206 virtual void shutdownOverride();
207
208 struct ItemDataInfo
209 {
210 ItemDataInfo(Any _data) :
211 data(_data) { }
212 Any data;
213 };
214 typedef std::vector<ItemDataInfo> VectorItemInfo;
215
216 virtual void onMouseButtonPressed(int _left, int _top, MouseButton _id);
217 virtual void onMouseButtonReleased(int _left, int _top, MouseButton _id);
218 virtual void onMouseDrag(int _left, int _top, MouseButton _id);
219
220 virtual void onMouseWheel(int _rel);
221 virtual void onKeyLostFocus(Widget* _new);
222 virtual void onKeySetFocus(Widget* _old);
223
224 void notifyKeyButtonPressed(Widget* _sender, KeyCode _key, Char _char);
225 void notifyKeyButtonReleased(Widget* _sender, KeyCode _key);
226 void notifyScrollChangePosition(ScrollBar* _sender, size_t _index);
227 void notifyMouseWheel(Widget* _sender, int _rel);
228 void notifyRootMouseChangeFocus(Widget* _sender, bool _focus);
229 void notifyMouseButtonDoubleClick(Widget* _sender);
230 virtual size_t _getItemIndex(Widget* _item);
231 void notifyMouseDrag(Widget* _sender, int _left, int _top, MouseButton _id);
232 void notifyMouseButtonPressed(Widget* _sender, int _left, int _top, MouseButton _id);
233 void notifyMouseButtonReleased(Widget* _sender, int _left, int _top, MouseButton _id);
234
235
236 virtual void removeDropItems();
237 virtual void updateDropItems();
238 virtual void updateDropItemsState(const DDWidgetState& _state);
239
240 // Обновляет данные о айтемах, при изменении размеров
241 void updateMetrics();
242
243 // просто обновляет все виджеты что видны
244 void _updateAllVisible(bool _redraw);
245
246 void updateFromResize();
247
248 // возвращает следующий айтем, если нет его, то создается
249 // запросы только последовательно
250 Widget* getItemWidget(size_t _index);
251
252 void _setContainerItemInfo(size_t _index, bool _set, bool _accept);
253
254 // сбрасываем старую подсветку
255 void resetCurrentActiveItem();
256 // ищет и устанавливает подсвеченный айтем
257 void findCurrentActiveItem();
258
259 // запрашиваем у конейтера айтем по позиции мыши
260 virtual size_t _getContainerIndex(const IntPoint& _point);
261
262 virtual void setPropertyOverride(const std::string& _key, const std::string& _value);
263
264 private:
265 size_t calcIndexByWidget(Widget* _widget);
266
267 void requestItemSize();
268
269 virtual IntSize getContentSize();
270 virtual IntPoint getContentPosition();
271 virtual IntSize getViewSize();
272 virtual void eraseContent();
273 virtual size_t getHScrollPage();
274 virtual size_t getVScrollPage();
275 virtual Align getContentAlign();
276 virtual void setContentPosition(const IntPoint& _point);
277
278 IntRect _getClientAbsoluteRect();
279 Widget* _getClientWidget();
280
281 private:
282 // наши дети в строках
283 VectorWidgetPtr mVectorItems;
284
285 // размер одного айтема
286 IntSize mSizeItem;
287
288 // размерность скролла в пикселях
289 IntSize mContentSize;
290 // позиция скролла п пикселях
291 IntPoint mContentPosition;
292
293 // колличество айтемов в одной строке
294 int mCountItemInLine;
295 // колличество линий
296 int mCountLines;
297
298 // самая верхняя строка
299 int mFirstVisibleIndex;
300 // текущее смещение верхнего элемента в пикселях
301 // сколько его пикселей не видно сверху
302 int mFirstOffsetIndex;
303
304 // текущий выделенный элемент или ITEM_NONE
305 size_t mIndexSelect;
306 // подсвеченный элемент или ITEM_NONE
307 size_t mIndexActive;
308 // индекс со свойством приема или ITEM_NONE
309 size_t mIndexAccept;
310 // индекс со свойством отказа или ITEM_NONE
311 size_t mIndexRefuse;
312
313 // имеем ли мы фокус ввода
314 bool mIsFocus;
315
316 // структура данных об айтеме
317 VectorItemInfo mItemsInfo;
318
319 Widget* mItemDrag;
320 IntPoint mPointDragOffset;
321
322 bool mAlignVert;
323
324 std::string mDragLayer;
325 };
326
327 } // namespace MyGUI
328
329 #endif // __MYGUI_ITEM_BOX_H__
MyGUI::types::TCoord
Definition: MyGUI_TCoord.h:35
MyGUI::Widget
Definition: MyGUI_Widget.h:41
MyGUI::types::TPoint< int >
MyGUI::ItemBox::ItemDataInfo::ItemDataInfo
ItemDataInfo(Any _data)
Definition: MyGUI_ItemBox.h:210
MyGUI::EventHandle_ItemBoxPtrCIBNotifyCellDataRef
delegates::CMultiDelegate2< ItemBox *, const IBNotifyItemData & > EventHandle_ItemBoxPtrCIBNotifyCellDataRef
Definition: MyGUI_ItemBox.h:39
MyGUI_Prerequest.h
MyGUI::ItemBox::eventSelectItemAccept
EventHandle_ItemBoxPtrSizeT eventSelectItemAccept
Definition: MyGUI_ItemBox.h:175
MyGUI::KeyCode
Definition: MyGUI_KeyCode.h:30
MyGUI::ItemBox
Definition: MyGUI_ItemBox.h:41
MyGUI::types::TSize< int >
MyGUI::ItemBox::requestDrawItem
EventHandle_ItemBoxPtrWidgetPtrCIBCellDrawInfoRef requestDrawItem
Definition: MyGUI_ItemBox.h:167
MyGUI::delegates::CDelegate2< ItemBox *, Widget * >
MyGUI::Any
Definition: MyGUI_Any.h:81
MyGUI::DDWidgetState
Definition: MyGUI_DDItemInfo.h:108
MyGUI::EventHandle_ItemBoxPtrWidgetPtrCIBCellDrawInfoRef
delegates::CDelegate3< ItemBox *, Widget *, const IBDrawItemInfo & > EventHandle_ItemBoxPtrWidgetPtrCIBCellDrawInfoRef
Definition: MyGUI_ItemBox.h:37
MyGUI::EventHandle_ItemBoxPtrSizeT
delegates::CMultiDelegate2< ItemBox *, size_t > EventHandle_ItemBoxPtrSizeT
Definition: MyGUI_ItemBox.h:38
MyGUI::ItemBox::eventMouseItemActivate
EventHandle_ItemBoxPtrSizeT eventMouseItemActivate
Definition: MyGUI_ItemBox.h:191
MyGUI::delegates::CDelegate3< ItemBox *, IntCoord &, bool >
MyGUI_DDContainer.h
MyGUI_ScrollViewBase.h
MyGUI::MouseButton
Definition: MyGUI_MouseButton.h:30
MyGUI::ScrollViewBase
Definition: MyGUI_ScrollViewBase.h:31
MyGUI::ItemBox::requestCreateWidgetItem
EventHandle_ItemBoxPtrWidgetPtr requestCreateWidgetItem
Definition: MyGUI_ItemBox.h:149
MYGUI_RTTI_DERIVED
#define MYGUI_RTTI_DERIVED(DerivedType)
Definition: MyGUI_RTTI.h:88
MYGUI_EXPORT
#define MYGUI_EXPORT
Definition: MyGUI_Platform.h:120
MyGUI::types::TRect< int >
MyGUI::ItemBox::ItemDataInfo::data
Any data
Definition: MyGUI_ItemBox.h:212
MyGUI::EventHandle_ItemBoxPtrWidgetPtr
delegates::CDelegate2< ItemBox *, Widget * > EventHandle_ItemBoxPtrWidgetPtr
Definition: MyGUI_ItemBox.h:35
MyGUI_IBItemInfo.h
MyGUI::VectorWidgetPtr
std::vector< Widget * > VectorWidgetPtr
Definition: MyGUI_WidgetDefines.h:33
MyGUI::ItemBox::VectorItemInfo
std::vector< ItemDataInfo > VectorItemInfo
Definition: MyGUI_ItemBox.h:214
MyGUI::Char
unsigned int Char
Definition: MyGUI_Types.h:66
MyGUI::ItemBox::eventNotifyItem
EventHandle_ItemBoxPtrCIBNotifyCellDataRef eventNotifyItem
Definition: MyGUI_ItemBox.h:199
MyGUI_Any.h
MyGUI::DDContainer
Definition: MyGUI_DDContainer.h:39
MyGUI::delegates::CMultiDelegate2< ItemBox *, size_t >
MyGUI::EventHandle_ItemBoxPtrIntCoordRefBool
delegates::CDelegate3< ItemBox *, IntCoord &, bool > EventHandle_ItemBoxPtrIntCoordRefBool
Definition: MyGUI_ItemBox.h:36
MYGUI_ASSERT_RANGE
#define MYGUI_ASSERT_RANGE(index, size, owner)
Definition: MyGUI_Diagnostic.h:70
MyGUI::ItemBox::requestCoordItem
EventHandle_ItemBoxPtrIntCoordRefBool requestCoordItem
Definition: MyGUI_ItemBox.h:158
MyGUI::MemberObsolete
Definition: MyGUI_DeprecatedTypes.h:28
MyGUI_EventPair.h
MyGUI::Align
Definition: MyGUI_Align.h:34
MyGUI::ItemBox::eventChangeItemPosition
EventHandle_ItemBoxPtrSizeT eventChangeItemPosition
Definition: MyGUI_ItemBox.h:183
MyGUI::ScrollBar
Definition: MyGUI_ScrollBar.h:33
MyGUI::ItemBox::ItemDataInfo
Definition: MyGUI_ItemBox.h:208