| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: menuitem.h
- // Purpose: interface of wxMenu, wxMenuItem
- // Author: wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- /**
- @class wxMenuItem
- A menu item represents an item in a menu.
- Note that you usually don't have to deal with it directly as wxMenu methods
- usually construct an object of this class for you.
- Also please note that the methods related to fonts and bitmaps are currently
- only implemented for Windows, Mac and GTK+.
- @beginEventEmissionTable{wxCommandEvent,wxMenuEvent}
- @event{EVT_MENU(id, func)}
- Process a @c wxEVT_MENU command, which is generated by a menu item.
- This type of event is sent as wxCommandEvent.
- @event{EVT_MENU_RANGE(id1, id2, func)}
- Process a @c wxEVT_MENU command, which is generated by a range of menu items.
- This type of event is sent as wxCommandEvent.
- @event{EVT_MENU_OPEN(func)}
- A menu is about to be opened. On Windows, this is only sent once for each
- navigation of the menubar (up until all menus have closed).
- This type of event is sent as wxMenuEvent.
- @event{EVT_MENU_CLOSE(func)}
- A menu has been just closed.
- This type of event is sent as wxMenuEvent.
- @event{EVT_MENU_HIGHLIGHT(id, func)}
- The menu item with the specified id has been highlighted: used to show
- help prompts in the status bar by wxFrame
- This type of event is sent as wxMenuEvent.
- @event{EVT_MENU_HIGHLIGHT_ALL(func)}
- A menu item has been highlighted, i.e. the currently selected menu item has changed.
- This type of event is sent as wxMenuEvent.
- @endEventTable
- @library{wxcore}
- @category{menus}
- @see wxMenuBar, wxMenu
- */
- class wxMenuItem : public wxObject
- {
- public:
- /**
- Constructs a wxMenuItem object.
- Menu items can be standard, or "stock menu items", or custom.
- For the standard menu items (such as commands to open a file, exit the
- program and so on, see @ref page_stockitems for the full list) it is enough
- to specify just the stock ID and leave @a text and @a helpString empty.
- Some platforms (currently wxGTK only, and see the remark in SetBitmap()
- documentation) will also show standard bitmaps for stock menu items.
- Leaving at least @a text empty for the stock menu items is actually strongly
- recommended as they will have appearance and keyboard interface (including
- standard accelerators) familiar to the user.
- For the custom (non-stock) menu items, @a text must be specified and while
- @a helpString may be left empty, it's recommended to pass the item
- description (which is automatically shown by the library in the status bar
- when the menu item is selected) in this parameter.
- Finally note that you can e.g. use a stock menu label without using its stock
- help string:
- @code
- // use all stock properties:
- helpMenu->Append(wxID_ABOUT);
- // use the stock label and the stock accelerator but not the stock help string:
- helpMenu->Append(wxID_ABOUT, "", "My custom help string");
- // use all stock properties except for the bitmap:
- wxMenuItem *mymenu = new wxMenuItem(helpMenu, wxID_ABOUT);
- mymenu->SetBitmap(wxArtProvider::GetBitmap(wxART_WARNING));
- helpMenu->Append(mymenu);
- @endcode
- that is, stock properties are set independently one from the other.
- @param parentMenu
- Menu that the menu item belongs to. Can be @NULL if the item is
- going to be added to the menu later.
- @param id
- Identifier for this menu item. May be @c wxID_SEPARATOR, in which
- case the given kind is ignored and taken to be @c wxITEM_SEPARATOR
- instead.
- @param text
- Text for the menu item, as shown on the menu.
- See SetItemLabel() for more info.
- @param helpString
- Optional help string that will be shown on the status bar.
- @param kind
- May be @c wxITEM_SEPARATOR, @c wxITEM_NORMAL, @c wxITEM_CHECK or
- @c wxITEM_RADIO.
- @param subMenu
- If non-@NULL, indicates that the menu item is a submenu.
- */
- wxMenuItem(wxMenu* parentMenu = NULL, int id = wxID_SEPARATOR,
- const wxString& text = wxEmptyString,
- const wxString& helpString = wxEmptyString,
- wxItemKind kind = wxITEM_NORMAL,
- wxMenu* subMenu = NULL);
- /**
- Destructor.
- */
- virtual ~wxMenuItem();
- /**
- Checks or unchecks the menu item.
- Note that this only works when the item is already appended to a menu.
- */
- virtual void Check(bool check = true);
- /**
- Enables or disables the menu item.
- */
- virtual void Enable(bool enable = true);
- /**
- @deprecated This function is deprecated; please use GetLabelText() instead.
- @see GetLabelText()
- */
- static wxString GetLabelFromText(const wxString& text);
- /**
- Strips all accelerator characters and mnemonics from the given @a text.
- For example:
- @code
- wxMenuItem::GetLabelfromText("&Hello\tCtrl-h");
- @endcode
- will return just @c "Hello".
- @see GetItemLabelText(), GetItemLabel()
- */
- static wxString GetLabelText(const wxString& text);
-
-
- /**
- @name Getters
- */
- //@{
-
- /**
- Returns the background colour associated with the menu item.
-
- @onlyfor{wxmsw}
- */
- wxColour& GetBackgroundColour() const;
- /**
- Returns the checked or unchecked bitmap.
-
- @onlyfor{wxmsw}
- */
- virtual const wxBitmap& GetBitmap(bool checked = true) const;
- /**
- Returns the bitmap to be used for disabled items.
-
- @onlyfor{wxmsw}
- */
- virtual const wxBitmap& GetDisabledBitmap() const;
-
- /**
- Returns the font associated with the menu item.
-
- @onlyfor{wxmsw}
- */
- wxFont& GetFont() const;
- /**
- Returns the help string associated with the menu item.
- */
- const wxString& GetHelp() const;
- /**
- Returns the menu item identifier.
- */
- int GetId() const;
- /**
- Returns the text associated with the menu item including any accelerator
- characters that were passed to the constructor or SetItemLabel().
- @see GetItemLabelText(), GetLabelText()
- */
- virtual wxString GetItemLabel() const;
- /**
- Returns the text associated with the menu item, without any accelerator
- characters.
- @see GetItemLabel(), GetLabelText()
- */
- virtual wxString GetItemLabelText() const;
- /**
- Returns the item kind, one of @c wxITEM_SEPARATOR, @c wxITEM_NORMAL,
- @c wxITEM_CHECK or @c wxITEM_RADIO.
- */
- wxItemKind GetKind() const;
- /**
- Returns the text associated with the menu item without any accelerator
- characters it might contain.
- @deprecated This function is deprecated in favour of GetItemLabelText().
- @see GetItemLabelText()
- */
- wxString GetLabel() const;
- /**
- Gets the width of the menu item checkmark bitmap.
-
- @onlyfor{wxmsw}
- */
- int GetMarginWidth() const;
- /**
- Returns the menu this menu item is in, or @NULL if this menu item is not
- attached.
- */
- wxMenu* GetMenu() const;
- /**
- Returns the text associated with the menu item.
- @deprecated This function is deprecated. Please use GetItemLabel() or GetItemLabelText() instead.
-
- @see GetItemLabel(), GetItemLabelText()
- */
- wxString GetName() const;
- /**
- Returns the submenu associated with the menu item, or @NULL if there isn't one.
- */
- wxMenu* GetSubMenu() const;
- /**
- Returns the text associated with the menu item, such as it was passed to the
- wxMenuItem constructor, i.e. with any accelerator characters it may contain.
- @deprecated This function is deprecated in favour of GetItemLabel().
- @see GetLabelFromText()
- */
- const wxString& GetText() const;
- /**
- Returns the text colour associated with the menu item.
-
- @onlyfor{wxmsw}
- */
- wxColour& GetTextColour() const;
-
- /**
- Extract the accelerator from the given menu string, return NULL if none
- found.
- */
- static wxAcceleratorEntry *GetAccelFromString(const wxString& label);
- /**
- Get our accelerator or NULL (caller must delete the pointer)
- */
- virtual wxAcceleratorEntry *GetAccel() const;
- //@}
-
-
-
- /**
- @name Checkers
- */
- //@{
- /**
- Returns @true if the item is a check item.
- Unlike IsCheckable() this doesn't return @true for the radio buttons.
- @since 2.9.5
- */
- bool IsCheck() const;
- /**
- Returns @true if the item is checkable.
- Notice that the radio buttons are considered to be checkable as well,
- so this method returns @true for them too. Use IsCheck() if you want to
- test for the check items only.
- */
- bool IsCheckable() const;
- /**
- Returns @true if the item is checked.
- */
- virtual bool IsChecked() const;
- /**
- Returns @true if the item is enabled.
- */
- virtual bool IsEnabled() const;
- /**
- Returns @true if the item is a radio button.
- @since 2.9.5
- */
- bool IsRadio() const;
- /**
- Returns @true if the item is a separator.
- */
- bool IsSeparator() const;
- /**
- Returns @true if the item is a submenu.
- */
- bool IsSubMenu() const;
-
- //@}
-
-
-
- /**
- @name Setters
- */
- //@{
- /**
- Sets the background colour associated with the menu item.
-
- @onlyfor{wxmsw}
- */
- void SetBackgroundColour(const wxColour& colour);
- /**
- Sets the bitmap for the menu item.
- It is equivalent to wxMenuItem::SetBitmaps(bmp, wxNullBitmap) if
- @a checked is @true (default value) or SetBitmaps(wxNullBitmap, bmp)
- otherwise.
- SetBitmap() must be called before the item is appended to the menu,
- i.e. appending the item without a bitmap and setting one later is not
- guaranteed to work. But the bitmap can be changed or reset later if it
- had been set up initially.
- Notice that GTK+ uses a global setting called @c gtk-menu-images to
- determine if the images should be shown in the menus at all. If it is
- off (which is the case in e.g. Gnome 2.28 by default), no images will
- be shown, consistently with the native behaviour.
- @onlyfor{wxmsw,wxosx,wxgtk}
- */
- virtual void SetBitmap(const wxBitmap& bmp, bool checked = true);
- /**
- Sets the checked/unchecked bitmaps for the menu item.
- The first bitmap is also used as the single bitmap for uncheckable menu items.
- @onlyfor{wxmsw}
- */
- void SetBitmaps(const wxBitmap& checked,
- const wxBitmap& unchecked = wxNullBitmap);
- /**
- Sets the to be used for disabled menu items.
- @onlyfor{wxmsw}
- */
- void SetDisabledBitmap(const wxBitmap& disabled);
- /**
- Sets the font associated with the menu item.
-
- @onlyfor{wxmsw}
- */
- void SetFont(const wxFont& font);
- /**
- Sets the help string.
- */
- void SetHelp(const wxString& helpString);
- /**
- Sets the label associated with the menu item.
-
- Note that if the ID of this menu item corresponds to a stock ID, then it is
- not necessary to specify a label: wxWidgets will automatically use the stock
- item label associated with that ID. See the @ref wxMenuItem::wxMenuItem "constructor"
- for more info.
-
- The label string for the normal menu items (not separators) may include the
- accelerator which can be used to activate the menu item from keyboard.
- An accelerator key can be specified using the ampersand <tt>&</tt> character.
- In order to embed an ampersand character in the menu item text, the ampersand
- must be doubled.
-
- Optionally you can specify also an accelerator string appending a tab character
- <tt>\\t</tt> followed by a valid key combination (e.g. <tt>CTRL+V</tt>).
- Its general syntax is any combination of @c "CTRL", @c "RAWCTRL", @c
- "ALT" and @c "SHIFT" strings (case doesn't matter) separated by either
- @c '-' or @c '+' characters and followed by the accelerator itself.
- Notice that @c CTRL corresponds to the "Ctrl" key on most platforms but
- not under Mac OS where it is mapped to "Cmd" key on Mac keyboard.
- Usually this is exactly what you want in portable code but if you
- really need to use the (rarely used for this purpose) "Ctrl" key even
- under Mac, you may use @c RAWCTRL to prevent this mapping. Under the
- other platforms @c RAWCTRL is the same as plain @c CTRL.
- The accelerator may be any alphanumeric character, any function key
- (from F1 to F12) or one of the special characters listed in the table
- below (again, case doesn't matter):
- - @c DEL or @c DELETE: Delete key
- - @c BACK : Backspace key
- - @c INS or @c INSERT: Insert key
- - @c ENTER or @c RETURN: Enter key
- - @c PGUP: PageUp key
- - @c PGDN: PageDown key
- - @c LEFT: Left cursor arrow key
- - @c RIGHT: Right cursor arrow key
- - @c UP: Up cursor arrow key
- - @c DOWN: Down cursor arrow key
- - @c HOME: Home key
- - @c END: End key
- - @c SPACE: Space
- - @c TAB: Tab key
- - @c ESC or @c ESCAPE: Escape key (Windows only)
- Examples:
- @code
- m_pMyMenuItem->SetItemLabel("My &item\tCTRL+I");
- m_pMyMenuItem2->SetItemLabel("Clean && build\tF7");
- m_pMyMenuItem3->SetItemLabel("Simple item");
- m_pMyMenuItem4->SetItemLabel("Item with &accelerator");
- @endcode
- @note In wxGTK using @c "SHIFT" with non-alphabetic characters
- currently doesn't work, even in combination with other modifiers, due
- to GTK+ limitation. E.g. @c Shift+Ctrl+A works but @c Shift+Ctrl+1 or
- @c Shift+/ do not, so avoid using accelerators of this form in portable
- code.
- @see GetItemLabel(), GetItemLabelText()
- */
- virtual void SetItemLabel(const wxString& label);
- /**
- Sets the width of the menu item checkmark bitmap.
-
- @onlyfor{wxmsw}
- */
- void SetMarginWidth(int width);
- /**
- Sets the parent menu which will contain this menu item.
- */
- void SetMenu(wxMenu* menu);
- /**
- Sets the submenu of this menu item.
- */
- void SetSubMenu(wxMenu* menu);
- /**
- Sets the text associated with the menu item.
- @deprecated This function is deprecated in favour of SetItemLabel().
-
- @see SetItemLabel().
- */
- virtual void SetText(const wxString& text);
- /**
- Sets the text colour associated with the menu item.
-
- @onlyfor{wxmsw}
- */
- void SetTextColour(const wxColour& colour);
-
- /**
- Set the accel for this item - this may also be done indirectly with
- SetText()
- */
- virtual void SetAccel(wxAcceleratorEntry *accel);
- //@}
- };
|