home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2240.zip / wxWindows-2.4.0 / include / wx / menuitem.h < prev    next >
C/C++ Source or Header  |  2002-04-12  |  7KB  |  175 lines

  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.22 2002/04/12 13:15:43 JS 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
  51.     wxMenu *GetMenu() const { return m_parentMenu; }
  52.  
  53.     // get/set id
  54.     void SetId(int id) { m_id = id; }
  55.     int  GetId() const { return m_id; }
  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
  64.     virtual void SetText(const wxString& str) { m_text = str; }
  65.     wxString GetLabel() const { return GetLabelFromText(m_text); }
  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
  72.     wxItemKind GetKind() const { return m_kind; }
  73.  
  74.     virtual void SetCheckable(bool checkable) { m_kind = checkable ? wxITEM_CHECK : wxITEM_NORMAL; }
  75.     bool IsCheckable() const
  76.         { return m_kind == wxITEM_CHECK || m_kind == wxITEM_RADIO; }
  77.  
  78.     bool IsSubMenu() const { return m_subMenu != NULL; }
  79.     void SetSubMenu(wxMenu *menu) { m_subMenu = menu; }
  80.     wxMenu *GetSubMenu() const { return m_subMenu; }
  81.  
  82.     // state
  83.     virtual void Enable(bool enable = TRUE) { m_isEnabled = enable; }
  84.     virtual bool IsEnabled() const { return m_isEnabled; }
  85.  
  86.     virtual void Check(bool check = TRUE) { m_isChecked = check; }
  87.     virtual bool IsChecked() const { return m_isChecked; }
  88.     void Toggle() { Check(!m_isChecked); }
  89.  
  90.     // help string (displayed in the status bar by default)
  91.     void SetHelp(const wxString& str) { m_help = str; }
  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
  108.     void SetName(const wxString& str) { SetText(str); }
  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.