X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c2dcfdef634e097f7efe2288aa13511efb43ae28..df53be12c55c077d9c2e1c479a1552188638495c:/include/wx/msw/menuitem.h?ds=sidebyside diff --git a/include/wx/msw/menuitem.h b/include/wx/msw/menuitem.h index 28e8e1c9db..4cfc3d058b 100644 --- a/include/wx/msw/menuitem.h +++ b/include/wx/msw/menuitem.h @@ -6,95 +6,151 @@ // Created: 11.11.97 // RCS-ID: $Id$ // Copyright: (c) 1998 Vadim Zeitlin -// Licence: wxWindows license +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// #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 wxUSE_OWNER_DRAWN - #include "wx/ownerdrw.h" -#endif + #include "wx/ownerdrw.h" + #include "wx/bitmap.h" -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// id for a separator line in the menu (invalid for normal item) -#define ID_SEPARATOR (-1) + struct tagRECT; +#endif // ---------------------------------------------------------------------------- // wxMenuItem: an item in the menu, optionally implements owner-drawn behaviour // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxMenuItem: public wxObject + +class WXDLLIMPEXP_CORE wxMenuItem : public wxMenuItemBase #if wxUSE_OWNER_DRAWN - , public wxOwnerDrawn + , 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; } - bool IsSubMenu() const { return GetSubMenu() != NULL; } - - int GetId() const { return m_idItem; } - const wxString& GetHelp() const { return m_strHelp; } - wxMenu *GetSubMenu() const { return m_pSubMenu; } + // ctor & dtor + wxMenuItem(wxMenu *parentMenu = NULL, + int id = wxID_SEPARATOR, + const wxString& name = wxEmptyString, + const wxString& help = wxEmptyString, + wxItemKind kind = wxITEM_NORMAL, + wxMenu *subMenu = NULL); + virtual ~wxMenuItem(); + + // override base class virtuals + virtual void SetItemLabel(const wxString& strName); + + virtual void Enable(bool bDoEnable = true); + virtual void Check(bool bDoCheck = true); + virtual bool IsChecked() const; + + // unfortunately needed to resolve ambiguity between + // wxMenuItemBase::IsCheckable() and wxOwnerDrawn::IsCheckable() + bool IsCheckable() const { return wxMenuItemBase::IsCheckable(); } + + // the id for a popup menu is really its menu handle (as required by + // ::AppendMenu() API), so this function will return either the id or the + // menu handle depending on what we are + // + // notice that it also returns the id as an unsigned int, as required by + // Win32 API + WXWPARAM GetMSWId() const; + + // mark item as belonging to the given radio group + void SetAsRadioGroupStart(); + void SetRadioGroupStart(int start); + void SetRadioGroupEnd(int end); + +#if WXWIN_COMPATIBILITY_2_8 + // compatibility only, don't use in new code + wxDEPRECATED( + wxMenuItem(wxMenu *parentMenu, + int id, + const wxString& text, + const wxString& help, + bool isCheckable, + wxMenu *subMenu = NULL) + ); +#endif - // the id for a popup menu is really its menu handle (as required by - // ::AppendMenu() API) - int GetRealId() const; +#if wxUSE_OWNER_DRAWN - // operations - void SetName(const wxString& strName); - void SetHelp(const wxString& strHelp) { m_strHelp = strHelp; } + void SetBitmaps(const wxBitmap& bmpChecked, + const wxBitmap& bmpUnchecked = wxNullBitmap) + { + m_bmpChecked = bmpChecked; + m_bmpUnchecked = bmpUnchecked; + SetOwnerDrawn(true); + } + + void SetBitmap(const wxBitmap& bmp, bool bChecked = true) + { + if ( bChecked ) + m_bmpChecked = bmp; + else + m_bmpUnchecked = bmp; + SetOwnerDrawn(true); + } + + void SetDisabledBitmap(const wxBitmap& bmpDisabled) + { + m_bmpDisabled = bmpDisabled; + SetOwnerDrawn(true); + } + + const wxBitmap& GetBitmap(bool bChecked = true) const + { return (bChecked ? m_bmpChecked : m_bmpUnchecked); } + + const wxBitmap& GetDisabledBitmap() const + { return m_bmpDisabled; } + + int MeasureAccelWidth() const; + + // override wxOwnerDrawn base class virtuals + virtual wxString GetName() const; + virtual bool OnMeasureItem(size_t *pwidth, size_t *pheight); + virtual bool OnDrawItem(wxDC& dc, const wxRect& rc, wxODAction act, wxODStatus stat); + +protected: + virtual void GetFontToUse(wxFont& font) const; + virtual void GetColourToUse(wxODStatus stat, wxColour& colText, wxColour& colBack) const; - void Enable(bool bDoEnable = TRUE); - void Check(bool bDoCheck = TRUE); +private: + // helper function for draw std menu check mark + void DrawStdCheckMark(WXHDC hdc, const tagRECT* rc, wxODStatus stat); - void DeleteSubMenu(); +#endif // wxUSE_OWNER_DRAWN 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) + // common part of all ctors + void Init(); + + // the positions of the first and last items of the radio group this item + // belongs to or -1: start is the radio group start and is valid for all + // but first radio group items (m_isRadioGroupStart == false), end is valid + // only for the first one + union + { + int start; + int end; + } m_radioGroup; + + // does this item start a radio group? + bool m_isRadioGroupStart; #if wxUSE_OWNER_DRAWN - // wxOwnerDrawn base class already has these variables - nothing to do + // item bitmaps + wxBitmap m_bmpChecked, // bitmap to put near the item + m_bmpUnchecked, // (checked is used also for 'uncheckable' items) + m_bmpDisabled; +#endif // wxUSE_OWNER_DRAWN -#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 + DECLARE_DYNAMIC_CLASS_NO_COPY(wxMenuItem) }; #endif //_MENUITEM_H