/////////////////////////////////////////////////////////////////////////////// // Name: menuitem.h // Purpose: wxMenuItem class // Author: Vadim Zeitlin // Modified by: // Created: 11.11.97 // RCS-ID: $Id$ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows license /////////////////////////////////////////////////////////////////////////////// #ifndef _MENUITEM_H #define _MENUITEM_H #ifdef __GNUG__ #pragma interface "menuitem.h" #endif // ---------------------------------------------------------------------------- // headers // ---------------------------------------------------------------------------- #include "wx/setup.h" // an exception to the general rule that a normal header doesn't include other // headers - only because ownerdrw.h is not always included and I don't want // to write #ifdef's everywhere... #if USE_OWNER_DRAWN #include "wx/ownerdrw.h" #endif // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- // id for a separator line in the menu (invalid for normal item) #define ID_SEPARATOR (-1) // ---------------------------------------------------------------------------- // wxMenuItem: an item in the menu, optionally implements owner-drawn behaviour // ---------------------------------------------------------------------------- class WXDLLEXPORT wxMenuItem: public wxObject #if USE_OWNER_DRAWN , public wxOwnerDrawn #endif { DECLARE_DYNAMIC_CLASS(wxMenuItem) public: // ctor & dtor wxMenuItem(wxMenu *pParentMenu = NULL, int id = ID_SEPARATOR, const wxString& strName = "", const wxString& wxHelp = "", bool bCheckable = FALSE, wxMenu *pSubMenu = NULL); virtual ~wxMenuItem(); // accessors (some more are inherited from wxOwnerDrawn or are below) bool IsSeparator() const { return m_idItem == ID_SEPARATOR; } bool IsEnabled() const { return m_bEnabled; } bool IsChecked() const { return m_bChecked; } int GetId() const { return m_idItem; } const wxString& GetHelp() const { return m_strHelp; } wxMenu *GetSubMenu() const { return m_pSubMenu; } // operations void SetName(const wxString& strName) { m_strName = strName; } void SetHelp(const wxString& strHelp) { m_strHelp = strHelp; } void Enable(bool bDoEnable = TRUE); void Check(bool bDoCheck = TRUE); void DeleteSubMenu(); //// Motif-specific // These two should probably exist for all ports void SetLabel(const wxString& label); wxString GetLabel() const { return m_strName; } void CreateItem (WXWidget menu, wxMenuBar * menuBar, wxMenu * topMenu); void DestroyItem(bool full); inline WXWidget GetButtonWidget() const { return m_buttonWidget; } inline void SetChecked(bool check) { m_bChecked = check; } inline wxMenuBar* GetMenuBar() const { return m_menuBar; } inline void SetMenuBar(wxMenuBar* menuBar) { m_menuBar = menuBar; } inline wxMenu* GetTopMenu() const { return m_topMenu; } inline void SetTopMenu(wxMenu* menu) { m_topMenu = menu; } private: int m_idItem; // numeric id of the item wxString m_strHelp; // associated help string wxMenu *m_pSubMenu, // may be NULL *m_pParentMenu; // menu this item is contained in bool m_bEnabled, // enabled or greyed? m_bChecked; // checked? (only if checkable) //// Motif-specific WXWidget m_buttonWidget; wxMenuBar* m_menuBar; wxMenu* m_topMenu; // Top-level menu e.g. popup-menu #if USE_OWNER_DRAWN // wxOwnerDrawn base class already has these variables - nothing to do #else //!owner drawn bool m_bCheckable; // can be checked? wxString m_strName; // name or label of the item public: const wxString& GetName() const { return m_strName; } bool IsCheckable() const { return m_bCheckable; } #endif //owner drawn }; #endif //_MENUITEM_H