00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef __MYGUI_ITEM_BOX_H__
00024 #define __MYGUI_ITEM_BOX_H__
00025
00026 #include "MyGUI_Prerequest.h"
00027 #include "MyGUI_DDContainer.h"
00028 #include "MyGUI_IBItemInfo.h"
00029 #include "MyGUI_Any.h"
00030 #include "MyGUI_EventPair.h"
00031 #include "MyGUI_ScrollViewBase.h"
00032
00033 namespace MyGUI
00034 {
00035
00036 typedef delegates::CDelegate2<ItemBoxPtr, WidgetPtr> EventHandle_ItemBoxPtrWidgetPtr;
00037 typedef delegates::CDelegate3<ItemBoxPtr, IntCoord&, bool> EventHandle_ItemBoxPtrIntCoordRefBool;
00038 typedef delegates::CDelegate3<ItemBoxPtr, WidgetPtr, const IBDrawItemInfo &> EventHandle_ItemBoxPtrWidgetPtrCIBCellDrawInfoRef;
00039 typedef delegates::CDelegate2<ItemBoxPtr, size_t> EventHandle_ItemBoxPtrSizeT;
00040 typedef delegates::CDelegate2<ItemBoxPtr, const IBNotifyItemData &> EventHandle_ItemBoxPtrCIBNotifyCellDataRef;
00041
00042 class MYGUI_EXPORT ItemBox :
00043 public DDContainer,
00044 protected ScrollViewBase
00045 {
00046 MYGUI_RTTI_DERIVED( ItemBox );
00047
00048 public:
00049 ItemBox();
00050
00051
00052
00053
00055 size_t getItemCount() { return mItemsInfo.size(); }
00056
00058 void insertItemAt(size_t _index, Any _data = Any::Null);
00059
00061 void addItem(Any _data = Any::Null) { insertItemAt(ITEM_NONE, _data); }
00062
00064 void removeItemAt(size_t _index);
00065
00067 void removeAllItems();
00068
00070 void redrawItemAt(size_t _index);
00071
00073 void redrawAllItems();
00074
00075
00076
00077
00078
00080 size_t getIndexSelected() { return mIndexSelect; }
00081
00083 void setIndexSelected(size_t _index);
00084
00086 void clearIndexSelected() { setIndexSelected(ITEM_NONE); }
00087
00088
00089
00090
00091
00093 void setItemDataAt(size_t _index, Any _data);
00094
00096 void clearItemDataAt(size_t _index) { setItemDataAt(_index, Any::Null); }
00097
00099 template <typename ValueType>
00100 ValueType * getItemDataAt(size_t _index, bool _throw = true)
00101 {
00102 MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "ItemBox::getItemDataAt");
00103 return mItemsInfo[_index].data.castType<ValueType>(_throw);
00104 }
00105
00106
00108 void setItemBoxAlignVert(bool _value);
00110 bool getItemBoxAlignVert() { return mAlignVert; }
00111
00113 size_t getIndexByWidget(WidgetPtr _widget);
00114
00116 WidgetPtr getWidgetDrag() { return mItemDrag; }
00117
00123 WidgetPtr getWidgetByIndex(size_t _index);
00124
00126 void resetDrag();
00127
00129 virtual void setPosition(const IntPoint& _value);
00131 virtual void setSize(const IntSize& _value);
00133 virtual void setCoord(const IntCoord& _value);
00134
00136 void setPosition(int _left, int _top) { setPosition(IntPoint(_left, _top)); }
00138 void setSize(int _width, int _height) { setSize(IntSize(_width, _height)); }
00140 void setCoord(int _left, int _top, int _width, int _height) { setCoord(IntCoord(_left, _top, _width, _height)); }
00141
00142
00148 EventHandle_ItemBoxPtrWidgetPtr requestCreateWidgetItem;
00149
00156 EventHandle_ItemBoxPtrIntCoordRefBool requestCoordItem;
00157
00164 EventHandle_ItemBoxPtrWidgetPtrCIBCellDrawInfoRef requestDrawItem;
00165
00171 EventHandle_ItemBoxPtrSizeT eventSelectItemAccept;
00172
00178 EventHandle_ItemBoxPtrSizeT eventChangeItemPosition;
00179
00185 EventHandle_ItemBoxPtrSizeT eventMouseItemActivate;
00186
00192 EventHandle_ItemBoxPtrCIBNotifyCellDataRef eventNotifyItem;
00193
00194
00195
00196 virtual void _initialise(WidgetStyle _style, const IntCoord& _coord, Align _align, ResourceSkin* _info, WidgetPtr _parent, ICroppedRectangle * _croppedParent, IWidgetCreator * _creator, const std::string& _name);
00197
00198
00199 #ifndef MYGUI_DONT_USE_OBSOLETE
00200
00201 MYGUI_OBSOLETE("use : void Widget::setCoord(const IntCoord& _coord)")
00202 void setPosition(const IntCoord& _coord) { setCoord(_coord); }
00203 MYGUI_OBSOLETE("use : void Widget::setCoord(int _left, int _top, int _width, int _height)")
00204 void setPosition(int _left, int _top, int _width, int _height) { setCoord(_left, _top, _width, _height); }
00205
00206 MYGUI_OBSOLETE("use : size_t ItemBox::getItemIndexSelected()")
00207 size_t getItemIndexSelected() { return getIndexSelected(); }
00208 MYGUI_OBSOLETE("use : void ItemBox::setIndexSelected(size_t _index)")
00209 void setItemSelectedAt(size_t _index) { setIndexSelected(_index); }
00210 MYGUI_OBSOLETE("use : void ItemBox::clearIndexSelected()")
00211 void clearItemSelected() { clearIndexSelected(); }
00212
00213 MYGUI_OBSOLETE("use : void ItemBox::insertItemAt(size_t _index, Any _data)")
00214 void insertItem(size_t _index, Any _data = Any::Null) { insertItemAt(_index, _data); }
00215 MYGUI_OBSOLETE("use : void ItemBox::setItemDataAt(size_t _index, Any _data)")
00216 void setItemData(size_t _index, Any _data) { setItemDataAt(_index, _data); }
00217 MYGUI_OBSOLETE("use : void ItemBox::removeItemAt(size_t _index)")
00218 void deleteItem(size_t _index) { removeItemAt(_index); }
00219 MYGUI_OBSOLETE("use : void ItemBox::removeAllItems()")
00220 void deleteAllItems() { removeAllItems(); }
00221 MYGUI_OBSOLETE("use : size_t ItemBox::getIndexSelected()")
00222 size_t getItemSelect() { return getIndexSelected(); }
00223 MYGUI_OBSOLETE("use : void ItemBox::clearIndexSelected()")
00224 void resetItemSelect() { clearIndexSelected(); }
00225 MYGUI_OBSOLETE("use : void ItemBox::setIndexSelected(size_t _index)")
00226 void setItemSelect(size_t _index) { setIndexSelected(_index); }
00227
00228 MYGUI_OBSOLETE("use : WidgetPtr ItemBox::getWidgetDrag()")
00229 WidgetPtr getWidgetDrop() { return getWidgetDrag(); }
00230 MYGUI_OBSOLETE("use : void ItemBox::resetDrag()")
00231 void resetDrop() { resetDrag(); }
00232
00233 #endif // MYGUI_DONT_USE_OBSOLETE
00234
00235
00236 protected:
00237 virtual ~ItemBox();
00238
00239 struct ItemDataInfo
00240 {
00241 ItemDataInfo(Any _data) :
00242 data(_data) { }
00243 Any data;
00244 };
00245 typedef std::vector<ItemDataInfo> VectorItemInfo;
00246
00247 void baseChangeWidgetSkin(ResourceSkin* _info);
00248
00249 virtual void onMouseButtonPressed(int _left, int _top, MouseButton _id);
00250 virtual void onMouseButtonReleased(int _left, int _top, MouseButton _id);
00251 virtual void onMouseDrag(int _left, int _top);
00252
00253 virtual void onMouseWheel(int _rel);
00254 virtual void onKeyLostFocus(WidgetPtr _new);
00255 virtual void onKeySetFocus(WidgetPtr _old);
00256
00257 void notifyKeyButtonPressed(WidgetPtr _sender, KeyCode _key, Char _char);
00258 void notifyKeyButtonReleased(WidgetPtr _sender, KeyCode _key);
00259 void notifyScrollChangePosition(VScrollPtr _sender, size_t _index);
00260 void notifyMouseWheel(WidgetPtr _sender, int _rel);
00261 void notifyRootMouseChangeFocus(WidgetPtr _sender, bool _focus);
00262 void notifyMouseButtonDoubleClick(WidgetPtr _sender);
00263 void _requestGetContainer(WidgetPtr _sender, WidgetPtr& _container, size_t& _index);
00264 void notifyMouseDrag(WidgetPtr _sender, int _left, int _top);
00265 void notifyMouseButtonPressed(WidgetPtr _sender, int _left, int _top, MouseButton _id);
00266 void notifyMouseButtonReleased(WidgetPtr _sender, int _left, int _top, MouseButton _id);
00267
00268
00269 virtual void removeDropItems();
00270 virtual void updateDropItems();
00271 virtual void updateDropItemsState(const DDWidgetState& _state);
00272
00273
00274 void updateMetrics();
00275
00276
00277 void _updateAllVisible(bool _redraw);
00278
00279 void updateFromResize();
00280
00281
00282
00283 WidgetPtr getItemWidget(size_t _index);
00284
00285 void _setContainerItemInfo(size_t _index, bool _set, bool _accept);
00286
00287
00288 void resetCurrentActiveItem();
00289
00290 void findCurrentActiveItem();
00291
00292
00293 virtual size_t _getContainerIndex(const IntPoint& _point);
00294
00295
00296 virtual void _resetContainer(bool _update);
00297
00298 private:
00299 void initialiseWidgetSkin(ResourceSkin* _info);
00300 void shutdownWidgetSkin();
00301
00302 size_t calcIndexByWidget(WidgetPtr _widget);
00303
00304 void requestItemSize();
00305
00306 virtual IntSize getContentSize() { return mContentSize; }
00307 virtual IntPoint getContentPosition() { return mContentPosition; }
00308 virtual IntSize getViewSize() { return mWidgetClient->getSize(); }
00309 virtual void eraseContent() { updateMetrics(); }
00310 virtual size_t getHScrollPage() { return mSizeItem.width; }
00311 virtual size_t getVScrollPage() { return mSizeItem.height; }
00312 virtual Align getContentAlign() { return Align::Default; }
00313 virtual void setContentPosition(const IntPoint& _point);
00314
00315 private:
00316
00317 VectorWidgetPtr mVectorItems;
00318
00319
00320 IntSize mSizeItem;
00321
00322
00323 IntSize mContentSize;
00324
00325 IntPoint mContentPosition;
00326
00327
00328 int mCountItemInLine;
00329
00330 int mCountLines;
00331
00332
00333 int mFirstVisibleIndex;
00334
00335
00336 int mFirstOffsetIndex;
00337
00338
00339 size_t mIndexSelect;
00340
00341 size_t mIndexActive;
00342
00343 size_t mIndexAccept;
00344
00345 size_t mIndexRefuse;
00346
00347
00348 bool mIsFocus;
00349
00350
00351 VectorItemInfo mItemsInfo;
00352
00353 WidgetPtr mItemDrag;
00354 IntPoint mPointDragOffset;
00355
00356 bool mAlignVert;
00357
00358 std::string mDragLayer;
00359
00360 };
00361
00362 }
00363
00364 #endif // __MYGUI_ITEM_BOX_H__