1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxMenu, wxMenuBar classes
4 // Author: David Webster
8 // Copyright: (c) David Webster
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
17 #include "wx/dynarray.h"
19 WX_DEFINE_EXPORTED_ARRAY(wxAcceleratorEntry
*, wxAcceleratorArray
);
22 class WXDLLEXPORT wxFrame
;
24 void wxSetShortCutKey(wxChar
* zText
);
26 // ----------------------------------------------------------------------------
28 // ----------------------------------------------------------------------------
30 class WXDLLEXPORT wxMenu
: public wxMenuBase
36 wxMenu( const wxString
& rTitle
46 wxMenu(long lStyle
= 0)
55 // Implement base class virtuals
57 virtual bool DoAppend(wxMenuItem
* pItem
);
58 virtual bool DoInsert( size_t nPos
61 virtual wxMenuItem
* DoRemove(wxMenuItem
* pItem
);
62 virtual void Break(void);
63 virtual void SetTitle(const wxString
& rTitle
);
65 #if wxUSE_MENU_CALLBACK
66 wxMenu( const wxString
& rTitle
67 ,const wxFunction fnFunc
74 #endif // wxUSE_MENU_CALLBACK
77 // Implementation only from now on
78 // -------------------------------
80 bool OS2Command( WXUINT uParam
85 // Semi-private accessors
89 // Get the window which contains this menu
91 wxWindow
* GetWindow(void) const;
94 // Get the menu handle
96 WXHMENU
GetHMenu() const { return m_hMenu
; }
100 // Called by wxMenuBar to build its accel table from the accels of all menus
102 bool HasAccels(void) const { return !m_vAccels
.IsEmpty(); }
103 size_t GetAccelCount(void) const { return m_vAccels
.GetCount(); }
104 size_t CopyAccels(wxAcceleratorEntry
* pAccels
) const;
107 // Called by wxMenuItem when its accels changes
109 void UpdateAccel(wxMenuItem
* pItem
);
112 // Helper used by wxMenu itself (returns the index in m_accels)
114 int FindAccel(int nId
) const;
115 #endif // wxUSE_ACCEL
117 // OS/2 specific Find
119 wxMenuItem
* FindItem(int id
, ULONG hItem
, wxMenu
**menu
= NULL
) const;
120 //virtual function hiding suppression
121 int FindItem(const wxString
& rsString
) const
122 { return wxMenuBase::FindItem(rsString
); }
123 wxMenuItem
* FindItem(int id
, wxMenu
**menu
= NULL
) const
124 { return wxMenuBase::FindItem(id
, menu
); }
127 // All OS/2PM Menu's have one of these
129 MENUITEM m_vMenuData
;
133 // Common part of all ctors
138 // Common part of Append/Insert (behaves as Append is pos == (size_t)-1)
140 bool DoInsertOrAppend( wxMenuItem
* pItem
141 ,size_t nPos
= (size_t)-1
145 // Terminate the current radio group, if any
147 void EndRadioGroup(void);
150 // If TRUE, insert a breal before appending the next item
155 // The menu handle of this menu
160 // The helper variable for creating unique IDs.
162 static USHORT m_nextMenuId
;
165 // The position of the first item in the current radio group or -1
167 int m_nStartRadioGroup
;
171 // The accelerators for our menu items
173 wxAcceleratorArray m_vAccels
;
174 #endif // wxUSE_ACCEL
176 DECLARE_DYNAMIC_CLASS(wxMenu
)
179 // ----------------------------------------------------------------------------
180 // Menu Bar (a la Windows)
181 // ----------------------------------------------------------------------------
183 class WXDLLEXPORT wxMenuBar
: public wxMenuBarBase
191 // Default constructor
197 wxMenuBar(long lStyle
);
200 // Menubar takes ownership of the menus arrays but copies the titles
204 ,const wxString sTitles
[]
206 virtual ~wxMenuBar();
209 // Menubar construction
211 virtual bool Append( wxMenu
* pMenu
212 ,const wxString
& rTitle
214 virtual bool Insert( size_t nPos
216 ,const wxString
& rTitle
218 virtual wxMenu
* Replace( size_t nPos
220 ,const wxString
& rTitle
222 virtual wxMenu
* Remove(size_t nPos
);
223 virtual int FindMenuItem( const wxString
& rMenuString
224 ,const wxString
& rItemString
226 virtual wxMenuItem
* FindItem( int nId
227 ,wxMenu
** ppMenu
= NULL
229 virtual wxMenuItem
* FindItem( int nId
231 ,wxMenu
** ppMenu
= NULL
233 virtual void EnableTop( size_t nPos
236 virtual void SetLabelTop( size_t nPos
237 ,const wxString
& rLabel
239 virtual wxString
GetLabelTop(size_t nPos
) const;
242 // Compatibility: these functions are deprecated
244 #if WXWIN_COMPATIBILITY
245 void SetEventHandler(wxEvtHandler
* pHandler
) { m_pEventHandler
= pHandler
; }
246 wxEvtHandler
* GetEventHandler(void) { return m_pEventHandler
; }
247 bool Enabled(int nId
) const { return IsEnabled(nId
); }
248 bool Checked(int nId
) const { return IsChecked(nId
); }
249 #endif // WXWIN_COMPATIBILITY
252 // Implementation from now on
254 WXHMENU
Create(void);
255 virtual void Detach(void);
256 virtual void Attach(wxFrame
* pFrame
);
260 // Get the accel table for all the menus
262 const wxAcceleratorTable
& GetAccelTable(void) const { return m_vAccelTable
; }
265 // Update the accel table (must be called after adding/deletign a menu)
267 void RebuildAccelTable(void);
268 #endif // wxUSE_ACCEL
271 // Get the menu handle
272 WXHMENU
GetHMenu(void) const { return m_hMenu
; }
275 // If the menubar is modified, the display is not updated automatically,
276 // call this function to update it (m_menuBarFrame should be !NULL)
282 // Common part of all ctors
286 #if WXWIN_COMPATIBILITY
287 wxEvtHandler
* m_pEventHandler
;
288 #endif // WXWIN_COMPATIBILITY
290 wxArrayString m_titles
;
296 // The accelerator table for all accelerators in all our menus
298 wxAcceleratorTable m_vAccelTable
;
299 #endif // wxUSE_ACCEL
303 // Virtual function hiding suppression
305 void Refresh( bool bErase
308 { wxWindow::Refresh(bErase
, pRect
); }
310 DECLARE_DYNAMIC_CLASS(wxMenuBar
)
313 #endif // _WX_MENU_H_