]> git.saurik.com Git - wxWidgets.git/blame - interface/wx/menu.h
Fix unit test build with wxUSE_ZIPSTREAM or wxUSE_TARSTREAM == 0.
[wxWidgets.git] / interface / wx / menu.h
CommitLineData
23324ae1
FM
1/////////////////////////////////////////////////////////////////////////////
2// Name: menu.h
e54c96f1 3// Purpose: interface of wxMenuBar
23324ae1
FM
4// Author: wxWidgets team
5// RCS-ID: $Id$
526954c5 6// Licence: wxWindows licence
23324ae1
FM
7/////////////////////////////////////////////////////////////////////////////
8
9/**
10 @class wxMenuBar
7c913512 11
23324ae1 12 A menu bar is a series of menus accessible from the top of a frame.
7c913512 13
ba1d7a6c
FM
14 @remarks
15 To respond to a menu selection, provide a handler for EVT_MENU, in the frame
16 that contains the menu bar.
17
18 If you have a toolbar which uses the same identifiers as your EVT_MENU entries,
19 events from the toolbar will also be processed by your EVT_MENU event handlers.
20
21 Tip: under Windows, if you discover that menu shortcuts (for example, Alt-F
22 to show the file menu) are not working, check any EVT_CHAR events you are
23 handling in child windows.
24 If you are not calling event.Skip() for events that you don't process in
25 these event handlers, menu shortcuts may cease to work.
26
23324ae1
FM
27 @library{wxcore}
28 @category{menus}
7c913512 29
3e083d65 30 @see wxMenu, @ref overview_events
23324ae1
FM
31*/
32class wxMenuBar : public wxWindow
33{
34public:
ff58644a 35 /**
ba1d7a6c 36 Construct an empty menu bar.
ff58644a
RR
37
38 @param style
39 If wxMB_DOCKABLE the menu bar can be detached (wxGTK only).
40 */
41 wxMenuBar(long style = 0);
ba1d7a6c 42
23324ae1
FM
43 /**
44 Construct a menu bar from arrays of menus and titles.
3c4f71cc 45
7c913512 46 @param n
4cc4bfaf 47 The number of menus.
7c913512 48 @param menus
ff58644a
RR
49 An array of menus. Do not use this array again - it now belongs to
50 the menu bar.
7c913512 51 @param titles
ff58644a
RR
52 An array of title strings. Deallocate this array after creating
53 the menu bar.
7c913512 54 @param style
4cc4bfaf 55 If wxMB_DOCKABLE the menu bar can be detached (wxGTK only).
1058f652
MB
56
57 @beginWxPerlOnly
58 Not supported by wxPerl.
59 @endWxPerlOnly
23324ae1 60 */
7c913512
FM
61 wxMenuBar(size_t n, wxMenu* menus[], const wxString titles[],
62 long style = 0);
23324ae1
FM
63
64 /**
ba1d7a6c
FM
65 Destructor, destroying the menu bar and removing it from the parent
66 frame (if any).
23324ae1 67 */
adaaa686 68 virtual ~wxMenuBar();
23324ae1
FM
69
70 /**
71 Adds the item to the end of the menu bar.
3c4f71cc 72
7c913512 73 @param menu
ba1d7a6c 74 The menu to add. Do not deallocate this menu after calling Append().
7c913512 75 @param title
b871bb95 76 The title of the menu, must be non-empty.
3c4f71cc 77
d29a9a8a 78 @return @true on success, @false if an error occurred.
3c4f71cc 79
4cc4bfaf 80 @see Insert()
23324ae1 81 */
adaaa686 82 virtual bool Append(wxMenu* menu, const wxString& title);
23324ae1
FM
83
84 /**
85 Checks or unchecks a menu item.
3c4f71cc 86
7c913512 87 @param id
4cc4bfaf 88 The menu item identifier.
7c913512 89 @param check
4cc4bfaf 90 If @true, checks the menu item, otherwise the item is unchecked.
3c4f71cc 91
23324ae1 92 @remarks Only use this when the menu bar has been associated with a
4cc4bfaf 93 frame; otherwise, use the wxMenu equivalent call.
23324ae1 94 */
43c48e1e 95 void Check(int id, bool check);
23324ae1
FM
96
97 /**
98 Enables or disables (greys out) a menu item.
3c4f71cc 99
7c913512 100 @param id
4cc4bfaf 101 The menu item identifier.
7c913512 102 @param enable
4cc4bfaf 103 @true to enable the item, @false to disable it.
3c4f71cc 104
23324ae1 105 @remarks Only use this when the menu bar has been associated with a
4cc4bfaf 106 frame; otherwise, use the wxMenu equivalent call.
23324ae1 107 */
0a98423e 108 void Enable(int id, bool enable);
23324ae1
FM
109
110 /**
111 Enables or disables a whole menu.
3c4f71cc 112
7c913512 113 @param pos
4cc4bfaf 114 The position of the menu, starting from zero.
7c913512 115 @param enable
4cc4bfaf 116 @true to enable the menu, @false to disable it.
3c4f71cc 117
23324ae1
FM
118 @remarks Only use this when the menu bar has been associated with a frame.
119 */
43c48e1e 120 virtual void EnableTop(size_t pos, bool enable);
23324ae1
FM
121
122 /**
123 Finds the menu item object associated with the given menu item identifier.
3c4f71cc 124
7c913512 125 @param id
4cc4bfaf 126 Menu item identifier.
7c913512 127 @param menu
4cc4bfaf 128 If not @NULL, menu will get set to the associated menu.
3c4f71cc 129
d29a9a8a 130 @return The found menu item object, or @NULL if one was not found.
1058f652
MB
131
132 @beginWxPerlOnly
133 In wxPerl this method takes just the @a id parameter;
134 in scalar context it returns the associated @c Wx::MenuItem, in list
135 context it returns a 2-element list (item, submenu).
136 @endWxPerlOnly
23324ae1 137 */
86381d42 138 virtual wxMenuItem* FindItem(int id, wxMenu** menu = NULL) const;
23324ae1
FM
139
140 /**
4cc4bfaf 141 Returns the index of the menu with the given @a title or @c wxNOT_FOUND if no
ba1d7a6c
FM
142 such menu exists in this menubar.
143
144 The @a title parameter may specify either the menu title
145 (with accelerator characters, i.e. @c "&File") or just the
23324ae1
FM
146 menu label (@c "File") indifferently.
147 */
328f5751 148 int FindMenu(const wxString& title) const;
23324ae1
FM
149
150 /**
151 Finds the menu item id for a menu name/menu item string pair.
3c4f71cc 152
7c913512 153 @param menuString
4cc4bfaf 154 Menu title to find.
7c913512 155 @param itemString
4cc4bfaf 156 Item to find.
3c4f71cc 157
d29a9a8a 158 @return The menu item identifier, or wxNOT_FOUND if none was found.
3c4f71cc 159
23324ae1 160 @remarks Any special menu codes are stripped out of source and target
4cc4bfaf 161 strings before matching.
23324ae1 162 */
fadc2df6
FM
163 virtual int FindMenuItem(const wxString& menuString,
164 const wxString& itemString) const;
23324ae1
FM
165
166 /**
167 Gets the help string associated with the menu item identifier.
3c4f71cc 168
7c913512 169 @param id
4cc4bfaf 170 The menu item identifier.
3c4f71cc 171
d29a9a8a
BP
172 @return The help string, or the empty string if there was no help string
173 or the menu item was not found.
3c4f71cc 174
4cc4bfaf 175 @see SetHelpString()
23324ae1 176 */
328f5751 177 wxString GetHelpString(int id) const;
23324ae1
FM
178
179 /**
180 Gets the label associated with a menu item.
3c4f71cc 181
7c913512 182 @param id
4cc4bfaf 183 The menu item identifier.
3c4f71cc 184
d29a9a8a
BP
185 @return The menu item label, or the empty string if the item was not
186 found.
3c4f71cc 187
23324ae1
FM
188 @remarks Use only after the menubar has been associated with a frame.
189 */
328f5751 190 wxString GetLabel(int id) const;
23324ae1
FM
191
192 /**
193 Returns the label of a top-level menu. Note that the returned string does not
194 include the accelerator characters which could have been specified in the menu
195 title string during its construction.
3c4f71cc 196
7c913512 197 @param pos
4cc4bfaf 198 Position of the menu on the menu bar, starting from zero.
3c4f71cc 199
d29a9a8a 200 @return The menu label, or the empty string if the menu was not found.
3c4f71cc 201
23324ae1 202 @remarks Use only after the menubar has been associated with a frame.
3c4f71cc 203
ba1d7a6c
FM
204 @deprecated
205 This function is deprecated in favour of GetMenuLabel() and GetMenuLabelText().
206
4cc4bfaf 207 @see SetLabelTop()
23324ae1 208 */
43c48e1e 209 wxString GetLabelTop(size_t pos) const;
23324ae1
FM
210
211 /**
4cc4bfaf 212 Returns the menu at @a menuIndex (zero-based).
23324ae1 213 */
43c48e1e 214 wxMenu* GetMenu(size_t menuIndex) const;
23324ae1
FM
215
216 /**
217 Returns the number of menus in this menubar.
218 */
328f5751 219 size_t GetMenuCount() const;
23324ae1
FM
220
221 /**
222 Returns the label of a top-level menu. Note that the returned string
223 includes the accelerator characters that have been specified in the menu
224 title string during its construction.
3c4f71cc 225
7c913512 226 @param pos
4cc4bfaf 227 Position of the menu on the menu bar, starting from zero.
3c4f71cc 228
d29a9a8a 229 @return The menu label, or the empty string if the menu was not found.
3c4f71cc 230
23324ae1 231 @remarks Use only after the menubar has been associated with a frame.
3c4f71cc 232
4cc4bfaf 233 @see GetMenuLabelText(), SetMenuLabel()
23324ae1 234 */
43c48e1e 235 virtual wxString GetMenuLabel(size_t pos) const;
23324ae1
FM
236
237 /**
238 Returns the label of a top-level menu. Note that the returned string does not
239 include any accelerator characters that may have been specified in the menu
240 title string during its construction.
3c4f71cc 241
7c913512 242 @param pos
4cc4bfaf 243 Position of the menu on the menu bar, starting from zero.
3c4f71cc 244
d29a9a8a 245 @return The menu label, or the empty string if the menu was not found.
3c4f71cc 246
23324ae1 247 @remarks Use only after the menubar has been associated with a frame.
3c4f71cc 248
4cc4bfaf 249 @see GetMenuLabel(), SetMenuLabel()
23324ae1 250 */
43c48e1e 251 virtual wxString GetMenuLabelText(size_t pos) const;
23324ae1
FM
252
253 /**
254 Inserts the menu at the given position into the menu bar. Inserting menu at
7c913512 255 position 0 will insert it in the very beginning of it, inserting at position
ba1d7a6c 256 GetMenuCount() is the same as calling Append().
3c4f71cc 257
7c913512 258 @param pos
4cc4bfaf 259 The position of the new menu in the menu bar
7c913512 260 @param menu
4cc4bfaf 261 The menu to add. wxMenuBar owns the menu and will free it.
7c913512 262 @param title
4cc4bfaf 263 The title of the menu.
3c4f71cc 264
d29a9a8a 265 @return @true on success, @false if an error occurred.
3c4f71cc 266
4cc4bfaf 267 @see Append()
23324ae1 268 */
adaaa686 269 virtual bool Insert(size_t pos, wxMenu* menu, const wxString& title);
23324ae1
FM
270
271 /**
272 Determines whether an item is checked.
3c4f71cc 273
7c913512 274 @param id
4cc4bfaf 275 The menu item identifier.
3c4f71cc 276
d29a9a8a 277 @return @true if the item was found and is checked, @false otherwise.
23324ae1 278 */
328f5751 279 bool IsChecked(int id) const;
23324ae1
FM
280
281 /**
282 Determines whether an item is enabled.
3c4f71cc 283
7c913512 284 @param id
4cc4bfaf 285 The menu item identifier.
3c4f71cc 286
d29a9a8a 287 @return @true if the item was found and is enabled, @false otherwise.
23324ae1 288 */
328f5751 289 bool IsEnabled(int id) const;
23324ae1
FM
290
291 /**
292 Redraw the menu bar
293 */
43c48e1e 294 virtual void Refresh(bool eraseBackground = true, const wxRect* rect = NULL);
23324ae1
FM
295
296 /**
ba1d7a6c
FM
297 Removes the menu from the menu bar and returns the menu object - the caller
298 is responsible for deleting it. This function may be used together with
299 Insert() to change the menubar dynamically.
3c4f71cc 300
4cc4bfaf 301 @see Replace()
23324ae1 302 */
adaaa686 303 virtual wxMenu* Remove(size_t pos);
23324ae1
FM
304
305 /**
306 Replaces the menu at the given position with another one.
3c4f71cc 307
7c913512 308 @param pos
4cc4bfaf 309 The position of the new menu in the menu bar
7c913512 310 @param menu
4cc4bfaf 311 The menu to add.
7c913512 312 @param title
4cc4bfaf 313 The title of the menu.
3c4f71cc 314
ba1d7a6c
FM
315 @return The menu which was previously at position pos.
316 The caller is responsible for deleting it.
3c4f71cc 317
4cc4bfaf 318 @see Insert(), Remove()
23324ae1 319 */
adaaa686 320 virtual wxMenu* Replace(size_t pos, wxMenu* menu, const wxString& title);
23324ae1
FM
321
322 /**
323 Sets the help string associated with a menu item.
3c4f71cc 324
7c913512 325 @param id
4cc4bfaf 326 Menu item identifier.
7c913512 327 @param helpString
4cc4bfaf 328 Help string to associate with the menu item.
3c4f71cc 329
4cc4bfaf 330 @see GetHelpString()
23324ae1
FM
331 */
332 void SetHelpString(int id, const wxString& helpString);
333
334 /**
335 Sets the label of a menu item.
3c4f71cc 336
7c913512 337 @param id
4cc4bfaf 338 Menu item identifier.
7c913512 339 @param label
4cc4bfaf 340 Menu item label.
3c4f71cc 341
23324ae1 342 @remarks Use only after the menubar has been associated with a frame.
3c4f71cc 343
4cc4bfaf 344 @see GetLabel()
23324ae1
FM
345 */
346 void SetLabel(int id, const wxString& label);
347
348 /**
349 Sets the label of a top-level menu.
3c4f71cc 350
7c913512 351 @param pos
4cc4bfaf 352 The position of a menu on the menu bar, starting from zero.
7c913512 353 @param label
4cc4bfaf 354 The menu label.
3c4f71cc 355
23324ae1 356 @remarks Use only after the menubar has been associated with a frame.
3c4f71cc 357
ba1d7a6c
FM
358 @deprecated
359 This function has been deprecated in favour of SetMenuLabel().
360
4cc4bfaf 361 @see GetLabelTop()
23324ae1 362 */
43c48e1e 363 void SetLabelTop(size_t pos, const wxString& label);
23324ae1
FM
364
365 /**
366 Sets the label of a top-level menu.
3c4f71cc 367
7c913512 368 @param pos
4cc4bfaf 369 The position of a menu on the menu bar, starting from zero.
7c913512 370 @param label
4cc4bfaf 371 The menu label.
3c4f71cc 372
23324ae1
FM
373 @remarks Use only after the menubar has been associated with a frame.
374 */
43c48e1e 375 virtual void SetMenuLabel(size_t pos, const wxString& label);
e9321277
RD
376
377 /**
378 Enables you to set the global menubar on Mac, that is, the menubar displayed
379 when the app is running without any frames open.
380
381 @param menubar
382 The menubar to set.
383
384 @remarks Only exists on Mac, other platforms do not have this method.
385 */
386 static void MacSetCommonMenuBar(wxMenuBar* menubar);
387
388 /**
389 Enables you to get the global menubar on Mac, that is, the menubar displayed
390 when the app is running without any frames open.
391
392 @return The global menubar.
393
394 @remarks Only exists on Mac, other platforms do not have this method.
395 */
396 static wxMenuBar* MacGetCommonMenuBar();
dbac5ccc
RD
397
398 wxFrame *GetFrame() const;
399 bool IsAttached() const;
400 virtual void Attach(wxFrame *frame);
401 virtual void Detach();
402
23324ae1
FM
403};
404
405
e54c96f1 406
23324ae1
FM
407/**
408 @class wxMenu
7c913512 409
23324ae1
FM
410 A menu is a popup (or pull down) list of items, one of which may be
411 selected before the menu goes away (clicking elsewhere dismisses the
412 menu). Menus may be used to construct either menu bars or popup menus.
7c913512 413
23324ae1
FM
414 A menu item has an integer ID associated with it which can be used to
415 identify the selection, or to change the menu item in some way. A menu item
0c466250
VZ
416 with a special identifier @e wxID_SEPARATOR is a separator item and doesn't
417 have an associated command but just makes a separator line appear in the
418 menu.
7c913512 419
ba1d7a6c
FM
420 @note
421 Please note that @e wxID_ABOUT and @e wxID_EXIT are predefined by wxWidgets
422 and have a special meaning since entries using these IDs will be taken out
423 of the normal menus under MacOS X and will be inserted into the system menu
424 (following the appropriate MacOS X interface guideline).
ba1d7a6c 425
c7e52709 426 Menu items may be either @e normal items, @e check items or @e radio items.
ba1d7a6c
FM
427 Normal items don't have any special properties while the check items have a
428 boolean flag associated to them and they show a checkmark in the menu when
429 the flag is set.
23324ae1 430 wxWidgets automatically toggles the flag value when the item is clicked and its
ba1d7a6c
FM
431 value may be retrieved using either wxMenu::IsChecked method of wxMenu or
432 wxMenuBar itself or by using wxEvent::IsChecked when you get the menu
23324ae1 433 notification for the item in question.
7c913512 434
23324ae1
FM
435 The radio items are similar to the check items except that all the other items
436 in the same radio group are unchecked when a radio item is checked. The radio
437 group is formed by a contiguous range of radio items, i.e. it starts at the
438 first item of this kind and ends with the first item of a different kind (or
439 the end of the menu). Notice that because the radio groups are defined in terms
440 of the item positions inserting or removing the items in the menu containing
c7e52709 441 the radio items risks to not work correctly.
7c913512 442
ba1d7a6c
FM
443
444 @section menu_allocation Allocation strategy
445
d16ba464
VZ
446 All menus must be created on the @b heap because all menus attached to a
447 menubar or to another menu will be deleted by their parent when it is
448 deleted. The only exception to this rule are the popup menus (i.e. menus
449 used with wxWindow::PopupMenu()) as wxWidgets does not destroy them to
450 allow reusing the same menu more than once. But the exception applies only
451 to the menus themselves and not to any submenus of popup menus which are
452 still destroyed by wxWidgets as usual and so must be heap-allocated.
c7e52709 453
ba1d7a6c
FM
454 As the frame menubar is deleted by the frame itself, it means that normally
455 all menus used are deleted automatically.
456
457
458 @section menu_eventhandling Event handling
459
460 If the menu is part of a menubar, then wxMenuBar event processing is used.
ba1d7a6c 461
c7e52709
FM
462 With a popup menu (see wxWindow::PopupMenu), there is a variety of ways to
463 handle a menu selection event (@c wxEVT_COMMAND_MENU_SELECTED):
464 - Provide @c EVT_MENU handlers in the window which pops up the menu, or in an
465 ancestor of that window (the simplest method);
466 - Derive a new class from wxMenu and define event table entries using the @c EVT_MENU macro;
467 - Set a new event handler for wxMenu, through wxEvtHandler::SetNextHandler,
468 specifying an object whose class has @c EVT_MENU entries;
469
470 Note that instead of static @c EVT_MENU macros you can also use dynamic
8d2d37d2 471 connection; see @ref overview_events_bind.
ba1d7a6c 472
23324ae1
FM
473 @library{wxcore}
474 @category{menus}
7c913512 475
3e083d65 476 @see wxMenuBar, wxWindow::PopupMenu, @ref overview_events,
ba1d7a6c 477 @ref wxFileHistory "wxFileHistory (most recently used files menu)"
23324ae1
FM
478*/
479class wxMenu : public wxEvtHandler
480{
481public:
8ff9b17d
RD
482
483 /**
484 Constructs a wxMenu object.
485 */
486 wxMenu();
487
23324ae1
FM
488 /**
489 Constructs a wxMenu object.
3c4f71cc 490
7c913512 491 @param style
4cc4bfaf 492 If set to wxMENU_TEAROFF, the menu will be detachable (wxGTK only).
23324ae1 493 */
7c913512 494 wxMenu(long style);
23324ae1 495
ff58644a 496 /**
ba1d7a6c 497 Constructs a wxMenu object with a title.
ff58644a
RR
498
499 @param title
500 Title at the top of the menu (not always supported).
501 @param style
502 If set to wxMENU_TEAROFF, the menu will be detachable (wxGTK only).
503 */
0a98423e 504 wxMenu(const wxString& title, long style = 0);
ba1d7a6c 505
23324ae1
FM
506 /**
507 Destructor, destroying the menu.
ba1d7a6c
FM
508
509 @note
510 Under Motif, a popup menu must have a valid parent (the window
511 it was last popped up on) when being destroyed. Therefore, make sure
512 you delete or re-use the popup menu @e before destroying the parent
513 window. Re-use in this context means popping up the menu on a different
514 window from last time, which causes an implicit destruction and
515 recreation of internal data structures.
23324ae1 516 */
adaaa686 517 virtual ~wxMenu();
23324ae1 518
23324ae1 519 /**
ba1d7a6c 520 Adds a menu item.
3c4f71cc 521
7c913512 522 @param id
4cc4bfaf 523 The menu command identifier.
7c913512 524 @param item
4cc4bfaf 525 The string to appear on the menu item.
7145bcfc 526 See wxMenuItem::SetItemLabel() for more details.
7c913512 527 @param helpString
4cc4bfaf 528 An optional help string associated with the item.
7145bcfc 529 By default, the handler for the @c wxEVT_MENU_HIGHLIGHT event displays
4cc4bfaf 530 this string in the status line.
54c49fab 531 @param kind
7145bcfc 532 May be @c wxITEM_SEPARATOR, @c wxITEM_NORMAL, @c wxITEM_CHECK or @c wxITEM_RADIO.
b871bb95 533
7145bcfc
FM
534 Example:
535 @code
536 m_pFileMenu->Append(ID_NEW_FILE, "&New file\tCTRL+N", "Creates a new XYZ document");
537 @endcode
538 or even better for stock menu items (see wxMenuItem::wxMenuItem):
539 @code
540 m_pFileMenu->Append(wxID_NEW, "", "Creates a new XYZ document");
541 @endcode
ba1d7a6c
FM
542
543 @remarks
544 This command can be used after the menu has been shown, as well as on
545 initial creation of a menu or menubar.
546
4cc4bfaf 547 @see AppendSeparator(), AppendCheckItem(), AppendRadioItem(),
ba1d7a6c
FM
548 AppendSubMenu(), Insert(), SetLabel(), GetHelpString(),
549 SetHelpString(), wxMenuItem
23324ae1 550 */
54c49fab
VZ
551 wxMenuItem* Append(int id, const wxString& item = wxEmptyString,
552 const wxString& helpString = wxEmptyString,
23324ae1 553 wxItemKind kind = wxITEM_NORMAL);
ba1d7a6c 554
ff58644a
RR
555 /**
556 Adds a submenu.
557
5dfae0ad 558 @deprecated This function is deprecated, use AppendSubMenu() instead.
54c49fab 559
ff58644a
RR
560 @param id
561 The menu command identifier.
562 @param item
563 The string to appear on the menu item.
54c49fab 564 @param subMenu
ff58644a
RR
565 Pull-right submenu.
566 @param helpString
567 An optional help string associated with the item.
3a194bda 568 By default, the handler for the @c wxEVT_MENU_HIGHLIGHT event displays
ff58644a
RR
569 this string in the status line.
570
571 @see AppendSeparator(), AppendCheckItem(), AppendRadioItem(),
ba1d7a6c
FM
572 AppendSubMenu(), Insert(), SetLabel(), GetHelpString(),
573 SetHelpString(), wxMenuItem
ff58644a 574 */
adaaa686 575 wxMenuItem* Append(int id, const wxString& item, wxMenu* subMenu,
54c49fab 576 const wxString& helpString = wxEmptyString);
ba1d7a6c 577
ff58644a 578 /**
ba1d7a6c
FM
579 Adds a menu item object.
580
581 This is the most generic variant of Append() method because it may be
582 used for both items (including separators) and submenus and because
583 you can also specify various extra properties of a menu item this way,
ff58644a
RR
584 such as bitmaps and fonts.
585
586 @param menuItem
ba1d7a6c
FM
587 A menuitem object. It will be owned by the wxMenu object after this
588 function is called, so do not delete it yourself.
589
590 @remarks
591 See the remarks for the other Append() overloads.
ff58644a
RR
592
593 @see AppendSeparator(), AppendCheckItem(), AppendRadioItem(),
ba1d7a6c
FM
594 AppendSubMenu(), Insert(), SetLabel(), GetHelpString(),
595 SetHelpString(), wxMenuItem
ff58644a 596 */
7c913512 597 wxMenuItem* Append(wxMenuItem* menuItem);
23324ae1
FM
598
599 /**
600 Adds a checkable item to the end of the menu.
3c4f71cc 601
4cc4bfaf 602 @see Append(), InsertCheckItem()
23324ae1
FM
603 */
604 wxMenuItem* AppendCheckItem(int id, const wxString& item,
43c48e1e 605 const wxString& help = wxEmptyString);
23324ae1
FM
606
607 /**
ba1d7a6c
FM
608 Adds a radio item to the end of the menu.
609 All consequent radio items form a group and when an item in the group is
610 checked, all the others are automatically unchecked.
3c4f71cc 611
c7e52709
FM
612 @note Radio items are not supported under wxMotif.
613
4cc4bfaf 614 @see Append(), InsertRadioItem()
23324ae1
FM
615 */
616 wxMenuItem* AppendRadioItem(int id, const wxString& item,
43c48e1e 617 const wxString& help = wxEmptyString);
23324ae1
FM
618
619 /**
620 Adds a separator to the end of the menu.
3c4f71cc 621
4cc4bfaf 622 @see Append(), InsertSeparator()
23324ae1
FM
623 */
624 wxMenuItem* AppendSeparator();
625
626 /**
4cc4bfaf
FM
627 Adds the given @a submenu to this menu. @a text is the text shown in the
628 menu for it and @a help is the help string shown in the status bar when the
23324ae1
FM
629 submenu item is selected.
630 */
4cc4bfaf
FM
631 wxMenuItem* AppendSubMenu(wxMenu* submenu, const wxString& text,
632 const wxString& help = wxEmptyString);
23324ae1
FM
633
634 /**
ba1d7a6c
FM
635 Inserts a break in a menu, causing the next appended item to appear in
636 a new column.
23324ae1 637 */
adaaa686 638 virtual void Break();
23324ae1
FM
639
640 /**
641 Checks or unchecks the menu item.
3c4f71cc 642
7c913512 643 @param id
4cc4bfaf 644 The menu item identifier.
7c913512 645 @param check
4cc4bfaf 646 If @true, the item will be checked, otherwise it will be unchecked.
3c4f71cc 647
4cc4bfaf 648 @see IsChecked()
23324ae1 649 */
43c48e1e 650 void Check(int id, bool check);
23324ae1 651
23324ae1
FM
652 /**
653 Deletes the menu item from the menu. If the item is a submenu, it will
ff58644a 654 @b not be deleted. Use Destroy() if you want to delete a submenu.
3c4f71cc 655
7c913512 656 @param id
4cc4bfaf 657 Id of the menu item to be deleted.
ff58644a
RR
658
659 @see FindItem(), Destroy(), Remove()
660 */
0a98423e 661 bool Delete(int id);
ff58644a
RR
662
663 /**
664 Deletes the menu item from the menu. If the item is a submenu, it will
665 @b not be deleted. Use Destroy() if you want to delete a submenu.
666
7c913512 667 @param item
4cc4bfaf 668 Menu item to be deleted.
3c4f71cc 669
4cc4bfaf 670 @see FindItem(), Destroy(), Remove()
23324ae1 671 */
0a98423e 672 bool Delete(wxMenuItem* item);
23324ae1 673
23324ae1
FM
674 /**
675 Deletes the menu item from the menu. If the item is a submenu, it will
ff58644a
RR
676 be deleted. Use Remove() if you want to keep the submenu (for example,
677 to reuse it later).
3c4f71cc 678
7c913512 679 @param id
4cc4bfaf 680 Id of the menu item to be deleted.
ff58644a 681
0c466250 682 @see FindItem(), Delete(), Remove()
ff58644a 683 */
0a98423e 684 bool Destroy(int id);
ff58644a
RR
685
686 /**
687 Deletes the menu item from the menu. If the item is a submenu, it will
688 be deleted. Use Remove() if you want to keep the submenu (for example,
689 to reuse it later).
690
7c913512 691 @param item
4cc4bfaf 692 Menu item to be deleted.
3c4f71cc 693
0c466250 694 @see FindItem(), Delete(), Remove()
23324ae1 695 */
0a98423e 696 bool Destroy(wxMenuItem* item);
23324ae1
FM
697
698 /**
699 Enables or disables (greys out) a menu item.
3c4f71cc 700
7c913512 701 @param id
4cc4bfaf 702 The menu item identifier.
7c913512 703 @param enable
4cc4bfaf 704 @true to enable the menu item, @false to disable it.
3c4f71cc 705
4cc4bfaf 706 @see IsEnabled()
23324ae1 707 */
43c48e1e 708 void Enable(int id, bool enable);
23324ae1 709
7b2e024e
VZ
710 /**
711 Finds the menu item object associated with the given menu item identifier
712 and, optionally, the position of the item in the menu.
713
714 Unlike FindItem(), this function doesn't recurse but only looks at the
715 direct children of this menu.
716
717 @param id
718 The identifier of the menu item to find.
719 @param pos
720 If the pointer is not @NULL, it is filled with the item's position if
721 it was found or @c (size_t)wxNOT_FOUND otherwise.
722 @return
723 Menu item object or @NULL if not found.
724 */
725 wxMenuItem *FindChildItem(int id, size_t *pos = NULL) const;
726
23324ae1 727 /**
ff58644a 728 Finds the menu id for a menu item string.
3c4f71cc 729
7c913512 730 @param itemString
4cc4bfaf 731 Menu item string to find.
ff58644a 732
d29a9a8a 733 @return Menu item identifier, or wxNOT_FOUND if none is found.
ff58644a
RR
734
735 @remarks Any special menu codes are stripped out of source and target
736 strings before matching.
737 */
adaaa686 738 virtual int FindItem(const wxString& itemString) const;
ff58644a
RR
739
740 /**
741 Finds the menu item object associated with the given menu item identifier and,
742 optionally, the (sub)menu it belongs to.
743
7c913512 744 @param id
4cc4bfaf 745 Menu item identifier.
7c913512 746 @param menu
4cc4bfaf
FM
747 If the pointer is not @NULL, it will be filled with the item's
748 parent menu (if the item was found)
3c4f71cc 749
d29a9a8a 750 @return Menu item object or NULL if none is found.
23324ae1 751 */
0a98423e 752 wxMenuItem* FindItem(int id, wxMenu** menu = NULL) const;
23324ae1
FM
753
754 /**
755 Returns the wxMenuItem given a position in the menu.
756 */
328f5751 757 wxMenuItem* FindItemByPosition(size_t position) const;
23324ae1
FM
758
759 /**
760 Returns the help string associated with a menu item.
3c4f71cc 761
7c913512 762 @param id
4cc4bfaf 763 The menu item identifier.
3c4f71cc 764
d29a9a8a
BP
765 @return The help string, or the empty string if there is no help string
766 or the item was not found.
3c4f71cc 767
4cc4bfaf 768 @see SetHelpString(), Append()
23324ae1 769 */
adaaa686 770 virtual wxString GetHelpString(int id) const;
23324ae1
FM
771
772 /**
773 Returns a menu item label.
3c4f71cc 774
7c913512 775 @param id
4cc4bfaf 776 The menu item identifier.
3c4f71cc 777
d29a9a8a 778 @return The item label, or the empty string if the item was not found.
3c4f71cc 779
4cc4bfaf 780 @see GetLabelText(), SetLabel()
23324ae1 781 */
328f5751 782 wxString GetLabel(int id) const;
23324ae1
FM
783
784 /**
785 Returns a menu item label, without any of the original mnemonics and
786 accelerators.
3c4f71cc 787
7c913512 788 @param id
4cc4bfaf 789 The menu item identifier.
3c4f71cc 790
d29a9a8a 791 @return The item label, or the empty string if the item was not found.
3c4f71cc 792
4cc4bfaf 793 @see GetLabel(), SetLabel()
23324ae1 794 */
328f5751 795 wxString GetLabelText(int id) const;
23324ae1
FM
796
797 /**
798 Returns the number of items in the menu.
799 */
328f5751 800 size_t GetMenuItemCount() const;
23324ae1 801
0a98423e 802 //@{
23324ae1 803 /**
ba1d7a6c
FM
804 Returns the list of items in the menu.
805
806 wxMenuItemList is a pseudo-template list class containing wxMenuItem
807 pointers, see wxList.
23324ae1 808 */
0a98423e
FM
809 wxMenuItemList& GetMenuItems() const;
810 const wxMenuItemList& GetMenuItems() const;
811 //@}
23324ae1
FM
812
813 /**
814 Returns the title of the menu.
3c4f71cc 815
4cc4bfaf 816 @see SetTitle()
23324ae1 817 */
43c48e1e 818 const wxString& GetTitle() const;
23324ae1 819
23324ae1 820 /**
ba1d7a6c
FM
821 Inserts the given @a item before the position @a pos.
822
823 Inserting the item at position GetMenuItemCount() is the same
23324ae1 824 as appending it.
3c4f71cc 825
4cc4bfaf 826 @see Append(), Prepend()
23324ae1 827 */
e9321277 828 wxMenuItem* Insert(size_t pos, wxMenuItem* menuItem);
ba1d7a6c 829
ff58644a 830 /**
ba1d7a6c
FM
831 Inserts the given @a item before the position @a pos.
832
833 Inserting the item at position GetMenuItemCount() is the same
ff58644a
RR
834 as appending it.
835
836 @see Append(), Prepend()
837 */
7c913512 838 wxMenuItem* Insert(size_t pos, int id,
0a98423e
FM
839 const wxString& item = wxEmptyString,
840 const wxString& helpString = wxEmptyString,
7c913512 841 wxItemKind kind = wxITEM_NORMAL);
23324ae1
FM
842
843 /**
844 Inserts a checkable item at the given position.
3c4f71cc 845
4cc4bfaf 846 @see Insert(), AppendCheckItem()
23324ae1 847 */
43c48e1e
FM
848 wxMenuItem* InsertCheckItem(size_t pos, int id, const wxString& item,
849 const wxString& helpString = wxEmptyString);
23324ae1
FM
850
851 /**
852 Inserts a radio item at the given position.
3c4f71cc 853
4cc4bfaf 854 @see Insert(), AppendRadioItem()
23324ae1 855 */
43c48e1e
FM
856 wxMenuItem* InsertRadioItem(size_t pos, int id, const wxString& item,
857 const wxString& helpString = wxEmptyString);
23324ae1
FM
858
859 /**
860 Inserts a separator at the given position.
3c4f71cc 861
4cc4bfaf 862 @see Insert(), AppendSeparator()
23324ae1
FM
863 */
864 wxMenuItem* InsertSeparator(size_t pos);
865
866 /**
867 Determines whether a menu item is checked.
3c4f71cc 868
7c913512 869 @param id
4cc4bfaf 870 The menu item identifier.
3c4f71cc 871
d29a9a8a 872 @return @true if the menu item is checked, @false otherwise.
3c4f71cc 873
4cc4bfaf 874 @see Check()
23324ae1 875 */
328f5751 876 bool IsChecked(int id) const;
23324ae1
FM
877
878 /**
879 Determines whether a menu item is enabled.
3c4f71cc 880
7c913512 881 @param id
4cc4bfaf 882 The menu item identifier.
3c4f71cc 883
d29a9a8a 884 @return @true if the menu item is enabled, @false otherwise.
3c4f71cc 885
4cc4bfaf 886 @see Enable()
23324ae1 887 */
328f5751 888 bool IsEnabled(int id) const;
23324ae1 889
23324ae1 890 /**
4cc4bfaf 891 Inserts the given @a item at position 0, i.e. before all the other
23324ae1 892 existing items.
3c4f71cc 893
4cc4bfaf 894 @see Append(), Insert()
23324ae1 895 */
4cc4bfaf 896 wxMenuItem* Prepend(wxMenuItem* item);
ff58644a
RR
897
898 /**
899 Inserts the given @a item at position 0, i.e. before all the other
900 existing items.
901
902 @see Append(), Insert()
903 */
0a98423e
FM
904 wxMenuItem* Prepend(int id, const wxString& item = wxEmptyString,
905 const wxString& helpString = wxEmptyString,
7c913512 906 wxItemKind kind = wxITEM_NORMAL);
23324ae1
FM
907
908 /**
909 Inserts a checkable item at position 0.
3c4f71cc 910
4cc4bfaf 911 @see Prepend(), AppendCheckItem()
23324ae1
FM
912 */
913 wxMenuItem* PrependCheckItem(int id, const wxString& item,
43c48e1e 914 const wxString& helpString = wxEmptyString);
23324ae1
FM
915
916 /**
917 Inserts a radio item at position 0.
3c4f71cc 918
4cc4bfaf 919 @see Prepend(), AppendRadioItem()
23324ae1
FM
920 */
921 wxMenuItem* PrependRadioItem(int id, const wxString& item,
43c48e1e 922 const wxString& helpString = wxEmptyString);
23324ae1
FM
923
924 /**
925 Inserts a separator at position 0.
3c4f71cc 926
4cc4bfaf 927 @see Prepend(), AppendSeparator()
23324ae1
FM
928 */
929 wxMenuItem* PrependSeparator();
930
23324ae1
FM
931 /**
932 Removes the menu item from the menu but doesn't delete the associated C++
ba1d7a6c
FM
933 object. This allows you to reuse the same item later by adding it back to
934 the menu (especially useful with submenus).
3c4f71cc 935
7c913512 936 @param id
4cc4bfaf 937 The identifier of the menu item to remove.
ff58644a 938
5dfae0ad 939 @return A pointer to the item which was detached from the menu.
ff58644a
RR
940 */
941 wxMenuItem* Remove(int id);
ba1d7a6c 942
ff58644a
RR
943 /**
944 Removes the menu item from the menu but doesn't delete the associated C++
ba1d7a6c
FM
945 object. This allows you to reuse the same item later by adding it back to
946 the menu (especially useful with submenus).
ff58644a 947
7c913512 948 @param item
4cc4bfaf 949 The menu item to remove.
3c4f71cc 950
5dfae0ad 951 @return A pointer to the item which was detached from the menu.
23324ae1 952 */
4cc4bfaf 953 wxMenuItem* Remove(wxMenuItem* item);
23324ae1
FM
954
955 /**
956 Sets an item's help string.
3c4f71cc 957
7c913512 958 @param id
4cc4bfaf 959 The menu item identifier.
7c913512 960 @param helpString
4cc4bfaf 961 The help string to set.
3c4f71cc 962
4cc4bfaf 963 @see GetHelpString()
23324ae1 964 */
adaaa686 965 virtual void SetHelpString(int id, const wxString& helpString);
23324ae1
FM
966
967 /**
968 Sets the label of a menu item.
3c4f71cc 969
7c913512 970 @param id
4cc4bfaf 971 The menu item identifier.
7c913512 972 @param label
4cc4bfaf 973 The menu item label to set.
3c4f71cc 974
4cc4bfaf 975 @see Append(), GetLabel()
23324ae1
FM
976 */
977 void SetLabel(int id, const wxString& label);
978
979 /**
980 Sets the title of the menu.
3c4f71cc 981
7c913512 982 @param title
4cc4bfaf 983 The title to set.
3c4f71cc 984
a302a5ca
VZ
985 @remarks Notice that you can only call this method directly for the
986 popup menus, to change the title of a menu that is part of a menu
987 bar you need to use wxMenuBar::SetLabelTop().
3c4f71cc 988
4cc4bfaf 989 @see GetTitle()
23324ae1 990 */
adaaa686 991 virtual void SetTitle(const wxString& title);
23324ae1
FM
992
993 /**
4cc4bfaf 994 Sends events to @a source (or owning window if @NULL) to update the
ba1d7a6c
FM
995 menu UI.
996
997 This is called just before the menu is popped up with wxWindow::PopupMenu,
998 but the application may call it at other times if required.
23324ae1 999 */
adaaa686 1000 void UpdateUI(wxEvtHandler* source = NULL);
dbac5ccc
RD
1001
1002
1003 void SetInvokingWindow(wxWindow *win);
1004 wxWindow *GetInvokingWindow() const;
1005 wxWindow *GetWindow() const;
1006 long GetStyle() const;
1007 void SetParent(wxMenu *parent);
1008 wxMenu *GetParent() const;
1009
1010 virtual void Attach(wxMenuBar *menubar);
1011 virtual void Detach();
1012 bool IsAttached() const;
1013
23324ae1 1014};
e54c96f1 1015