]> git.saurik.com Git - wxWidgets.git/blame - include/wx/os2/menu.h
Made widgets sample take up less space
[wxWidgets.git] / include / wx / os2 / menu.h
CommitLineData
0e320a79
DW
1/////////////////////////////////////////////////////////////////////////////
2// Name: menu.h
3// Purpose: wxMenu, wxMenuBar classes
75f11ad7 4// Author: David Webster
0e320a79 5// Modified by:
75f11ad7 6// Created: 10/10/99
0e320a79 7// RCS-ID: $Id$
75f11ad7
DW
8// Copyright: (c) David Webster
9// Licence: wxWindows licence
0e320a79
DW
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef _WX_MENU_H_
13#define _WX_MENU_H_
14
75f11ad7 15#if wxUSE_ACCEL
e92f266c
DW
16 #include "wx/accel.h"
17 #include "wx/dynarray.h"
18
19 WX_DEFINE_EXPORTED_ARRAY(wxAcceleratorEntry *, wxAcceleratorArray);
75f11ad7 20#endif // wxUSE_ACCEL
0e320a79 21
75f11ad7 22class WXDLLEXPORT wxFrame;
0e320a79 23
8c5907ce
DW
24void wxSetShortCutKey(wxChar* zText);
25
0e320a79
DW
26// ----------------------------------------------------------------------------
27// Menu
28// ----------------------------------------------------------------------------
0e320a79 29
e92f266c
DW
30class WXDLLEXPORT wxMenu : public wxMenuBase
31{
0e320a79 32public:
61243a51
DW
33 //
34 // Ctors & dtor
35 //
36 wxMenu( const wxString& rTitle
37 ,long lStyle = 0
38 )
39 : wxMenuBase( rTitle
40 ,lStyle
41 )
42 {
43 Init();
44 }
75f11ad7 45
61243a51
DW
46 wxMenu(long lStyle = 0)
47 : wxMenuBase(lStyle)
48 {
49 Init();
50 }
75f11ad7
DW
51
52 virtual ~wxMenu();
53
61243a51
DW
54 //
55 // Implement base class virtuals
56 //
57 virtual bool DoAppend(wxMenuItem* pItem);
58 virtual bool DoInsert( size_t nPos
59 ,wxMenuItem* pItem
60 );
61 virtual wxMenuItem* DoRemove(wxMenuItem* pItem);
62 virtual void Break(void);
63 virtual void SetTitle(const wxString& rTitle);
64
65#if wxUSE_MENU_CALLBACK
66 wxMenu( const wxString& rTitle
67 ,const wxFunction fnFunc
68 )
69 : wxMenuBase(rTitle)
e92f266c 70 {
61243a51
DW
71 Init();
72 Callback(fnFunc);
e92f266c 73 }
61243a51 74#endif // wxUSE_MENU_CALLBACK
e92f266c 75
61243a51
DW
76 //
77 // Implementation only from now on
78 // -------------------------------
79 //
80 bool OS2Command( WXUINT uParam
81 ,WXWORD wId
82 );
83
84 //
85 // Semi-private accessors
86 //
87
88 //
89 // Get the window which contains this menu
90 //
91 wxWindow* GetWindow(void) const;
92
93 //
94 // Get the menu handle
95 //
e92f266c 96 WXHMENU GetHMenu() const { return m_hMenu; }
75f11ad7 97
75f11ad7 98#if wxUSE_ACCEL
61243a51
DW
99 //
100 // Called by wxMenuBar to build its accel table from the accels of all menus
101 //
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;
105
106 //
107 // Called by wxMenuItem when its accels changes
108 //
109 void UpdateAccel(wxMenuItem* pItem);
110
111 //
112 // Helper used by wxMenu itself (returns the index in m_accels)
113 //
114 int FindAccel(int nId) const;
e92f266c 115#endif // wxUSE_ACCEL
45bedfdd
DW
116 //
117 // OS/2 specific Find
118 //
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); }
75f11ad7 125
61243a51
DW
126 //
127 // All OS/2PM Menu's have one of these
128 //
129 MENUITEM m_vMenuData;
130
75f11ad7 131private:
61243a51
DW
132 //
133 // Common part of all ctors
134 //
e92f266c
DW
135 void Init();
136
61243a51
DW
137 //
138 // Common part of Append/Insert (behaves as Append is pos == (size_t)-1)
139 //
140 bool DoInsertOrAppend( wxMenuItem* pItem
141 ,size_t nPos = (size_t)-1
142 );
143
ab4fece8
DW
144 //
145 // Terminate the current radio group, if any
146 //
147 void EndRadioGroup(void);
148
61243a51
DW
149 //
150 // If TRUE, insert a breal before appending the next item
151 //
152 bool m_bDoBreak;
153
154 //
155 // The menu handle of this menu
156 //
157 WXHMENU m_hMenu;
75f11ad7 158
f6bcfd97
BP
159 //
160 // The helper variable for creating unique IDs.
161 //
210a651b 162 static USHORT m_nextMenuId;
f6bcfd97 163
ab4fece8
DW
164 //
165 // The position of the first item in the current radio group or -1
166 //
167 int m_nStartRadioGroup;
168
75f11ad7 169#if wxUSE_ACCEL
61243a51
DW
170 //
171 // The accelerators for our menu items
172 //
173 wxAcceleratorArray m_vAccels;
75f11ad7 174#endif // wxUSE_ACCEL
e92f266c
DW
175
176 DECLARE_DYNAMIC_CLASS(wxMenu)
61243a51 177}; // end of wxMenu
0e320a79
DW
178
179// ----------------------------------------------------------------------------
180// Menu Bar (a la Windows)
181// ----------------------------------------------------------------------------
75f11ad7 182
e92f266c 183class WXDLLEXPORT wxMenuBar : public wxMenuBarBase
0e320a79 184{
75f11ad7 185public:
61243a51
DW
186 //
187 // Ctors & dtor
188 //
e92f266c 189
61243a51
DW
190 //
191 // Default constructor
192 //
193 wxMenuBar();
75f11ad7 194
61243a51
DW
195 //
196 // Unused under OS2
197 wxMenuBar(long lStyle);
198
199 //
200 // Menubar takes ownership of the menus arrays but copies the titles
201 //
202 wxMenuBar( int n
203 ,wxMenu* vMenus[]
204 ,const wxString sTitles[]
205 );
206 virtual ~wxMenuBar();
75f11ad7 207
61243a51
DW
208 //
209 // Menubar construction
210 //
211 virtual bool Append( wxMenu* pMenu
212 ,const wxString& rTitle
213 );
214 virtual bool Insert( size_t nPos
215 ,wxMenu* pMenu
216 ,const wxString& rTitle
217 );
218 virtual wxMenu* Replace( size_t nPos
219 ,wxMenu* pMenu
220 ,const wxString& rTitle
221 );
222 virtual wxMenu* Remove(size_t nPos);
223 virtual int FindMenuItem( const wxString& rMenuString
224 ,const wxString& rItemString
225 ) const;
226 virtual wxMenuItem* FindItem( int nId
227 ,wxMenu** ppMenu = NULL
228 ) const;
45bedfdd
DW
229 virtual wxMenuItem* FindItem( int nId
230 ,ULONG hItem
231 ,wxMenu** ppMenu = NULL
232 ) const;
61243a51
DW
233 virtual void EnableTop( size_t nPos
234 ,bool bFlag
235 );
236 virtual void SetLabelTop( size_t nPos
237 ,const wxString& rLabel
238 );
239 virtual wxString GetLabelTop(size_t nPos) const;
240
241 //
242 // Compatibility: these functions are deprecated
243 //
e92f266c 244#if WXWIN_COMPATIBILITY
61243a51
DW
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); }
75f11ad7
DW
249#endif // WXWIN_COMPATIBILITY
250
61243a51
DW
251 //
252 // Implementation from now on
253 //
254 WXHMENU Create(void);
210a651b
DW
255 virtual void Detach(void);
256 virtual void Attach(wxFrame* pFrame);
61243a51
DW
257
258#if wxUSE_ACCEL
259 //
260 // Get the accel table for all the menus
261 //
262 const wxAcceleratorTable& GetAccelTable(void) const { return m_vAccelTable; }
263
264 //
265 // Update the accel table (must be called after adding/deletign a menu)
266 //
267 void RebuildAccelTable(void);
75f11ad7
DW
268#endif // wxUSE_ACCEL
269
61243a51
DW
270 //
271 // Get the menu handle
272 WXHMENU GetHMenu(void) const { return m_hMenu; }
75f11ad7 273
61243a51
DW
274 //
275 // If the menubar is modified, the display is not updated automatically,
75f11ad7 276 // call this function to update it (m_menuBarFrame should be !NULL)
61243a51
DW
277 //
278 void Refresh(void);
75f11ad7
DW
279
280protected:
61243a51
DW
281 //
282 // Common part of all ctors
283 //
284 void Init(void);
75f11ad7 285
e92f266c 286#if WXWIN_COMPATIBILITY
61243a51 287 wxEvtHandler* m_pEventHandler;
e92f266c
DW
288#endif // WXWIN_COMPATIBILITY
289
290 wxArrayString m_titles;
291
0fe536e3 292 WXHMENU m_hMenu;
75f11ad7
DW
293
294#if wxUSE_ACCEL
61243a51
DW
295 //
296 // The accelerator table for all accelerators in all our menus
297 //
298 wxAcceleratorTable m_vAccelTable;
75f11ad7 299#endif // wxUSE_ACCEL
e92f266c
DW
300
301private:
61243a51
DW
302 //
303 // Virtual function hiding suppression
304 //
305 void Refresh( bool bErase
306 ,const wxRect* pRect
307 )
308 { wxWindow::Refresh(bErase, pRect); }
309
e92f266c 310 DECLARE_DYNAMIC_CLASS(wxMenuBar)
0e320a79
DW
311};
312
313#endif // _WX_MENU_H_