]> git.saurik.com Git - wxWidgets.git/blob - include/wx/cocoa/menuitem.h
In the object destructor, Disassociate the object from its Cocoa counterpart
[wxWidgets.git] / include / wx / cocoa / menuitem.h
1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: wx/cocoa/menuitem.h
3 // Purpose: wxMenuItem class
4 // Author: David Elliott
5 // Modified by:
6 // Created: 2002/12/13
7 // RCS-ID: $Id:
8 // Copyright: (c) 2002 David Elliott
9 // Licence: wxWindows licence
10 ///////////////////////////////////////////////////////////////////////////////
11
12 #ifndef _WX_COCOA_MENUITEM_H_
13 #define _WX_COCOA_MENUITEM_H_
14
15 #include "wx/hashmap.h"
16 #include "wx/bitmap.h"
17
18 // ========================================================================
19 // wxMenuItem
20 // ========================================================================
21
22 #define wxMenuItemCocoa wxMenuItem
23 class wxMenuItemCocoa;
24 WX_DECLARE_HASH_MAP(WX_NSMenuItem,wxMenuItem*,wxPointerHash,wxPointerEqual,wxMenuItemCocoaHash);
25
26 class WXDLLEXPORT wxMenuItemCocoa : public wxMenuItemBase
27 {
28 public:
29 // ------------------------------------------------------------------------
30 // initialization
31 // ------------------------------------------------------------------------
32 wxMenuItemCocoa(wxMenu *parentMenu = (wxMenu *)NULL,
33 int id = wxID_SEPARATOR,
34 const wxString& name = wxEmptyString,
35 const wxString& help = wxEmptyString,
36 wxItemKind kind = wxITEM_NORMAL,
37 wxMenu *subMenu = (wxMenu *)NULL);
38 virtual ~wxMenuItemCocoa();
39
40 // ------------------------------------------------------------------------
41 // Cocoa specifics
42 // ------------------------------------------------------------------------
43 public:
44 inline WX_NSMenuItem GetNSMenuItem() { return m_cocoaNSMenuItem; }
45 static inline wxMenuItem* GetFromCocoa(WX_NSMenuItem cocoaNSMenuItem)
46 {
47 wxMenuItemCocoaHash::iterator iter=sm_cocoaHash.find(cocoaNSMenuItem);
48 if(iter!=sm_cocoaHash.end())
49 return iter->second;
50 return NULL;
51 }
52 protected:
53 WX_NSMenuItem m_cocoaNSMenuItem;
54 static wxMenuItemCocoaHash sm_cocoaHash;
55 // ------------------------------------------------------------------------
56 // Implementation
57 // ------------------------------------------------------------------------
58 public:
59 // override base class virtuals to update the item appearance on screen
60 virtual void SetText(const wxString& text);
61 virtual void SetCheckable(bool checkable);
62
63 virtual void Enable(bool enable = TRUE);
64 virtual void Check(bool check = TRUE);
65
66 // we add some extra functions which are also available under MSW from
67 // wxOwnerDrawn class - they will be moved to wxMenuItemBase later
68 // hopefully
69 void SetBitmaps(const wxBitmap& bmpChecked,
70 const wxBitmap& bmpUnchecked = wxNullBitmap);
71 void SetBitmap(const wxBitmap& bmp) { SetBitmaps(bmp); }
72 const wxBitmap& GetBitmap(bool checked = TRUE) const
73 { return checked ? m_bmpChecked : m_bmpUnchecked; }
74
75 protected:
76 // notify the menu about the change in this item
77 inline void NotifyMenu();
78
79 // set the accel index and string from text
80 void UpdateAccelInfo();
81
82 // the bitmaps (may be invalid, then they're not used)
83 wxBitmap m_bmpChecked,
84 m_bmpUnchecked;
85
86 // the accel string (i.e. "Ctrl-Q" or "Alt-F1")
87 wxString m_strAccel;
88
89 private:
90 DECLARE_DYNAMIC_CLASS(wxMenuItem)
91 };
92
93 #endif // _WX_COCOA_MENUITEM_H_
94