00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef _CEGUIMenuItem_h_
00031 #define _CEGUIMenuItem_h_
00032
00033 #include "../CEGUIBase.h"
00034 #include "../CEGUIWindow.h"
00035 #include "CEGUIItemEntry.h"
00036
00037 #include "CEGUIMenuItemProperties.h"
00038
00039 #if defined(_MSC_VER)
00040 # pragma warning(push)
00041 # pragma warning(disable : 4251)
00042 #endif
00043
00044
00045 namespace CEGUI
00046 {
00047
00052 class CEGUIEXPORT MenuItem : public ItemEntry
00053 {
00054 public:
00055 static const String EventNamespace;
00056 static const String WidgetTypeName;
00057
00058
00059
00060
00061
00066 static const String EventClicked;
00067
00068
00069
00070
00071
00079 bool isHovering(void) const
00080 {
00081 return d_hovering;
00082 }
00083
00084
00092 bool isPushed(void) const
00093 {
00094 return d_pushed;
00095 }
00096
00097
00102 bool isOpened(void) const
00103 {
00104 return d_opened;
00105 }
00106
00111 bool isPopupClosing(void) const
00112 {
00113 return d_popupClosing;
00114 }
00115
00120 bool hasAutoPopup(void) const
00121 {
00122 return d_autoPopupTimeout > 0.0f;
00123 }
00124
00129 float getAutoPopupTimeout(void) const
00130 {
00131 return d_autoPopupTimeout;
00132 }
00133
00138 void setAutoPopupTimeout(float time)
00139 {
00140 d_autoPopupTimeout = time;
00141 }
00142
00150 PopupMenu* getPopupMenu(void) const
00151 {
00152 return d_popup;
00153 }
00154
00159 const UVector2& getPopupOffset(void) const
00160 {
00161 return d_popupOffset;
00162 }
00163
00168 void setPopupOffset(const UVector2& popupOffset)
00169 {
00170 d_popupOffset = popupOffset;
00171 }
00172
00173
00174
00175
00186 void setPopupMenu(PopupMenu* popup);
00187
00188
00196 void openPopupMenu(bool notify = true);
00197
00198
00209 void closePopupMenu(bool notify = true);
00210
00211
00219 bool togglePopupMenu(void);
00220
00225 void startPopupClosing(void);
00226
00231 void startPopupOpening(void);
00232
00233
00234
00239 MenuItem(const String& type, const String& name);
00240
00241
00246 virtual ~MenuItem(void);
00247
00248
00249 protected:
00250
00251
00252
00257 virtual void onClicked(WindowEventArgs& e);
00258
00259
00260
00261
00262
00263 virtual void onMouseMove(MouseEventArgs& e);
00264 virtual void onMouseButtonDown(MouseEventArgs& e);
00265 virtual void onMouseButtonUp(MouseEventArgs& e);
00266 virtual void onCaptureLost(WindowEventArgs& e);
00267 virtual void onMouseLeaves(MouseEventArgs& e);
00268 virtual void onTextChanged(WindowEventArgs& e);
00269 virtual void updateSelf(float elapsed);
00270
00271
00272
00273
00274
00285 void updateInternalState(const Point& mouse_pos);
00286
00287
00295 void closeAllMenuItemPopups();
00296
00297
00308 void setPopupMenu_impl(PopupMenu* popup, bool add_as_child = true);
00309
00310
00321 virtual bool testClassName_impl(const String& class_name) const
00322 {
00323 if (class_name == "MenuItem") return true;
00324
00325 return ItemEntry::testClassName_impl(class_name);
00326 }
00327
00328
00329
00330
00331
00332 bool d_pushed;
00333 bool d_hovering;
00334 bool d_opened;
00335 bool d_popupClosing;
00336 bool d_popupOpening;
00337 float d_autoPopupTimeout;
00338 float d_autoPopupTimeElapsed;
00339
00340 PopupMenu* d_popup;
00341
00342 bool d_popupWasClosed;
00343
00344 UVector2 d_popupOffset;
00345
00346 private:
00347
00348
00349
00350 static MenuItemProperties::PopupOffset d_popupOffsetProperty;
00351 static MenuItemProperties::AutoPopupTimeout d_autoPopupTimeoutProperty;
00352
00353
00354
00355
00356 void addMenuItemProperties(void);
00357
00362 virtual void addChild_impl(Window* wnd);
00363 };
00364
00365 }
00366
00367 #if defined(_MSC_VER)
00368 # pragma warning(pop)
00369 #endif
00370
00371 #endif // end of guard _CEGUIMenuItem_h_