00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef __MYGUI_COMBO_BOX_H__
00024 #define __MYGUI_COMBO_BOX_H__
00025
00026 #include "MyGUI_Prerequest.h"
00027 #include "MyGUI_Edit.h"
00028 #include "MyGUI_List.h"
00029 #include "MyGUI_Any.h"
00030 #include "MyGUI_EventPair.h"
00031 #include "MyGUI_ControllerFadeAlpha.h"
00032
00033 namespace MyGUI
00034 {
00035
00036 typedef delegates::CDelegate2<ComboBoxPtr, size_t> EventHandle_ComboBoxPtrSizeT;
00037
00038 class MYGUI_EXPORT ComboBox :
00039 public Edit
00040 {
00041 MYGUI_RTTI_DERIVED( ComboBox );
00042
00043 public:
00044 ComboBox();
00045
00046
00047
00048
00050 size_t getItemCount() { return mList->getItemCount(); }
00051
00053 void insertItemAt(size_t _index, const UString& _name, Any _data = Any::Null);
00054
00056 void addItem(const UString& _name, Any _data = Any::Null) { return insertItemAt(ITEM_NONE, _name, _data); }
00057
00059 void removeItemAt(size_t _index);
00060
00062 void removeAllItems();
00063
00064
00066 size_t findItemIndexWith(const UString& _name);
00067
00068
00069
00070
00071
00073 size_t getIndexSelected() { return mItemIndex; }
00074
00076 void setIndexSelected(size_t _index);
00077
00079 void clearIndexSelected() { setIndexSelected(ITEM_NONE); }
00080
00081
00082
00083
00084
00086 void setItemDataAt(size_t _index, Any _data);
00087
00089 void clearItemDataAt(size_t _index) { setItemDataAt(_index, Any::Null); }
00090
00092 template <typename ValueType>
00093 ValueType * getItemDataAt(size_t _index, bool _throw = true)
00094 {
00095 return mList->getItemDataAt<ValueType>(_index, _throw);
00096 }
00097
00098
00099
00100
00101
00103 void setItemNameAt(size_t _index, const UString& _name);
00104
00106 const UString& getItemNameAt(size_t _index) { return mList->getItemNameAt(_index); }
00107
00108
00109
00110
00111
00113 void beginToItemAt(size_t _index) { mList->beginToItemAt(_index); }
00114
00116 void beginToItemFirst() { if (getItemCount()) beginToItemAt(0); }
00117
00119 void beginToItemLast() { if (getItemCount()) beginToItemAt(getItemCount() - 1); }
00120
00122 void beginToItemSelected() { if (getIndexSelected() != ITEM_NONE) beginToItemAt(getIndexSelected()); }
00123
00124
00125
00126
00127
00129 void setComboModeDrop(bool _value);
00131 bool getComboModeDrop() { return mModeDrop; }
00132
00134 void setSmoothShow(bool _value) { mShowSmooth = _value; }
00136 bool getSmoothShow() { return mShowSmooth; }
00137
00139 void setMaxListHeight(size_t _value) { mMaxHeight = _value; }
00141 size_t getMaxListHeight() { return mMaxHeight; }
00142
00144 virtual void setProperty(const std::string& _key, const std::string& _value);
00145
00146
00152 EventPair<EventHandle_WidgetVoid, EventHandle_ComboBoxPtrSizeT> eventComboAccept;
00153
00159 EventPair<EventHandle_WidgetSizeT, EventHandle_ComboBoxPtrSizeT> eventComboChangePosition;
00160
00161
00162
00163 virtual void _initialise(WidgetStyle _style, const IntCoord& _coord, Align _align, ResourceSkin* _info, WidgetPtr _parent, ICroppedRectangle * _croppedParent, IWidgetCreator * _creator, const std::string& _name);
00164
00165
00166 #ifndef MYGUI_DONT_USE_OBSOLETE
00167
00168 MYGUI_OBSOLETE("use : size_t ComboBox::getIndexSelected()")
00169 size_t getItemIndexSelected() { return getIndexSelected(); }
00170 MYGUI_OBSOLETE("use : void ComboBox::setIndexSelected(size_t _index)")
00171 void setItemSelectedAt(size_t _index) { setIndexSelected(_index); }
00172 MYGUI_OBSOLETE("use : void ComboBox::clearIndexSelected()")
00173 void clearItemSelected() { clearIndexSelected(); }
00174
00175 MYGUI_OBSOLETE("use : void ComboBox::insertItemAt(size_t _index, const UString& _name)")
00176 void insertItem(size_t _index, const UString& _name) { insertItemAt(_index, _name); }
00177 MYGUI_OBSOLETE("use : void ComboBox::setItemNameAt(size_t _index, const UString& _name)")
00178 void setItem(size_t _index, const UString& _item) { setItemNameAt(_index, _item); }
00179 MYGUI_OBSOLETE("use : const UString& ComboBox::getItemNameAt(size_t _index)")
00180 const UString& getItem(size_t _index) { return getItemNameAt(_index); }
00181 MYGUI_OBSOLETE("use : void ComboBox::removeItemAt(size_t _index)")
00182 void deleteItem(size_t _index) { removeItemAt(_index); }
00183 MYGUI_OBSOLETE("use : void ComboBox::removeAllItems()")
00184 void deleteAllItems() { removeAllItems(); }
00185 MYGUI_OBSOLETE("use : size_t ComboBox::getIndexSelected()")
00186 size_t getItemSelect() { return getIndexSelected(); }
00187 MYGUI_OBSOLETE("use : void void ComboBox::clearIndexSelected()")
00188 void resetItemSelect() { clearIndexSelected(); }
00189 MYGUI_OBSOLETE("use : void ComboBox::setIndexSelected(size_t _index)")
00190 void setItemSelect(size_t _index) { setIndexSelected(_index); }
00191
00192 #endif // MYGUI_DONT_USE_OBSOLETE
00193
00194 protected:
00195 virtual ~ComboBox();
00196
00197 virtual void onKeyButtonPressed(KeyCode _key, Char _char);
00198
00199 virtual void baseChangeWidgetSkin(ResourceSkin* _info);
00200
00201 private:
00202 void notifyButtonPressed(WidgetPtr _sender, int _left, int _top, MouseButton _id);
00203 void notifyListLostFocus(WidgetPtr _sender, MyGUI::WidgetPtr _new);
00204 void notifyListSelectAccept(ListPtr _widget, size_t _position);
00205 void notifyListMouseItemActivate(ListPtr _widget, size_t _position);
00206 void notifyListChangePosition(ListPtr _widget, size_t _position);
00207 void notifyMouseWheel(WidgetPtr _sender, int _rel);
00208 void notifyMousePressed(WidgetPtr _sender, int _left, int _top, MouseButton _id);
00209 void notifyEditTextChange(EditPtr _sender);
00210
00211 void showList();
00212 void hideList();
00213
00214 void initialiseWidgetSkin(ResourceSkin* _info);
00215 void shutdownWidgetSkin();
00216
00217 void actionWidgetHide(WidgetPtr _widget);
00218
00219 ControllerFadeAlpha* createControllerFadeAlpha(float _alpha, float _coef, bool _enable);
00220
00221 private:
00222 ButtonPtr mButton;
00223 ListPtr mList;
00224
00225 bool mListShow;
00226 size_t mMaxHeight;
00227 size_t mItemIndex;
00228 bool mModeDrop;
00229 bool mDropMouse;
00230 bool mShowSmooth;
00231 bool mManualList;
00232
00233 };
00234
00235 }
00236
00237 #endif // __MYGUI_COMBO_BOX_H__