]>
git.saurik.com Git - wxWidgets.git/blob - include/wx/mac/menu.h
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxMenu, wxMenuBar classes
4 // Author: Stefan Csomor
8 // Copyright: (c) Stefan Csomor
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
15 #if defined(__GNUG__) && !defined(__APPLE__)
16 #pragma interface "menu.h"
19 class WXDLLEXPORT wxFrame
;
21 // ----------------------------------------------------------------------------
23 // ----------------------------------------------------------------------------
25 class WXDLLEXPORT wxMenu
: public wxMenuBase
29 wxMenu(const wxString
& title
, long style
= 0)
30 : wxMenuBase(title
, style
) { Init(); }
32 wxMenu(long style
= 0) : wxMenuBase(style
) { Init(); }
36 // implement base class virtuals
37 virtual bool DoAppend(wxMenuItem
*item
);
38 virtual bool DoInsert(size_t pos
, wxMenuItem
*item
);
39 virtual wxMenuItem
*DoRemove(wxMenuItem
*item
);
40 virtual void Attach(wxMenuBarBase
*menubar
) ;
44 virtual void SetTitle(const wxString
& title
);
47 bool ProcessCommand(wxCommandEvent
& event
);
49 #if WXWIN_COMPATIBILITY
50 wxMenu(const wxString
& title
, const wxFunction func
)
55 #endif // WXWIN_COMPATIBILITY
57 // implementation only from now on
58 // -------------------------------
60 int MacGetIndexFromId( int id
) ;
61 int MacGetIndexFromItem( wxMenuItem
*pItem
) ;
62 void MacEnableMenu( bool bDoEnable
) ;
63 // MacOS needs to know about submenus somewhere within this menu
64 // before it can be displayed , also hide special menu items like preferences
65 // that are handled by the OS
66 void MacBeforeDisplay( bool isSubMenu
) ;
67 // undo all changes from the MacBeforeDisplay call
68 void MacAfterDisplay( bool isSubMenu
) ;
70 // semi-private accessors
71 // get the window which contains this menu
72 wxWindow
*GetWindow() const;
73 // get the menu handle
74 WXHMENU
GetHMenu() const { return m_hMenu
; }
76 short MacGetMenuId() { return m_macMenuId
; }
79 // common part of all ctors
82 // common part of Append/Insert (behaves as Append is pos == (size_t)-1)
83 bool DoInsertOrAppend(wxMenuItem
*item
, size_t pos
= (size_t)-1);
85 // terminate the current radio group, if any
88 // if TRUE, insert a breal before appending the next item
91 // the position of the first item in the current radio group or -1
92 int m_startRadioGroup
;
94 // the menu handle of this menu
99 static short s_macNextMenuId
;
101 DECLARE_DYNAMIC_CLASS(wxMenu
)
104 // ----------------------------------------------------------------------------
105 // Menu Bar (a la Windows)
106 // ----------------------------------------------------------------------------
108 class WXDLLEXPORT wxMenuBar
: public wxMenuBarBase
112 // default constructor
115 wxMenuBar(long style
);
116 // menubar takes ownership of the menus arrays but copies the titles
117 wxMenuBar(int n
, wxMenu
*menus
[], const wxString titles
[]);
118 virtual ~wxMenuBar();
120 // menubar construction
121 virtual bool Append( wxMenu
*menu
, const wxString
&title
);
122 virtual bool Insert(size_t pos
, wxMenu
*menu
, const wxString
& title
);
123 virtual wxMenu
*Replace(size_t pos
, wxMenu
*menu
, const wxString
& title
);
124 virtual wxMenu
*Remove(size_t pos
);
126 virtual int FindMenuItem(const wxString
& menuString
,
127 const wxString
& itemString
) const;
128 virtual wxMenuItem
* FindItem( int id
, wxMenu
**menu
= NULL
) const;
130 virtual void EnableTop( size_t pos
, bool flag
);
131 virtual void SetLabelTop( size_t pos
, const wxString
& label
);
132 virtual wxString
GetLabelTop( size_t pos
) const;
134 // compatibility: these functions are deprecated
135 #if WXWIN_COMPATIBILITY
136 void SetEventHandler(wxEvtHandler
*handler
) { m_eventHandler
= handler
; }
137 wxEvtHandler
*GetEventHandler() { return m_eventHandler
; }
139 bool Enabled(int id
) const { return IsEnabled(id
); }
140 bool Checked(int id
) const { return IsChecked(id
); }
141 #endif // WXWIN_COMPATIBILITY
143 // implementation from now on
145 int FindMenu(const wxString
& title
);
148 // returns TRUE if we're attached to a frame
149 bool IsAttached() const { return m_menuBarFrame
!= NULL
; }
150 // get the frame we live in
151 wxFrame
*GetFrame() const { return m_menuBarFrame
; }
153 void Attach(wxFrame
*frame
);
155 // clear the invoking window for all menus and submenus
156 void UnsetInvokingWindow() ;
158 // set the invoking window for all menus and submenus
159 void SetInvokingWindow( wxFrame
* frame
) ;
161 // if the menubar is modified, the display is not updated automatically,
162 // call this function to update it (m_menuBarFrame should be !NULL)
163 void Refresh(bool eraseBackground
= TRUE
, const wxRect
*rect
= (const wxRect
*) NULL
);
165 void MacInstallMenuBar() ;
166 static wxMenuBar
* MacGetInstalledMenuBar() { return s_macInstalledMenuBar
; }
167 static void MacSetCommonMenuBar(wxMenuBar
* menubar
) { s_macCommonMenuBar
=menubar
; }
168 static wxMenuBar
* MacGetCommonMenuBar() { return s_macCommonMenuBar
; }
171 // common part of all ctors
173 wxWindow
*m_invokingWindow
;
175 #if WXWIN_COMPATIBILITY
176 wxEvtHandler
*m_eventHandler
;
177 #endif // WXWIN_COMPATIBILITY
179 wxArrayString m_titles
;
182 static wxMenuBar
* s_macInstalledMenuBar
;
183 static wxMenuBar
* s_macCommonMenuBar
;
185 DECLARE_DYNAMIC_CLASS(wxMenuBar
)
188 #endif // _WX_MENU_H_