]>
git.saurik.com Git - wxWidgets.git/blob - interface/wx/menu.h
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: interface of wxMenuBar
4 // Author: wxWidgets team
6 // Licence: wxWindows licence
7 /////////////////////////////////////////////////////////////////////////////
12 A menu bar is a series of menus accessible from the top of a frame.
15 To respond to a menu selection, provide a handler for EVT_MENU, in the frame
16 that contains the menu bar.
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.
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.
30 @see wxMenu, @ref overview_events
32 class wxMenuBar
: public wxWindow
36 Construct an empty menu bar.
39 If wxMB_DOCKABLE the menu bar can be detached (wxGTK only).
41 wxMenuBar(long style
= 0);
44 Construct a menu bar from arrays of menus and titles.
49 An array of menus. Do not use this array again - it now belongs to
52 An array of title strings. Deallocate this array after creating
55 If wxMB_DOCKABLE the menu bar can be detached (wxGTK only).
58 Not supported by wxPerl.
61 wxMenuBar(size_t n
, wxMenu
* menus
[], const wxString titles
[],
65 Destructor, destroying the menu bar and removing it from the parent
71 Adds the item to the end of the menu bar.
74 The menu to add. Do not deallocate this menu after calling Append().
76 The title of the menu, must be non-empty.
78 @return @true on success, @false if an error occurred.
82 virtual bool Append(wxMenu
* menu
, const wxString
& title
);
85 Checks or unchecks a menu item.
88 The menu item identifier.
90 If @true, checks the menu item, otherwise the item is unchecked.
92 @remarks Only use this when the menu bar has been associated with a
93 frame; otherwise, use the wxMenu equivalent call.
95 void Check(int id
, bool check
);
98 Enables or disables (greys out) a menu item.
101 The menu item identifier.
103 @true to enable the item, @false to disable it.
105 @remarks Only use this when the menu bar has been associated with a
106 frame; otherwise, use the wxMenu equivalent call.
108 void Enable(int id
, bool enable
);
111 Returns true if the menu with the given index is enabled.
114 The menu position (0-based)
118 bool IsEnabledTop(size_t pos
) const;
121 Enables or disables a whole menu.
124 The position of the menu, starting from zero.
126 @true to enable the menu, @false to disable it.
128 @remarks Only use this when the menu bar has been associated with a frame.
130 virtual void EnableTop(size_t pos
, bool enable
);
133 Finds the menu item object associated with the given menu item identifier.
136 Menu item identifier.
138 If not @NULL, menu will get set to the associated menu.
140 @return The found menu item object, or @NULL if one was not found.
143 In wxPerl this method takes just the @a id parameter;
144 in scalar context it returns the associated @c Wx::MenuItem, in list
145 context it returns a 2-element list (item, submenu).
148 virtual wxMenuItem
* FindItem(int id
, wxMenu
** menu
= NULL
) const;
151 Returns the index of the menu with the given @a title or @c wxNOT_FOUND if no
152 such menu exists in this menubar.
154 The @a title parameter may specify either the menu title
155 (with accelerator characters, i.e. @c "&File") or just the
156 menu label (@c "File") indifferently.
158 int FindMenu(const wxString
& title
) const;
161 Finds the menu item id for a menu name/menu item string pair.
168 @return The menu item identifier, or wxNOT_FOUND if none was found.
170 @remarks Any special menu codes are stripped out of source and target
171 strings before matching.
173 virtual int FindMenuItem(const wxString
& menuString
,
174 const wxString
& itemString
) const;
177 Gets the help string associated with the menu item identifier.
180 The menu item identifier.
182 @return The help string, or the empty string if there was no help string
183 or the menu item was not found.
187 wxString
GetHelpString(int id
) const;
190 Gets the label associated with a menu item.
193 The menu item identifier.
195 @return The menu item label, or the empty string if the item was not
198 @remarks Use only after the menubar has been associated with a frame.
200 wxString
GetLabel(int id
) const;
203 Returns the label of a top-level menu. Note that the returned string does not
204 include the accelerator characters which could have been specified in the menu
205 title string during its construction.
208 Position of the menu on the menu bar, starting from zero.
210 @return The menu label, or the empty string if the menu was not found.
212 @remarks Use only after the menubar has been associated with a frame.
215 This function is deprecated in favour of GetMenuLabel() and GetMenuLabelText().
219 wxString
GetLabelTop(size_t pos
) const;
222 Returns the menu at @a menuIndex (zero-based).
224 wxMenu
* GetMenu(size_t menuIndex
) const;
227 Returns the number of menus in this menubar.
229 size_t GetMenuCount() const;
232 Returns the label of a top-level menu. Note that the returned string
233 includes the accelerator characters that have been specified in the menu
234 title string during its construction.
237 Position of the menu on the menu bar, starting from zero.
239 @return The menu label, or the empty string if the menu was not found.
241 @remarks Use only after the menubar has been associated with a frame.
243 @see GetMenuLabelText(), SetMenuLabel()
245 virtual wxString
GetMenuLabel(size_t pos
) const;
248 Returns the label of a top-level menu. Note that the returned string does not
249 include any accelerator characters that may have been specified in the menu
250 title string during its construction.
253 Position of the menu on the menu bar, starting from zero.
255 @return The menu label, or the empty string if the menu was not found.
257 @remarks Use only after the menubar has been associated with a frame.
259 @see GetMenuLabel(), SetMenuLabel()
261 virtual wxString
GetMenuLabelText(size_t pos
) const;
264 Inserts the menu at the given position into the menu bar. Inserting menu at
265 position 0 will insert it in the very beginning of it, inserting at position
266 GetMenuCount() is the same as calling Append().
269 The position of the new menu in the menu bar
271 The menu to add. wxMenuBar owns the menu and will free it.
273 The title of the menu.
275 @return @true on success, @false if an error occurred.
279 virtual bool Insert(size_t pos
, wxMenu
* menu
, const wxString
& title
);
282 Determines whether an item is checked.
285 The menu item identifier.
287 @return @true if the item was found and is checked, @false otherwise.
289 bool IsChecked(int id
) const;
292 Determines whether an item is enabled.
295 The menu item identifier.
297 @return @true if the item was found and is enabled, @false otherwise.
299 bool IsEnabled(int id
) const;
304 virtual void Refresh(bool eraseBackground
= true, const wxRect
* rect
= NULL
);
307 Removes the menu from the menu bar and returns the menu object - the caller
308 is responsible for deleting it. This function may be used together with
309 Insert() to change the menubar dynamically.
313 virtual wxMenu
* Remove(size_t pos
);
316 Replaces the menu at the given position with another one.
319 The position of the new menu in the menu bar
323 The title of the menu.
325 @return The menu which was previously at position pos.
326 The caller is responsible for deleting it.
328 @see Insert(), Remove()
330 virtual wxMenu
* Replace(size_t pos
, wxMenu
* menu
, const wxString
& title
);
333 Sets the help string associated with a menu item.
336 Menu item identifier.
338 Help string to associate with the menu item.
342 void SetHelpString(int id
, const wxString
& helpString
);
345 Sets the label of a menu item.
348 Menu item identifier.
352 @remarks Use only after the menubar has been associated with a frame.
356 void SetLabel(int id
, const wxString
& label
);
359 Sets the label of a top-level menu.
362 The position of a menu on the menu bar, starting from zero.
366 @remarks Use only after the menubar has been associated with a frame.
369 This function has been deprecated in favour of SetMenuLabel().
373 void SetLabelTop(size_t pos
, const wxString
& label
);
376 Sets the label of a top-level menu.
379 The position of a menu on the menu bar, starting from zero.
383 @remarks Use only after the menubar has been associated with a frame.
385 virtual void SetMenuLabel(size_t pos
, const wxString
& label
);
388 Enables you to set the global menubar on Mac, that is, the menubar displayed
389 when the app is running without any frames open.
394 @remarks Only exists on Mac, other platforms do not have this method.
396 static void MacSetCommonMenuBar(wxMenuBar
* menubar
);
399 Enables you to get the global menubar on Mac, that is, the menubar displayed
400 when the app is running without any frames open.
402 @return The global menubar.
404 @remarks Only exists on Mac, other platforms do not have this method.
406 static wxMenuBar
* MacGetCommonMenuBar();
408 wxFrame
*GetFrame() const;
409 bool IsAttached() const;
410 virtual void Attach(wxFrame
*frame
);
411 virtual void Detach();
420 A menu is a popup (or pull down) list of items, one of which may be
421 selected before the menu goes away (clicking elsewhere dismisses the
422 menu). Menus may be used to construct either menu bars or popup menus.
424 A menu item has an integer ID associated with it which can be used to
425 identify the selection, or to change the menu item in some way. A menu item
426 with a special identifier @e wxID_SEPARATOR is a separator item and doesn't
427 have an associated command but just makes a separator line appear in the
431 Please note that @e wxID_ABOUT and @e wxID_EXIT are predefined by wxWidgets
432 and have a special meaning since entries using these IDs will be taken out
433 of the normal menus under MacOS X and will be inserted into the system menu
434 (following the appropriate MacOS X interface guideline).
436 Menu items may be either @e normal items, @e check items or @e radio items.
437 Normal items don't have any special properties while the check items have a
438 boolean flag associated to them and they show a checkmark in the menu when
440 wxWidgets automatically toggles the flag value when the item is clicked and its
441 value may be retrieved using either wxMenu::IsChecked method of wxMenu or
442 wxMenuBar itself or by using wxEvent::IsChecked when you get the menu
443 notification for the item in question.
445 The radio items are similar to the check items except that all the other items
446 in the same radio group are unchecked when a radio item is checked. The radio
447 group is formed by a contiguous range of radio items, i.e. it starts at the
448 first item of this kind and ends with the first item of a different kind (or
449 the end of the menu). Notice that because the radio groups are defined in terms
450 of the item positions inserting or removing the items in the menu containing
451 the radio items risks to not work correctly.
454 @section menu_allocation Allocation strategy
456 All menus must be created on the @b heap because all menus attached to a
457 menubar or to another menu will be deleted by their parent when it is
458 deleted. The only exception to this rule are the popup menus (i.e. menus
459 used with wxWindow::PopupMenu()) as wxWidgets does not destroy them to
460 allow reusing the same menu more than once. But the exception applies only
461 to the menus themselves and not to any submenus of popup menus which are
462 still destroyed by wxWidgets as usual and so must be heap-allocated.
464 As the frame menubar is deleted by the frame itself, it means that normally
465 all menus used are deleted automatically.
468 @section menu_eventhandling Event handling
470 If the menu is part of a menubar, then wxMenuBar event processing is used.
472 With a popup menu (see wxWindow::PopupMenu), there is a variety of ways to
473 handle a menu selection event (@c wxEVT_COMMAND_MENU_SELECTED):
474 - Provide @c EVT_MENU handlers in the window which pops up the menu, or in an
475 ancestor of that window (the simplest method);
476 - Derive a new class from wxMenu and define event table entries using the @c EVT_MENU macro;
477 - Set a new event handler for wxMenu, through wxEvtHandler::SetNextHandler,
478 specifying an object whose class has @c EVT_MENU entries;
480 Note that instead of static @c EVT_MENU macros you can also use dynamic
481 connection; see @ref overview_events_bind.
486 @see wxMenuBar, wxWindow::PopupMenu, @ref overview_events,
487 @ref wxFileHistory "wxFileHistory (most recently used files menu)"
489 class wxMenu
: public wxEvtHandler
494 Constructs a wxMenu object.
499 Constructs a wxMenu object.
502 If set to wxMENU_TEAROFF, the menu will be detachable (wxGTK only).
507 Constructs a wxMenu object with a title.
510 Title at the top of the menu (not always supported).
512 If set to wxMENU_TEAROFF, the menu will be detachable (wxGTK only).
514 wxMenu(const wxString
& title
, long style
= 0);
517 Destructor, destroying the menu.
520 Under Motif, a popup menu must have a valid parent (the window
521 it was last popped up on) when being destroyed. Therefore, make sure
522 you delete or re-use the popup menu @e before destroying the parent
523 window. Re-use in this context means popping up the menu on a different
524 window from last time, which causes an implicit destruction and
525 recreation of internal data structures.
533 The menu command identifier.
535 The string to appear on the menu item.
536 See wxMenuItem::SetItemLabel() for more details.
538 An optional help string associated with the item.
539 By default, the handler for the @c wxEVT_MENU_HIGHLIGHT event displays
540 this string in the status line.
542 May be @c wxITEM_SEPARATOR, @c wxITEM_NORMAL, @c wxITEM_CHECK or @c wxITEM_RADIO.
546 m_pFileMenu->Append(ID_NEW_FILE, "&New file\tCTRL+N", "Creates a new XYZ document");
548 or even better for stock menu items (see wxMenuItem::wxMenuItem):
550 m_pFileMenu->Append(wxID_NEW, "", "Creates a new XYZ document");
554 This command can be used after the menu has been shown, as well as on
555 initial creation of a menu or menubar.
557 @see AppendSeparator(), AppendCheckItem(), AppendRadioItem(),
558 AppendSubMenu(), Insert(), SetLabel(), GetHelpString(),
559 SetHelpString(), wxMenuItem
561 wxMenuItem
* Append(int id
, const wxString
& item
= wxEmptyString
,
562 const wxString
& helpString
= wxEmptyString
,
563 wxItemKind kind
= wxITEM_NORMAL
);
568 @deprecated This function is deprecated, use AppendSubMenu() instead.
571 The menu command identifier.
573 The string to appear on the menu item.
577 An optional help string associated with the item.
578 By default, the handler for the @c wxEVT_MENU_HIGHLIGHT event displays
579 this string in the status line.
581 @see AppendSeparator(), AppendCheckItem(), AppendRadioItem(),
582 AppendSubMenu(), Insert(), SetLabel(), GetHelpString(),
583 SetHelpString(), wxMenuItem
585 wxMenuItem
* Append(int id
, const wxString
& item
, wxMenu
* subMenu
,
586 const wxString
& helpString
= wxEmptyString
);
589 Adds a menu item object.
591 This is the most generic variant of Append() method because it may be
592 used for both items (including separators) and submenus and because
593 you can also specify various extra properties of a menu item this way,
594 such as bitmaps and fonts.
597 A menuitem object. It will be owned by the wxMenu object after this
598 function is called, so do not delete it yourself.
601 See the remarks for the other Append() overloads.
603 @see AppendSeparator(), AppendCheckItem(), AppendRadioItem(),
604 AppendSubMenu(), Insert(), SetLabel(), GetHelpString(),
605 SetHelpString(), wxMenuItem
607 wxMenuItem
* Append(wxMenuItem
* menuItem
);
610 Adds a checkable item to the end of the menu.
612 @see Append(), InsertCheckItem()
614 wxMenuItem
* AppendCheckItem(int id
, const wxString
& item
,
615 const wxString
& help
= wxEmptyString
);
618 Adds a radio item to the end of the menu.
619 All consequent radio items form a group and when an item in the group is
620 checked, all the others are automatically unchecked.
622 @note Radio items are not supported under wxMotif.
624 @see Append(), InsertRadioItem()
626 wxMenuItem
* AppendRadioItem(int id
, const wxString
& item
,
627 const wxString
& help
= wxEmptyString
);
630 Adds a separator to the end of the menu.
632 @see Append(), InsertSeparator()
634 wxMenuItem
* AppendSeparator();
637 Adds the given @a submenu to this menu. @a text is the text shown in the
638 menu for it and @a help is the help string shown in the status bar when the
639 submenu item is selected.
641 wxMenuItem
* AppendSubMenu(wxMenu
* submenu
, const wxString
& text
,
642 const wxString
& help
= wxEmptyString
);
645 Inserts a break in a menu, causing the next appended item to appear in
648 virtual void Break();
651 Checks or unchecks the menu item.
654 The menu item identifier.
656 If @true, the item will be checked, otherwise it will be unchecked.
660 void Check(int id
, bool check
);
663 Deletes the menu item from the menu. If the item is a submenu, it will
664 @b not be deleted. Use Destroy() if you want to delete a submenu.
667 Id of the menu item to be deleted.
669 @see FindItem(), Destroy(), Remove()
674 Deletes the menu item from the menu. If the item is a submenu, it will
675 @b not be deleted. Use Destroy() if you want to delete a submenu.
678 Menu item to be deleted.
680 @see FindItem(), Destroy(), Remove()
682 bool Delete(wxMenuItem
* item
);
685 Deletes the menu item from the menu. If the item is a submenu, it will
686 be deleted. Use Remove() if you want to keep the submenu (for example,
690 Id of the menu item to be deleted.
692 @see FindItem(), Delete(), Remove()
694 bool Destroy(int id
);
697 Deletes the menu item from the menu. If the item is a submenu, it will
698 be deleted. Use Remove() if you want to keep the submenu (for example,
702 Menu item to be deleted.
704 @see FindItem(), Delete(), Remove()
706 bool Destroy(wxMenuItem
* item
);
709 Enables or disables (greys out) a menu item.
712 The menu item identifier.
714 @true to enable the menu item, @false to disable it.
718 void Enable(int id
, bool enable
);
721 Finds the menu item object associated with the given menu item identifier
722 and, optionally, the position of the item in the menu.
724 Unlike FindItem(), this function doesn't recurse but only looks at the
725 direct children of this menu.
728 The identifier of the menu item to find.
730 If the pointer is not @NULL, it is filled with the item's position if
731 it was found or @c (size_t)wxNOT_FOUND otherwise.
733 Menu item object or @NULL if not found.
735 wxMenuItem
*FindChildItem(int id
, size_t *pos
= NULL
) const;
738 Finds the menu id for a menu item string.
741 Menu item string to find.
743 @return Menu item identifier, or wxNOT_FOUND if none is found.
745 @remarks Any special menu codes are stripped out of source and target
746 strings before matching.
748 virtual int FindItem(const wxString
& itemString
) const;
751 Finds the menu item object associated with the given menu item identifier and,
752 optionally, the (sub)menu it belongs to.
755 Menu item identifier.
757 If the pointer is not @NULL, it will be filled with the item's
758 parent menu (if the item was found)
760 @return Menu item object or NULL if none is found.
762 wxMenuItem
* FindItem(int id
, wxMenu
** menu
= NULL
) const;
765 Returns the wxMenuItem given a position in the menu.
767 wxMenuItem
* FindItemByPosition(size_t position
) const;
770 Returns the help string associated with a menu item.
773 The menu item identifier.
775 @return The help string, or the empty string if there is no help string
776 or the item was not found.
778 @see SetHelpString(), Append()
780 virtual wxString
GetHelpString(int id
) const;
783 Returns a menu item label.
786 The menu item identifier.
788 @return The item label, or the empty string if the item was not found.
790 @see GetLabelText(), SetLabel()
792 wxString
GetLabel(int id
) const;
795 Returns a menu item label, without any of the original mnemonics and
799 The menu item identifier.
801 @return The item label, or the empty string if the item was not found.
803 @see GetLabel(), SetLabel()
805 wxString
GetLabelText(int id
) const;
808 Returns the number of items in the menu.
810 size_t GetMenuItemCount() const;
814 Returns the list of items in the menu.
816 wxMenuItemList is a pseudo-template list class containing wxMenuItem
817 pointers, see wxList.
819 wxMenuItemList
& GetMenuItems() const;
820 const wxMenuItemList
& GetMenuItems() const;
824 Returns the title of the menu.
828 const wxString
& GetTitle() const;
831 Inserts the given @a item before the position @a pos.
833 Inserting the item at position GetMenuItemCount() is the same
836 @see Append(), Prepend()
838 wxMenuItem
* Insert(size_t pos
, wxMenuItem
* menuItem
);
841 Inserts the given @a item before the position @a pos.
843 Inserting the item at position GetMenuItemCount() is the same
846 @see Append(), Prepend()
848 wxMenuItem
* Insert(size_t pos
, int id
,
849 const wxString
& item
= wxEmptyString
,
850 const wxString
& helpString
= wxEmptyString
,
851 wxItemKind kind
= wxITEM_NORMAL
);
854 Inserts a checkable item at the given position.
856 @see Insert(), AppendCheckItem()
858 wxMenuItem
* InsertCheckItem(size_t pos
, int id
, const wxString
& item
,
859 const wxString
& helpString
= wxEmptyString
);
862 Inserts a radio item at the given position.
864 @see Insert(), AppendRadioItem()
866 wxMenuItem
* InsertRadioItem(size_t pos
, int id
, const wxString
& item
,
867 const wxString
& helpString
= wxEmptyString
);
870 Inserts a separator at the given position.
872 @see Insert(), AppendSeparator()
874 wxMenuItem
* InsertSeparator(size_t pos
);
877 Determines whether a menu item is checked.
880 The menu item identifier.
882 @return @true if the menu item is checked, @false otherwise.
886 bool IsChecked(int id
) const;
889 Determines whether a menu item is enabled.
892 The menu item identifier.
894 @return @true if the menu item is enabled, @false otherwise.
898 bool IsEnabled(int id
) const;
901 Inserts the given @a item at position 0, i.e. before all the other
904 @see Append(), Insert()
906 wxMenuItem
* Prepend(wxMenuItem
* item
);
909 Inserts the given @a item at position 0, i.e. before all the other
912 @see Append(), Insert()
914 wxMenuItem
* Prepend(int id
, const wxString
& item
= wxEmptyString
,
915 const wxString
& helpString
= wxEmptyString
,
916 wxItemKind kind
= wxITEM_NORMAL
);
919 Inserts a checkable item at position 0.
921 @see Prepend(), AppendCheckItem()
923 wxMenuItem
* PrependCheckItem(int id
, const wxString
& item
,
924 const wxString
& helpString
= wxEmptyString
);
927 Inserts a radio item at position 0.
929 @see Prepend(), AppendRadioItem()
931 wxMenuItem
* PrependRadioItem(int id
, const wxString
& item
,
932 const wxString
& helpString
= wxEmptyString
);
935 Inserts a separator at position 0.
937 @see Prepend(), AppendSeparator()
939 wxMenuItem
* PrependSeparator();
942 Removes the menu item from the menu but doesn't delete the associated C++
943 object. This allows you to reuse the same item later by adding it back to
944 the menu (especially useful with submenus).
947 The identifier of the menu item to remove.
949 @return A pointer to the item which was detached from the menu.
951 wxMenuItem
* Remove(int id
);
954 Removes the menu item from the menu but doesn't delete the associated C++
955 object. This allows you to reuse the same item later by adding it back to
956 the menu (especially useful with submenus).
959 The menu item to remove.
961 @return A pointer to the item which was detached from the menu.
963 wxMenuItem
* Remove(wxMenuItem
* item
);
966 Sets an item's help string.
969 The menu item identifier.
971 The help string to set.
975 virtual void SetHelpString(int id
, const wxString
& helpString
);
978 Sets the label of a menu item.
981 The menu item identifier.
983 The menu item label to set.
985 @see Append(), GetLabel()
987 void SetLabel(int id
, const wxString
& label
);
990 Sets the title of the menu.
995 @remarks Notice that you can only call this method directly for the
996 popup menus, to change the title of a menu that is part of a menu
997 bar you need to use wxMenuBar::SetLabelTop().
1001 virtual void SetTitle(const wxString
& title
);
1004 Sends events to @a source (or owning window if @NULL) to update the
1007 This is called just before the menu is popped up with wxWindow::PopupMenu,
1008 but the application may call it at other times if required.
1010 void UpdateUI(wxEvtHandler
* source
= NULL
);
1013 void SetInvokingWindow(wxWindow
*win
);
1014 wxWindow
*GetInvokingWindow() const;
1015 wxWindow
*GetWindow() const;
1016 long GetStyle() const;
1017 void SetParent(wxMenu
*parent
);
1018 wxMenu
*GetParent() const;
1020 virtual void Attach(wxMenuBar
*menubar
);
1021 virtual void Detach();
1022 bool IsAttached() const;