From 2f746eafdc5efcd050baabd01cacd88a6e27ebb5 Mon Sep 17 00:00:00 2001 From: John Scipione Date: Tue, 5 Nov 2013 19:19:29 -0500 Subject: [PATCH] Add BMenu documentation --- docs/user/interface/Menu.dox | 821 +++++++++++++++++++ docs/user/interface/images/BMenu_example.png | Bin 0 -> 39764 bytes 2 files changed, 821 insertions(+) create mode 100644 docs/user/interface/Menu.dox create mode 100644 docs/user/interface/images/BMenu_example.png diff --git a/docs/user/interface/Menu.dox b/docs/user/interface/Menu.dox new file mode 100644 index 0000000000..3f3848d59a --- /dev/null +++ b/docs/user/interface/Menu.dox @@ -0,0 +1,821 @@ +/* + * Copyright 2013 Haiku Inc. All rights reserved. + * Distributed under the terms of the MIT License. + * + * Authors: + * John Scipione, jscipione@gmail.com + * + * Corresponds to: + * headers/os/interface/Menu.h hrev46318 + * src/kits/interface/Menu.cpp hrev46318 + */ + + +/*! + \file Menu.h + \ingroup interface + \ingroup libbe + \brief Menu class definition and support structures. +*/ + + +/*! + \enum menu_layout + \ingroup interface + + Constants to define the layout of the menu items in a menu. +*/ + + +/*! + \var menu_layout B_ITEMS_IN_ROW + + Items are arranged in a row, one next to the other. +*/ + + +/*! + \var menu_layout B_ITEMS_IN_COLUMN + + Items are arranged in a column, one on top of the other. +*/ + + +/*! + \var menu_layout B_ITEMS_IN_MATRIX + + Items are arranged in a matrix, a free-form arrangement that you create. +*/ + + +/*! + \struct menu_info + \ingroup interface + \ingroup libbe + \brief Information about a menu such as font size and family, background + color, and flags. +*/ + + +/*! + \var menu_info::font_size + + The font size to draw menu items with. +*/ + + +/*! + \var menu_info::f_family + + The font family used to draw menu items. +*/ + + +/*! + \var menu_info::f_style + + The font style used to draw menu items. +*/ + + +/*! + \var menu_info::background_color + + The menu's background color. +*/ + + +/*! + \var menu_info::separator + + The style of horizontal line to use to separates groups of items in a menu. +*/ + + +/*! + \var menu_info::click_to_open + + Whether or not the menu opens on click. The default value is \c true. +*/ + + +/*! + \var menu_info::triggers_always_shown + + Whether or not trigger underlines should always be shown. The default value + is \c false. +*/ + + +/*! + \fn status_t get_menu_info(menu_info* info) + \brief Fill out the menu_info struct into \a info. +*/ + + +/*! + \fn status_t set_menu_info(menu_info* info) + \brief Set the menu's menu_info struct to \a info adjusting how the menu + will look and work. +*/ + + +/*! + \typedef bool (*menu_tracking_hook)(BMenu* menu, void* state) + \brief Defines the function passed into BMenu::SetTrackingHook(). +*/ + + +/*! + \class BMenu + \ingroup interface + \ingroup libbe + \brief Displays a list of menu items including additional menus + arranged hierarchically. + + A newly created BMenu object doesn't contain any menu items, you need to call + BMenu::AddItem() or BMenu::AddList() to add some. + + In addition to BMenuItem objects you can also add additional BMenu objects in + order to create a menu hierarchy. Unlike menus in other operating systems you + can always select both the submenu and menu items, although selecting the + submenu might not actually produce any action other than to close the menu. + The name of a submenu is used to draw its label. + + \image html BMenu_example.png + + BMenu is the basis of several other Interface Kit classes including BMenuBar + and BPopUpMenu. See BMenu::SetRadioMode() and BMenu::SetLabelFromMarked() + for additional details on how BMenu and BPopUpMenu are related. + + Menus arrange their items in one of three possible layouts: + + + + + + + + + + + + + +
\c B_ITEMS_IN_COLUMN + The menu items are stacked vertically in a column, one on top + of another, as in a typical pop-up menu. +
\c B_ITEMS_IN_ROW + The menu items are laid out horizontally in a row, from end to + end, as in a typical menu bar. +
\c B_ITEMS_IN_MATRIX + The menu items are arranged in a free-form arrangement that you + create, such as a matrix. +
+ + Either \c B_ITEMS_IN_COLUMN or \c B_ITEMS_IN_ROW can be passed into the + default constructor, but, you should use the constructor that allows you to + set the height and width of the menu in order to utilize the + \c B_ITEMS_IN_MATRIX layout. + + Several methods will only work in some layouts as noted in the method + description below. +*/ + + +/*! + \fn BMenu::BMenu(const char* name, menu_layout layout) + \brief Creates a new menu object with the specified \a name and \a layout. + + Don't pass \c B_ITEMS_IN_MATRIX into \a layout with this method, use + BMenu::BMenu(const char* name, float width, float height) instead. + + \param name The menu's \a name, serves as a label for submenus. + \param layout The menu layout, possibilities include: + - \c B_ITEMS_IN_ROW items are displayed in a single row, + - \c B_ITEMS_IN_COLUMN items are displayed in a single column. +*/ + + +/*! + \fn BMenu::BMenu(const char* name, float width, float height) + \brief Creates a new menu object with a \c B_ITEMS_IN_MATRIX layout and the + specified \a name, \a width, and \a height. + + \param name The menu's \a name, serves as a label for submenus. + \param width The menu \a width. + \param height The menu \a height. +*/ + + +/*! + \fn BMenu::BMenu(BMessage* archive) + \brief Archive constructor. + + \param archive The message data to construct the menu from. +*/ + + +/*! + \fn BMenu::~BMenu() + \brief Destructor. + + Also destroys any attached menu items and submenus. +*/ + + +/*! + \fn BArchivable* BMenu::Instantiate(BMessage* archive) + \brief Creates a new BMenu object from an \a archive message. + + \returns A newly created BMenu object or \c NULL if the message doesn't + contain an archived BMenu. +*/ + + +/*! + \name Reimplemented Hook Methods +*/ + + +//! @{ + + +/*! + \fn void BMenu::AttachedToWindow() + \brief Lays out the menu items and resizes the menu to fit. +*/ + + +/*! + \fn void BMenu::Draw(BRect updateRect) + \brief Draws the menu. + + \param updateRect The area to draw in. +*/ + + +/*! + \fn void BMenu::MessageReceived(BMessage* message) + \brief Handles a \a message received by the associated looper. + + Responds to mouse wheel events scrolling the menu if it is too + long to fit in the window. Hold \c B_SHIFT_KEY to cause the menu + to scroll faster. + + \param message The \a message received by the associated looper. +*/ + + +/*! + \fn void BMenu::KeyDown(const char* bytes, int32 numBytes) + \brief Hook method that is called when a keyboard key is pressed. + + Handles keyboard navigation and triggers. + + \param bytes The bytes of the key combination pressed. + \param numBytes The number of bytes in \a bytes. +*/ + + +//! @} + + +/*! + \fn bool BMenu::AddItem(BMenuItem* item) + \brief Adds a menu \a item to the end of the list. + + \warning This method should only be used for a menu in \c B_ITEMS_IN_COLUMN + or \c B_ITEMS_IN_ROW layout, it is an error to use this method for + a menu in \c B_ITEMS_IN_MATRIX layout. + + \param item The menu \a item to add. + + \return Whether or not the \a item was added to the menu. +*/ + + +/*! + \fn bool BMenu::AddItem(BMenuItem* item, int32 index) + \brief Adds a menu \a item at the specified \a index. + + \warning This method should only be used for a menu in \c B_ITEMS_IN_COLUMN + or \c B_ITEMS_IN_ROW layout, it is an error to use this method for + a menu in \c B_ITEMS_IN_MATRIX layout. + + \param item The menu \a item to add. + \param index The \a index where to add the \a item to the menu. + + \return Whether or not the \a item was added to the menu. +*/ + + +/*! + \fn bool BMenu::AddItem(BMenuItem* item, BRect frame) + \brief Adds a menu \a item in the specified \a frame rectangle within the menu. + + \warning This method should only be used for a menu in \c B_ITEMS_IN_MATRIX + layout, it is an error to use this method for a menu in + \c B_ITEMS_IN_COLUMN or \c B_ITEMS_IN_ROW layout. + + \param item The menu \a item to add. + \param frame The \a frame rectangle where to add the \a item to the menu. + + \return Whether or not the \a item was added to the menu. +*/ + + +/*! + \fn bool BMenu::AddItem(BMenu* submenu) + \brief Add a \a submenu to the end of the list. + + \warning This method should only be used for a menu in \c B_ITEMS_IN_COLUMN + or \c B_ITEMS_IN_ROW layout, it is an error to use this method for + a menu in \c B_ITEMS_IN_MATRIX layout. + + \param submenu The submenu to add. + + \return Whether or not the \a submenu was added to the menu. +*/ + + +/*! + \fn bool BMenu::AddItem(BMenu* submenu, int32 index) + \brief Add a \a submenu at the specified \a index. + + \warning This method should only be used for a menu in \c B_ITEMS_IN_COLUMN + or \c B_ITEMS_IN_ROW layout, it is an error to use this method for + a menu in \c B_ITEMS_IN_MATRIX layout. + + \param submenu The \a submenu to add. + \param index The \a index where to add the \a submenu to the menu. + + \return Whether or not the \a submenu was added to the menu. +*/ + + +/*! + \fn bool BMenu::AddItem(BMenu* submenu, BRect frame) + \brief Adds a \a submenu in the specified \a frame rectangle within the + menu. + + \warning This method should only be used for a menu in \c B_ITEMS_IN_MATRIX + layout, it is an error to use this method for a menu in + \c B_ITEMS_IN_COLUMN or \c B_ITEMS_IN_ROW layout. + + \param submenu The submenu to add. + \param frame The \a frame rectangle where to add the submenu to the menu. + + \return Whether or not the \a submenu was added to the menu. +*/ + + +/*! + \fn bool BMenu::AddList(BList* list, int32 index) + \brief Add a \a list of menu items at the specified \a index. + + \warning This method should only be used for a menu in \c B_ITEMS_IN_COLUMN + or \c B_ITEMS_IN_ROW layout, it is an error to use this method for + a menu in \c B_ITEMS_IN_MATRIX layout. + + \param list The \a list of menu items to add. + \param index The \a index where to add the \a list to the menu. + + \return Whether or not the \a list of menu items was added to the menu. +*/ + + +/*! + \fn bool BMenu::AddSeparatorItem() + \brief Adds a separator item to the end of the menu. + + \warning This method should only be used for a menu in \c B_ITEMS_IN_COLUMN + layout, it is an error to use this method for a menu in + \c B_ITEMS_IN_ROW or \c B_ITEMS_IN_MATRIX layout. + + \return Whether or not the separator item was added to the menu. +*/ + + +/*! + \fn bool BMenu::RemoveItem(BMenuItem* item) + \brief Remove and delete the specified \a item from the menu. + + \return Whether or not the \a item was removed from the menu. +*/ + + +/*! + \fn BMenuItem* BMenu::RemoveItem(int32 index) + \brief Remove the item at the specified \a index from the menu. + + The menu item object is not deleted. + + \warning This method should only be used for a menu in \c B_ITEMS_IN_COLUMN + or \c B_ITEMS_IN_ROW layout, it is an error to use this method for + a menu in \c B_ITEMS_IN_MATRIX layout. + + \param index The \a index of where to remove the menu item. + + \return The menu item object or \c NULL if not found. +*/ + + +/*! + \fn bool BMenu::RemoveItems(int32 index, int32 count, bool deleteItems) + \brief Remove \a count number of items from the menu starting at the specified + \a index and delete them if \a deleteItems is \c true. + + \warning This method should only be used for a menu in \c B_ITEMS_IN_COLUMN + or \c B_ITEMS_IN_ROW layout, it is an error to use this method for + a menu in \c B_ITEMS_IN_MATRIX layout. + + \param index The \a index of where to start removing menu items. + \param count The number of items to remove. + \param deleteItems Whether or not to delete the items after removing them. + + \return Whether or not the items were removed from the menu. +*/ + + +/*! + \fn bool BMenu::RemoveItem(BMenu* submenu) + \brief Remove and delete a \a submenu from the menu. + + \param submenu The submenu to remove. + + \return Whether or not the \a submenu was removed from the menu. +*/ + + +/*! + \fn int32 BMenu::CountItems() const + \brief Returns the number of items added to the menu. + + \return The number of items added to the menu. +*/ + + +/*! + \fn BMenuItem* BMenu::ItemAt(int32 index) const + \brief Returns a pointer to the menu item at the specified \a index. + + \warning This method should only be used for a menu in \c B_ITEMS_IN_COLUMN + or \c B_ITEMS_IN_ROW layout, it is an error to use this method for + a menu in \c B_ITEMS_IN_MATRIX layout. + + \return A pointer to a menu item or \c NULL if not found. +*/ + + +/*! + \fn BMenu* BMenu::SubmenuAt(int32 index) const + \brief Returns a pointer to a submenu at the specified \a index. + + \warning This method should only be used for a menu in \c B_ITEMS_IN_COLUMN + or \c B_ITEMS_IN_ROW layout, it is an error to use this method for a + menu in \c B_ITEMS_IN_MATRIX layout. + + \return A pointer to a submenu or \c NULL if not found. +*/ + + +/*! + \fn int32 BMenu::IndexOf(BMenuItem* item) const + \brief Returns the index of the specified menu \a item. + + The index starts at the left for a menu in \c B_ITEMS_IN_COLUMN layout going + right or start at the top for a menu in \c B_ITEMS_IN_ROW layout going down. + + \warning This method should only be used for a menu in \c B_ITEMS_IN_COLUMN + or \c B_ITEMS_IN_ROW layout, it is an error to use this method for + a menu in \c B_ITEMS_IN_MATRIX layout. + + \return The index of the menu \a item or \c B_ERROR of not found. +*/ + + +/*! + \fn int32 BMenu::IndexOf(BMenu* submenu) const + \brief Returns the index of the specified \a submenu. + + The index starts at the left for a menu in \c B_ITEMS_IN_COLUMN layout going + right or at the top for a menu in \c B_ITEMS_IN_ROW layout going down. + + \warning This method should only be used for a menu in \c B_ITEMS_IN_COLUMN + or \c B_ITEMS_IN_ROW layout, it is an error to use this method for + a menu in \c B_ITEMS_IN_MATRIX layout. + + \return The index of the \a submenu or \c B_ERROR of not found. +*/ + + +/*! + \fn BMenuItem* BMenu::FindItem(const char* label) const + \brief Returns a pointer to the menu item with the specified \a label. + + \param label The \a label of the menu item to find. + + \return A pointer to a menu item or \c NULL if not found. +*/ + + +/*! + \fn BMenuItem* BMenu::FindItem(uint32 command) const + \brief Returns a pointer to the menu item with the specified \a command for + its associated message. + + \param command The \a command of the associated message of the menu item to + find. + + \return A pointer to a menu item or \c NULL if not found. +*/ + + +/*! + \fn status_t BMenu::SetTargetForItems(BHandler* handler) + \brief Set the target to \a handler for each item in the menu. + + This is a convenient way to set the target for all the items in a menu. + + \param handler The BHandler object to set the target of the menu item to. + + This method doesn't descend into submenus recursively and only acts on items + that have already been added to the menu. + + \return \c B_OK on success or an error code on error. +*/ + + +/*! + \fn status_t BMenu::SetTargetForItems(BMessenger messenger) + \brief Set the target to \a messenger for each item in the menu. + + This is a convenient way to set the target for all the items in a menu. + + This method doesn't descend into submenus recursively and only acts on items + that have already been added to the menu. + + \param messenger The BMessenger object to set the target of the menu item + to. + + \return \c B_OK on success or an error code on error. +*/ + + +/*! + \fn void BMenu::SetEnabled(bool enable) + \brief Enables or disables the menu. + + \param enable \c true to enable, \c false to disable. +*/ + + +/*! + \fn void BMenu::SetRadioMode(bool on) + \brief Turns radio mode on or off. + + Turning radio mode off also turns label-from-marked mode off. + + \param on \c true to turn radio mode on, \c false to turn it off. +*/ + + +/*! + \fn void BMenu::SetTriggersEnabled(bool enable) + \brief Enables or disables triggers. + + \param enable \c true to enable triggers, \c false to disable triggers. +*/ + + +/*! + \fn void BMenu::SetMaxContentWidth(float width) + \brief Sets the maximum width of the menu items' content area. + + This is the maximum width that a menu item can draw in. Note that menu + items have built-in margins on the left and right sides that are not + included as part of the maximum content width. + + \param width The maximum width for the menu item contents to draw in. +*/ + + +/*! + \fn void BMenu::SetLabelFromMarked(bool on) + \brief Sets whether or not the label of the menu is set according to the + marked item. + + Turning label-from-marked mode on also turns radio mode on. + + \param on \c true to turn label-from-marked mode on, \c false to turn it + off. +*/ + + +/*! + \fn bool BMenu::IsLabelFromMarked() + \brief Returns whether or not the menu is in label-from-marked mode. + + \return \c true if menu is in label-from-marked mode, \c false if not. +*/ + + +/*! + \fn bool BMenu::IsEnabled() const + \brief Returns whether or not the menu is enabled. + + \return \c true if menu is enabled, \c false if it is disabled. +*/ + + +/*! + \fn bool BMenu::IsRadioMode() const + \brief Returns whether or not the menu is in radio mode. + + \return \c true if menu is in radio mode, \c false if not. +*/ + + +/*! + \fn bool BMenu::AreTriggersEnabled() const + \brief Returns whether or not triggers are enabled. + + \return \c true if triggers are enabled, \c false if triggers are disabled. +*/ + + +/*! + \fn bool BMenu::IsRedrawAfterSticky() const + \brief Returns whether or not the menu is in redraw-after-sticky mode. + + \return \c true if menu is in redraw-after-sticky mode, \c false if not. +*/ + + +/*! + \fn float BMenu::MaxContentWidth() const + \brief Return the maximum width of the menu items' content area. + + \return The maximum width of the menu items' content area as a float. +*/ + + +/*! + \fn BMenuItem* BMenu::FindMarked() + \brief Return a pointer to the first marked menu item. + + The index starts at the left for a menu in \c B_ITEMS_IN_COLUMN layout going + right or at the top for a menu in \c B_ITEMS_IN_ROW layout going down. + + \warning This method should only be used for a menu in \c B_ITEMS_IN_COLUMN + or \c B_ITEMS_IN_ROW layout, it is an error to use this method for + a menu in \c B_ITEMS_IN_MATRIX layout. + + \return A pointer to the first marked menu item or \c NULL if not found. +*/ + + +/*! + \fn int32 BMenu::FindMarkedIndex() + \brief Return the index of the first marked menu item. + + The index starts at the left for a menu in \c B_ITEMS_IN_COLUMN layout going + right or at the top for a menu in \c B_ITEMS_IN_ROW layout going down. + + \warning This method should only be used for a menu in \c B_ITEMS_IN_COLUMN + or \c B_ITEMS_IN_ROW layout, it is an error to use this method for + a menu in \c B_ITEMS_IN_MATRIX layout. + + \return The index of the first marked menu item or -1 if not found. +*/ + + +/*! + \fn BMenu* BMenu::Supermenu() const + \brief Returns the pointer to the menu that this menu it attached to. + + \return A pointer to a BMenu object or \c NULL if not found. +*/ + + +/*! + \fn BMenuItem* BMenu::Superitem() const + \brief Returns the pointer to the menu item that this menu it attached to. + + \return A pointer to a BMenuItem object or \c NULL if not found. +*/ + + +/*! + \fn BMenu::BMenu(BRect frame, const char* name, uint32 resizingMode, + uint32 flags, menu_layout layout, bool resizeToFit) + \brief Implemented by derived classes to create a new menu object. + + This method is intended to be used by derived classes that don't simply wish + to utilize different sorts of menu items or arrange them in a different way, + but wish to invent a different kind of menu altogether. If the \a layout is + set to \c B_ITEMS_IN_MATRIX then the \a resizeToFit flag should be set to + \c false. + + \param frame The \a frame rectangle to create the menu from. + \param name The menu's \a name, serves as a label for submenus. + \param resizingMode The resizing mode flags, see BView for more details. + \param flags The view \a flags, see BView for more details. + \param layout The menu layout, possibilities include: + - \c B_ITEMS_IN_ROW items are displayed in a single row, + - \c B_ITEMS_IN_COLUMN items are displayed in a single column, + - \c B_ITEMS_IN_MATRIX items are displayed in a custom matrix. + \param resizeToFit Whether or not the menu should automatically resize + itself to fit its contents, this will not work in + \c B_ITEMS_IN_MATRIX layout. +*/ + + +/*! + \fn void BMenu::SetItemMargins(float left, float top, float right, + float bottom) + \brief Set the menu item margins. + + \param left The left margin to set. + \param top The top margin to set. + \param right The right margin to set. + \param bottom The bottom margin to set. +*/ + + +/*! + \fn void BMenu::GetItemMargins(float* _left, float* _top, float* _right, + float* _bottom) const + \brief Fill out the margins into the passed in float pointers. + + \param _left The left margin to fill out, can be \c NULL. + \param _top The top margin to fill out, can be \c NULL. + \param _right The right margin to fill out, can be \c NULL. + \param _bottom The bottom margin to fill out, can be \c NULL. +*/ + + +/*! + \fn menu_layout BMenu::Layout() const + \brief Returns the current menu_layout constant. +*/ + + +/*! + \fn BMenuItem* BMenu::Track(bool sticky, BRect* clickToOpenRect) + \brief Initiates tracking the cursor within the menu. + + This method passes tracking control to submenus hierarchically depending on + where the user moves their mouse. + + You only need to call this method yourself if you are implementing a menu + that needs to track the cursor under nonstandard circumstances. + + \param sticky If \c true Track() leaves the menu open even after the mouse + button is no longer held down. + \param clickToOpenRect If \a sticky is \c true, leave the menu open even if + the user releases the mouse button while the cursor is inside + \a clickToOpenRect. + + \return A BMenuItem object if the user ends tracking by invoking an item or + \c NULL if the user didn't invoke an item. +*/ + + +/*! + \fn bool BMenu::AddDynamicItem(add_state state) + \brief Implemented by subclasses to Add a dynamic item to the menu. + + \param state Possibilities include: + - \c B_INITIAL_ADD, + - \c B_PROCESSING, + - \c B_ABORT + + \return \c true if the dynamic item was added, \c false otherwise. +*/ + + +/*! + \fn void BMenu::DrawBackground(BRect updateRect) + \brief Draw the menu background within the bounds of \a updateRect. + + \param updateRect The area to draw the background in. +*/ + + +/*! + \fn void BMenu::SetTrackingHook(menu_tracking_hook func, void* state) + \brief Sets a hook function that is called when tracking begins. + + \param func The hook function to call. + \param state A variable passed to the hook function. +*/ + + +/*! + \fn void BMenu::_DrawItems(BRect updateRect) + \brief Draw the menu items within \a updateRect. + + \param updateRect The area to draw the menu items in. +*/ diff --git a/docs/user/interface/images/BMenu_example.png b/docs/user/interface/images/BMenu_example.png new file mode 100644 index 0000000000000000000000000000000000000000..b0cf2f0ce29601b020675d31a6891a1cb1b2fdb6 GIT binary patch literal 39764 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 XCFRl5(