00001
00054 #ifndef INC_MGUI_MENU_H
00055 #define INC_MGUI_MENU_H
00056
00057 #ifndef INC_MGUI_BASE_H
00058 #include <mgui/base.h>
00059 #endif
00060
00061 #ifndef INC_MI32_ICONID_H
00062 #include <mi32/iconid.h>
00063 #endif
00064
00065 #ifndef GENERATING_DOXYGEN_OUTPUT
00066 class MISTRING;
00067 #endif
00068
00069 namespace MGUI {
00070
00071
00072
00111 class MENU {
00112 public:
00113
00115 enum TYPE {
00116 TYPE_MenuBar,
00117 TYPE_SubMenu,
00118 TYPE_Popup,
00119 #ifndef GENERATING_DOXYGEN_OUTPUT
00120 TYPE_ToolBar
00121 #endif
00122 };
00123
00125 enum CREATEITEM {
00126 CREATEITEM_Default = 0,
00127 CREATEITEM_Check = 0x0001,
00128 CREATEITEM_CheckOn = 0x0009,
00129 CREATEITEM_Radio = 0x0002,
00130 CREATEITEM_RadioOn = 0x000A,
00131 CREATEITEM_RadioFirst = 0x0004,
00132 CREATEITEM_RadioFirstOn = 0x000C,
00133 CREATEITEM_ToggleOn = 0x0008,
00134 CREATEITEM_Disabled = 0x0010,
00135 CREATEITEM_NoDelegate = 0x0020,
00136 CREATEITEM_MI_Internal = 0x0040,
00137 CREATEITEM_MI_Programmer = 0x0080,
00138 CREATEITEM_Hidden = 0x0100
00139 };
00140
00142 enum POPUP {
00143 POPUP_AlignLeft = 0x0001,
00144 POPUP_AlignCenter = 0x0002,
00145 POPUP_AlignRight = 0x0004,
00146 POPUP_MouseLeft = 0x0010,
00147 POPUP_MouseRight = 0x0020,
00148 POPUP_MouseEither = 0x0030,
00149 POPUP_Default = POPUP_AlignLeft | POPUP_MouseEither
00150 };
00151
00153 enum ITEMHND {
00154 ITEMHND_None = -1,
00155 ITEMHND_Last = -2
00156 };
00157
00161 typedef fastdelegate::FastDelegate<void(MGUI::ID,bool)> DELEGATE;
00164 typedef fastdelegate::FastDelegate<void(INT32)> DELEGATE_ONWHEEL;
00165
00167 static CREATEITEM CREATEITEM_CheckSet (
00168 bool ToggleOn
00169 ) { return (ToggleOn ? CREATEITEM_CheckOn : CREATEITEM_Check); }
00170
00172 static CREATEITEM CREATEITEM_RadioSet (
00173 bool ToggleOn,
00174 bool RadioFirst = false
00175 ) { return (RadioFirst ? (ToggleOn ? CREATEITEM_RadioFirstOn : CREATEITEM_RadioFirst) : (ToggleOn ? CREATEITEM_RadioOn : CREATEITEM_Radio)); }
00176
00178 MENU ();
00179
00181 MENU (const MENU& rhs);
00182
00184 ~MENU ();
00185
00187 MENU& operator= (const MENU& rhs);
00188
00191 ITEMHND Add (
00192 const MISTRING& label,
00193 ID id,
00194 CREATEITEM createflags = CREATEITEM_Default,
00195 ITEMHND hndInsertAfter = ITEMHND_Last,
00196 UINT32 icid = 0
00197 );
00198
00201 ITEMHND Add (
00202 ICONID iconid,
00203 const MISTRING& label,
00204 ID id,
00205 CREATEITEM createflags = CREATEITEM_Default,
00206 ITEMHND hndInsertAfter = ITEMHND_Last,
00207 UINT32 icid = 0
00208 );
00209
00212 ITEMHND Add (
00213 const MISTRING& label,
00214 MGUI::MENU::DELEGATE delegate,
00215 ID id = 0,
00216 CREATEITEM createflags = CREATEITEM_Default,
00217 ITEMHND hndInsertAfter = ITEMHND_Last,
00218 UINT32 icid = 0
00219 );
00220
00223 ITEMHND Add (
00224 ICONID iconid,
00225 const MISTRING& label,
00226 MGUI::MENU::DELEGATE delegate,
00227 ID id = 0,
00228 CREATEITEM createflags = CREATEITEM_Default,
00229 ITEMHND hndInsertAfter = ITEMHND_Last,
00230 UINT32 icid = 0
00231 );
00232
00235 ITEMHND Add (
00236 const MISTRING& label,
00237 MENU& submenu,
00238 CREATEITEM createflags = CREATEITEM_Default,
00239 ITEMHND hndInsertAfter = ITEMHND_Last,
00240 UINT32 icid = 0
00241 );
00242
00245 ITEMHND Add (
00246 ICONID iconid,
00247 const MISTRING& label,
00248 MENU& submenu,
00249 CREATEITEM createflags = CREATEITEM_Default,
00250 ITEMHND hndInsertAfter = ITEMHND_Last,
00251 UINT32 icid = 0
00252 );
00253
00255 ITEMHND AddSeparator (
00256 ITEMHND hndInsertAfter = ITEMHND_Last
00257 );
00258
00261 ITEMHND AddSpaceFixed (
00262 int space,
00263 ITEMHND hndInsertAfter = ITEMHND_Last
00264 );
00265
00269 void Create (
00270 TYPE type
00271 );
00272
00275 void Create (
00276 TYPE type,
00277 MGUI::MENU::DELEGATE delegate
00278 );
00279
00281 void Delete (
00282 ITEMHND hndItem
00283 );
00284
00286 void DeleteAll (
00287 );
00288
00290 bool IsCreated (
00291 ) const { return (m_pPriv != 0); }
00292
00294 bool IsEmpty (
00295 ) const;
00296
00299 bool GetToggleState (
00300 ITEMHND hndItem
00301 ) const;
00302
00305 bool GetToggleStateID (
00306 ID id
00307 ) const;
00308
00311 ID Popup (
00312 CTRL& ctrl,
00313 const LPOINT2D& point,
00314 POPUP popupflags = POPUP_Default
00315 );
00316
00319 ID Popup (
00320 CTRL& ctrl,
00321 const MGUI::POINT& point,
00322 POPUP popupflags = POPUP_Default
00323 );
00324
00326 void SetDelegate (
00327 ID id,
00328 DELEGATE delegate
00329 );
00330
00332 void SetDelegateOnPointerWheel (
00333 DELEGATE_ONWHEEL delegate
00334 );
00335
00337 void SetEnabled (
00338 ITEMHND hndItem,
00339 bool enabled
00340 );
00341
00343 void SetEnabledAll (
00344 bool enabled
00345 );
00346
00348 void SetEnabledID (
00349 ID id,
00350 bool enabled
00351 );
00352
00354 void SetLabel (
00355 ITEMHND hndItem,
00356 const MISTRING& label
00357 );
00358
00360 void SetLabelID (
00361 ID id,
00362 const MISTRING& label
00363 );
00364
00367 void SetToggleState (
00368 ITEMHND hndItem,
00369 bool ToggleOn,
00370 bool notify
00371 );
00372
00375 void SetToggleStateID (
00376 ID id,
00377 bool ToggleOn,
00378 bool notify
00379 );
00380
00382 void SetVisible (
00383 ITEMHND hndItem,
00384 bool visible
00385 );
00386
00388 void SetVisibleID (
00389 ID id,
00390 bool visible
00391 );
00392
00393 #ifndef GENERATING_DOXYGEN_OUTPUT
00394 class PRIV;
00395
00396 typedef fastdelegate::FastDelegate<void(Widget)> DELEGATE_ONCREATEWIDGET;
00397
00398
00399 void AddDelegateOnCreateWidget (
00400 DELEGATE_ONCREATEWIDGET delegate
00401 );
00402
00403
00404 void CreateMenuBarX (
00405 LAYOUT_PANE_BASE& parentpane
00406 );
00407
00408
00409 Widget CreateToolBarX (
00410 LAYOUT_PANE_BASE& parentpane,
00411 LAYOUT_ORIENTATION orientation,
00412 LAYOUT_SIZEALIGN sizealign
00413 );
00414
00415
00416 PRIV* GetPrivPtr (
00417 ) const { return (m_pPriv); }
00418
00419
00420
00421 Widget GetWidgetFromID (
00422 ID id
00423 ) const;
00424
00425 private:
00426 PRIV *m_pPriv;
00427 #endif // GENERATING_DOXYGEN_OUTPUT
00428 };
00429
00430 #ifndef GENERATING_DOXYGEN_OUTPUT
00431 DEFINE_ENUM_OP_BITWISE(MENU::CREATEITEM)
00432 DEFINE_ENUM_OP_BITWISE(MENU::POPUP)
00433 #endif
00434
00435
00436 }
00437
00438 #endif // INC_MGUI_MENU_H