MyGUI  3.2.0
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 
40 
42  public DDContainer,
43  protected ScrollViewBase,
44  public MemberObsolete<ItemBox>
45  {
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:*/
150 
159 
168 
176 
184 
192 
200 
201  /*internal:*/
202  virtual void _resetContainer(bool _update);
203 
204  protected:
205  virtual void initialiseOverride();
206  virtual void shutdownOverride();
207 
209  {
210  ItemDataInfo(Any _data) :
211  data(_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__