1 /////////////////////////////////////////////////////////////////////////////// 2 // Name: wx/menuitem.h 3 // Purpose: wxMenuItem class 4 // Author: Vadim Zeitlin 5 // Modified by: 6 // Created: 25.10.99 7 // RCS-ID: $Id: menuitem.h,v 1.1 2006/12/02 15:58:25 scara Exp $ 8 // Copyright: (c) 1999 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> 9 // Licence: wxWindows license 10 /////////////////////////////////////////////////////////////////////////////// 11 12 #ifndef _WX_MENUITEM_H_BASE_ 13 #define _WX_MENUITEM_H_BASE_ 14 15 #if wxUSE_MENUS 16 17 // ---------------------------------------------------------------------------- 18 // headers 19 // ---------------------------------------------------------------------------- 20 21 #include "wx/object.h" // base class 22 23 // ---------------------------------------------------------------------------- 24 // forward declarations 25 // ---------------------------------------------------------------------------- 26 27 class WXDLLEXPORT wxAcceleratorEntry; 28 class WXDLLEXPORT wxMenuItem; 29 class WXDLLEXPORT wxMenu; 30 31 // ---------------------------------------------------------------------------- 32 // wxMenuItem is an item in the menu which may be either a normal item, a sub 33 // menu or a separator 34 // ---------------------------------------------------------------------------- 35 36 class WXDLLEXPORT wxMenuItemBase : public wxObject 37 { 38 public: 39 // creation 40 static wxMenuItem *New(wxMenu *parentMenu = (wxMenu *)NULL, 41 int id = wxID_SEPARATOR, 42 const wxString& text = wxEmptyString, 43 const wxString& help = wxEmptyString, 44 wxItemKind kind = wxITEM_NORMAL, 45 wxMenu *subMenu = (wxMenu *)NULL); 46 47 // destruction: wxMenuItem will delete its submenu 48 virtual ~wxMenuItemBase(); 49 50 // the menu we're in GetMenu()51 wxMenu *GetMenu() const { return m_parentMenu; } 52 53 // get/set id SetId(int id)54 void SetId(int id) { m_id = id; } GetId()55 int GetId() const { return m_id; } IsSeparator()56 bool IsSeparator() const { return m_id == wxID_SEPARATOR; } 57 58 // the item's text (or name) 59 // 60 // NB: the item's text includes the accelerators and mnemonics info (if 61 // any), i.e. it may contain '&' or '_' or "\t..." and thus is 62 // different from the item's label which only contains the text shown 63 // in the menu SetText(const wxString & str)64 virtual void SetText(const wxString& str) { m_text = str; } GetLabel()65 wxString GetLabel() const { return GetLabelFromText(m_text); } GetText()66 const wxString& GetText() const { return m_text; } 67 68 // get the label from text (implemented in platform-specific code) 69 static wxString GetLabelFromText(const wxString& text); 70 71 // what kind of menu item we are GetKind()72 wxItemKind GetKind() const { return m_kind; } 73 SetCheckable(bool checkable)74 virtual void SetCheckable(bool checkable) { m_kind = checkable ? wxITEM_CHECK : wxITEM_NORMAL; } IsCheckable()75 bool IsCheckable() const 76 { return m_kind == wxITEM_CHECK || m_kind == wxITEM_RADIO; } 77 IsSubMenu()78 bool IsSubMenu() const { return m_subMenu != NULL; } SetSubMenu(wxMenu * menu)79 void SetSubMenu(wxMenu *menu) { m_subMenu = menu; } GetSubMenu()80 wxMenu *GetSubMenu() const { return m_subMenu; } 81 82 // state 83 virtual void Enable(bool enable = TRUE) { m_isEnabled = enable; } IsEnabled()84 virtual bool IsEnabled() const { return m_isEnabled; } 85 86 virtual void Check(bool check = TRUE) { m_isChecked = check; } IsChecked()87 virtual bool IsChecked() const { return m_isChecked; } Toggle()88 void Toggle() { Check(!m_isChecked); } 89 90 // help string (displayed in the status bar by default) SetHelp(const wxString & str)91 void SetHelp(const wxString& str) { m_help = str; } GetHelp()92 const wxString& GetHelp() const { return m_help; } 93 94 #if wxUSE_ACCEL 95 // extract the accelerator from the given menu string, return NULL if none 96 // found 97 static wxAcceleratorEntry *GetAccelFromString(const wxString& label); 98 99 // get our accelerator or NULL (caller must delete the pointer) 100 virtual wxAcceleratorEntry *GetAccel() const; 101 102 // set the accel for this item - this may also be done indirectly with 103 // SetText() 104 virtual void SetAccel(wxAcceleratorEntry *accel); 105 #endif // wxUSE_ACCEL 106 107 // compatibility only, use new functions in the new code SetName(const wxString & str)108 void SetName(const wxString& str) { SetText(str); } GetName()109 const wxString& GetName() const { return GetText(); } 110 111 static wxMenuItem *New(wxMenu *parentMenu, 112 int id, 113 const wxString& text, 114 const wxString& help, 115 bool isCheckable, 116 wxMenu *subMenu = (wxMenu *)NULL) 117 { 118 return New(parentMenu, id, text, help, 119 isCheckable ? wxITEM_CHECK : wxITEM_NORMAL, subMenu); 120 } 121 122 protected: 123 int m_id; // numeric id of the item >= 0 or -1 124 wxMenu *m_parentMenu, // the menu we belong to 125 *m_subMenu; // our sub menu or NULL 126 wxString m_text, // label of the item 127 m_help; // the help string for the item 128 wxItemKind m_kind; // seperator/normal/check/radio item? 129 bool m_isChecked; // is checked? 130 bool m_isEnabled; // is enabled? 131 132 // this ctor is for the derived classes only, we're never created directly 133 wxMenuItemBase(wxMenu *parentMenu = (wxMenu *)NULL, 134 int id = wxID_SEPARATOR, 135 const wxString& text = wxEmptyString, 136 const wxString& help = wxEmptyString, 137 wxItemKind kind = wxITEM_NORMAL, 138 wxMenu *subMenu = (wxMenu *)NULL); 139 140 private: 141 // and, if we have one ctor, compiler won't generate a default copy one, so 142 // declare them ourselves - but don't implement as they shouldn't be used 143 wxMenuItemBase(const wxMenuItemBase& item); 144 wxMenuItemBase& operator=(const wxMenuItemBase& item); 145 }; 146 147 // ---------------------------------------------------------------------------- 148 // include the real class declaration 149 // ---------------------------------------------------------------------------- 150 151 #ifdef wxUSE_BASE_CLASSES_ONLY 152 #define wxMenuItem wxMenuItemBase 153 #else // !wxUSE_BASE_CLASSES_ONLY 154 #if defined(__WXUNIVERSAL__) 155 #include "wx/univ/menuitem.h" 156 #elif defined(__WXMSW__) 157 #include "wx/msw/menuitem.h" 158 #elif defined(__WXMOTIF__) 159 #include "wx/motif/menuitem.h" 160 #elif defined(__WXGTK__) 161 #include "wx/gtk/menuitem.h" 162 #elif defined(__WXMAC__) 163 #include "wx/mac/menuitem.h" 164 #elif defined(__WXPM__) 165 #include "wx/os2/menuitem.h" 166 #elif defined(__WXSTUBS__) 167 #include "wx/stubs/menuitem.h" 168 #endif 169 #endif // wxUSE_BASE_CLASSES_ONLY/!wxUSE_BASE_CLASSES_ONLY 170 171 #endif // wxUSE_MENUS 172 173 #endif 174 // _WX_MENUITEM_H_BASE_ 175