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 
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);
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:*/
144 
152 
160 
167 
174 
181 
188 
189  /*internal:*/
190  virtual void _resetContainer(bool _update);
191 
192  protected:
193  virtual void initialiseOverride();
194  virtual void shutdownOverride();
195 
197  {
198  ItemDataInfo(Any _data) :
199  data(_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::ItemBox::eventMouseItemActivate
EventHandle_ItemBoxPtrSizeT eventMouseItemActivate
Definition: MyGUI_ItemBox.h:180
MyGUI::ScrollBar
ScrollBar properties. Skin childs. ScrollBar widget description should be here.
Definition: MyGUI_ScrollBar.h:23
MyGUI_EventPair.h
MyGUI::ItemBox::VectorItemInfo
std::vector< ItemDataInfo > VectorItemInfo
Definition: MyGUI_ItemBox.h:202
MyGUI::types::TRect< int >
MYGUI_ASSERT_RANGE
#define MYGUI_ASSERT_RANGE(index, size, owner)
Definition: MyGUI_Diagnostic.h:54
MyGUI::ItemBox::ItemDataInfo::ItemDataInfo
ItemDataInfo(Any _data)
Definition: MyGUI_ItemBox.h:198
MyGUI::Widget
Widget properties. Skin childs. Widget widget description should be here.
Definition: MyGUI_Widget.h:29
MyGUI::EventHandle_ItemBoxPtrSizeT
delegates::CMultiDelegate2< ItemBox *, size_t > EventHandle_ItemBoxPtrSizeT
Definition: MyGUI_ItemBox.h:23
MyGUI::VectorWidgetPtr
std::vector< Widget * > VectorWidgetPtr
Definition: MyGUI_WidgetDefines.h:19
MyGUI::types::TPoint< int >
MyGUI::Any
Definition: MyGUI_Any.h:63
MyGUI::Align
Definition: MyGUI_Align.h:19
MyGUI::MouseButton
Definition: MyGUI_MouseButton.h:15
MyGUI::ScrollViewBase
Definition: MyGUI_ScrollViewBase.h:16
MyGUI::ItemBox::ItemDataInfo::data
Any data
Definition: MyGUI_ItemBox.h:200
MyGUI_IBItemInfo.h
MyGUI_ScrollViewBase.h
MyGUI_Prerequest.h
MyGUI::ItemBox
ItemBox properties. Skin childs. ItemBox widget description should be here.
Definition: MyGUI_ItemBox.h:29
MyGUI::ItemBox::requestCoordItem
EventHandle_ItemBoxPtrIntCoordRefBool requestCoordItem
Definition: MyGUI_ItemBox.h:151
MyGUI::DDWidgetState
Definition: MyGUI_DDItemInfo.h:98
MyGUI_DDContainer.h
MyGUI::ItemBox::eventChangeItemPosition
EventHandle_ItemBoxPtrSizeT eventChangeItemPosition
Definition: MyGUI_ItemBox.h:173
MYGUI_RTTI_DERIVED
#define MYGUI_RTTI_DERIVED(DerivedType)
Definition: MyGUI_RTTI.h:65
MyGUI::MemberObsolete
Definition: MyGUI_DeprecatedTypes.h:13
MyGUI::types::TSize< int >
MyGUI::EventHandle_ItemBoxPtrIntCoordRefBool
delegates::CDelegate3< ItemBox *, IntCoord &, bool > EventHandle_ItemBoxPtrIntCoordRefBool
Definition: MyGUI_ItemBox.h:21
MyGUI::EventHandle_ItemBoxPtrWidgetPtr
delegates::CDelegate2< ItemBox *, Widget * > EventHandle_ItemBoxPtrWidgetPtr
Definition: MyGUI_ItemBox.h:20
MyGUI::ItemBox::getItemDataAt
ValueType * getItemDataAt(size_t _index, bool _throw=true)
Get item data from specified position.
Definition: MyGUI_ItemBox.h:88
MYGUI_EXPORT
#define MYGUI_EXPORT
Definition: MyGUI_Platform.h:103
MyGUI::Char
unsigned int Char
Definition: MyGUI_Types.h:51
MyGUI::DDContainer
DDContainer properties. Skin childs. DDContainer widget description should be here.
Definition: MyGUI_DDContainer.h:27
MyGUI::ItemBox::requestCreateWidgetItem
EventHandle_ItemBoxPtrWidgetPtr requestCreateWidgetItem
Definition: MyGUI_ItemBox.h:143
MyGUI::ItemBox::ItemDataInfo
Definition: MyGUI_ItemBox.h:196
MyGUI::types::TCoord
Definition: MyGUI_TCoord.h:20
MyGUI::ItemBox::eventNotifyItem
EventHandle_ItemBoxPtrCIBNotifyCellDataRef eventNotifyItem
Definition: MyGUI_ItemBox.h:187
MyGUI::ItemBox::eventSelectItemAccept
EventHandle_ItemBoxPtrSizeT eventSelectItemAccept
Definition: MyGUI_ItemBox.h:166
MyGUI::ItemBox::requestDrawItem
EventHandle_ItemBoxPtrWidgetPtrCIBCellDrawInfoRef requestDrawItem
Definition: MyGUI_ItemBox.h:159
MyGUI::Any::Null
static AnyEmpty Null
Definition: MyGUI_Any.h:67
MyGUI::EventHandle_ItemBoxPtrCIBNotifyCellDataRef
delegates::CMultiDelegate2< ItemBox *, const IBNotifyItemData & > EventHandle_ItemBoxPtrCIBNotifyCellDataRef
Definition: MyGUI_ItemBox.h:24
MyGUI
Definition: MyGUI_ActionController.h:14
MyGUI_Any.h
MyGUI::EventHandle_ItemBoxPtrWidgetPtrCIBCellDrawInfoRef
delegates::CDelegate3< ItemBox *, Widget *, const IBDrawItemInfo & > EventHandle_ItemBoxPtrWidgetPtrCIBCellDrawInfoRef
Definition: MyGUI_ItemBox.h:22
MyGUI::KeyCode
Definition: MyGUI_KeyCode.h:15