MyGUI  3.2.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);
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__