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"
15 #include "MyGUI_ScrollViewBase.h"
16 
17 namespace 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 
123  using Widget::setPosition;
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  {
205  ItemDataInfo(Any _data) :
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