haiku/docs/user/interface/MenuField.dox
2014-06-04 11:58:08 -04:00

421 lines
12 KiB
Plaintext

/*
* 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/MenuField.h hrev46323
* src/kits/interface/MenuField.cpp hrev46323
*/
/*!
\file MenuField.h
\ingroup interface
\ingroup libbe
\brief BMenuField class definition and support structures.
*/
/*!
\class BMenuField
\ingroup interface
\ingroup libbe
\brief A labeled pop-up menu.
A menu field consists of a label and a menu bar. The label, if used, is
located to the left of the menu bar. The frame rectangle is divided
in half by default. You can call SetDivider() to change the ratio used by
the label and menu bar.
\image html BMenuField_example.png
A fixed-size menu field's menu bar width and height are limited
by the bounds set by the divider position and \a frame rectangle.
A variable-size menu field's menu bar is only as wide as it needs to
be in order to fit the currently selected menu item, and it's height
depends on the user's menu font size preference. The height of the
frame rectangle is ignored.
If a menu field's frame rectangle is less than 20 pixels wide, the width
is unbounded, the menu bar grows as wide as it needs to in order to fit
the currently selected item. If the frame rectangle is wider than 20
pixels then the divider position and the width of the frame rectangle set
the maximum menu bar width.
\remark Layout-enabled menu field's are always fixed-size, however, you can
make them act like variable-size menu fields by adding them to a
horizontal group followed by glue.
If you're using the menu field as part of a BLayout you can get better
control over the placement of the label and menu bar by splitting the
label and menu field into separate BLayoutItem objects using the
CreateLabelLayoutItem() and CreateMenuBarLayoutItem() methods.
You must pass a menu object into the constructor containing the choices
the user can select from. The menu is owned by the menu field and its
memory will be freed when the menu field is deleted. A BPopUpMenu is
typically used instead of a regular BMenu because it opens directly
underneath the mouse pointer and is set to radio mode and
label-from-marked mode by default, but, this is entirely up to you.
*/
/*!
\fn BMenuField::BMenuField(BRect frame, const char* name, const char* label,
BMenu* menu, uint32 resizingMode, uint32 flags)
\brief Creates a new variable-size BMenuField object.
\param frame The \a frame rectangle of the menu field including the label.
\param name The \a name of the menu field, internal only, can be \c NULL.
\param label The \a label shown to the user, can be blank.
\param menu The \a menu of choices shown to the user, typically a BPopUpMenu.
\param resizingMode Defines the menu field's behavior when its parent is
resized, see BView for details.
\param flags The view flags, see BView for details.
*/
/*!
\fn BMenuField::BMenuField(BRect frame, const char* name, const char* label,
BMenu* menu, bool fixedSize, uint32 resizingMode, uint32 flags)
\brief Creates a new BMenuField object. This constructor allows a you to
create either a fixed-size or variable-size menu field.
\param frame The \a frame rectangle of the menu field including the label.
\param name The \a name of the menu field, internal only, can be \c NULL.
\param label The \a label shown to the user, can be blank.
\param menu The \a menu of choices shown to the user, typically a BPopUpMenu.
\param fixedSize \c true for fixed-size, \c false for variable-size.
\param resizingMode Defines the menu field's behavior when its parent is
resized, see BView for details.
\param flags The view flags, see BView for details.
*/
/*!
\fn BMenuField::BMenuField(const char* name, const char* label, BMenu* menu,
uint32 flags)
\brief Creates a new BMenuField object suitable as part of a BLayout.
\note This method was not available in BeOS R5.
\param name The \a name of the menu field, internal only, can be \c NULL.
\param label The \a label shown to the user, can be blank.
\param menu The \a menu of choices shown to the user, typically a BPopUpMenu.
\param flags The view flags, see BView for details.
*/
/*!
\fn BMenuField::BMenuField(const char* label, BMenu* menu, uint32 flags)
\brief Creates a new BMenuField object suitable as part of a BLayout.
This constructor omits the internal name parameter.
\note This method was not available in BeOS R5.
\param label The \a label shown to the user, can be blank.
\param menu The \a menu of choices shown to the user, typically a BPopUpMenu.
\param flags The view flags, see BView for details.
*/
/*!
\fn BMenuField::BMenuField(BMessage* data)
\brief Archive constructor.
\param data The message \a data to construct the menu field from.
*/
/*!
\fn BMenuField::~BMenuField()
\brief Destructor.
Also frees the memory used by the label and menu.
*/
/*!
\fn BArchivable* BMenuField::Instantiate(BMessage* data)
\brief Creates a new BMenuField object from an \a data message.
\returns A newly created BMenuField object or \c NULL if the message
doesn't contain an archived BMenuField.
*/
/*!
\fn status_t BMenuField::Archive(BMessage* data, bool deep) const
\brief Archives the the BMenuField object into the \a data message.
Adds the label, divider, and current state of the BMenuField to the archive.
\param data A pointer to the BMessage to archive the object into.
\param deep Whether or not to archive attached menu and menu items as well.
\return A status code, \c B_OK if everything went well or an error code
otherwise.
\retval B_OK The object was archived successfully.
\retval B_NO_MEMORY Ran out of memory while archiving the object.
*/
/*!
\fn status_t BMenuField::AllArchived(BMessage* into) const
\brief Hook method called when all views have been archived.
Also archives the label and menu bar.
\param into Archived data message.
*/
/*!
\fn status_t BMenuField::AllUnarchived(const BMessage* from)
\brief Hook method called when all views have been unarchived.
Also unarchives the label and menu bar.
\param from Unarchived data message.
*/
/*!
\fn void BMenuField::AttachedToWindow()
\brief Hook method called when the menu field is attached to a window.
Adjusts the background color to match the background color of the parent
view and adjusts the height to be the attached menu bar which depends on
the user's current menu font setting.
*/
/*!
\fn void BMenuField::AllAttached()
\brief Similar to AttachedToWindow() but this method is triggered after
all child views have already been attached to a window.
If the attached menu bar is too narrow it is resized it to fit the menu
items.
*/
/*!
\fn void BMenuField::Draw(BRect updateRect)
\brief Draws the area of the menu field that intersects \a updateRect.
The menu field is drawn differently based on whether or not it is the
current focus view and whether or not it is enabled.
\param updateRect The rectangular area to be drawn.
*/
/*!
\fn void BMenuField::FrameResized(float newWidth, float newHeight)
\brief Hook method called when the menu bar is resized.
Adjusts the menu bar size and location.
\param newWidth The new \a width of the menu field.
\param newHeight The new \a height of the menu field.
*/
/*!
\fn void BMenuField::KeyDown(const char* bytes, int32 numBytes)
\brief Hook method called when a keyboard key is pressed.
Provides for keyboard navigation allowing users to open the menu by pressing
the space bar, right arrow, or down arrow.
\param bytes The bytes of the key combination pressed.
\param numBytes The number of bytes in \a bytes.
*/
/*!
\fn void BMenuField::MouseDown(BPoint where)
\brief Hook method called when a mouse button is pressed.
Provides the ability to open the menu field menu using the mouse, even if
the user clicks on the menu field label.
\param where The point on the screen where to mouse pointer is when
the mouse button is pressed.
*/
/*!
\fn void BMenuField::WindowActivated(bool state)
\brief Hook method called when the attached window is activated or
deactivated.
Redraws the focus ring around the menu field when the window is activated
and deactivated if it is the window's current focus view.
\param state \c true if the window becomes activated, \c false if the
window becomes deactivated.
*/
/*!
\fn void BMenuField::MakeFocus(bool focused)
\brief Makes the view the current focus view of the window or gives up
being the focus view of the window.
Enables or disables keyboard navigation and invalidates the menu field.
\param focused \a true to set focus, \a false to remove it.
*/
/*!
\fn BMenu* BMenuField::Menu() const
\brief Returns a pointer to the menu attached to the menu bar that opens
when the user clicks on the menu field.
*/
/*!
\fn BMenuBar* BMenuField::MenuBar() const
\brief Returns a pointer to the attached menu bar that contains the pop-up
menu.
*/
/*!
\fn BMenuItem* BMenuField::MenuItem() const
\brief Returns the first menu item attached to the menu bar containing
the pop-up menu.
*/
/*!
\fn void BMenuField::SetLabel(const char* label)
\brief Sets the menu field label to \a label.
\param label The \a label to set to the menu field.
*/
/*!
\fn const char* BMenuField::Label() const
\brief Returns the menu field label.
\return The menu field label or \c NULL if not assigned.
*/
/*!
\fn void BMenuField::SetEnabled(bool on)
\brief Enables or disables the menu field.
\param on \c true to enable the menu field, \c false to disable it.
*/
/*!
\fn bool BMenuField::IsEnabled() const
\brief Returns whether or not the menu is enabled.
\return \c true if the menu is enabled, \c false if disabled.
*/
/*!
\fn void BMenuField::SetAlignment(alignment label)
\brief Set the alignment of the menu field label. The default alignment
is \c B_ALIGN_LEFT.
\remark For menu fields that are part of a BLayout consider
using BLayoutItem::SetExplicitAlignment() instead.
\param label The alignment to set, choices include:
- \c B_ALIGN_LEFT
- \c B_ALIGN_CENTER
- \c B_ALIGN_RIGHT
*/
/*!
\fn alignment BMenuField::Alignment() const
\brief Returns the label's current alignment.
\return The label's current alignment constant.
\see SetAlignment() for more details.
*/
/*!
\fn void BMenuField::SetDivider(float position)
\brief Sets the horizontal \a position of the divider that separates the
label from the menu bar.
\remark It is not recommended to use this method for menu fields that are
part of a BLayout. Instead split the label and menu bar into
separate layout items using CreateLabelLayoutItem() and
CreateMenuBarLayoutItem(). This allows you to have better control
over the position of the label and menu bar portions of your
menu fields.
\param position The divider \a position to set, should be an integral value.
*/
/*!
\fn float BMenuField::Divider() const
\brief Returns the current divider position.
\return The current divider position as a float.
\see SetDivider() for more details.
*/
/*!
\fn void BMenuField::ShowPopUpMarker()
\brief Shows the pop-up marker located on the right edge of the menu bar.
\note This method was not available in BeOS R5.
\sa HidePopUpMarker()
*/
/*!
\fn void BMenuField::HidePopUpMarker()
\brief Hides to pop-up marker.
\note This method was not available in BeOS R5.
\sa ShowPopUpMarker()
*/
/*!
\fn BLayoutItem* BMenuField::CreateLabelLayoutItem()
\brief Returns a pointer to the label layout item.
(Layout constructor only)
\note This method was not available in BeOS R5.
\sa CreateMenuBarLayoutItem()
*/
/*!
\fn BLayoutItem* BMenuField::CreateMenuBarLayoutItem()
\brief Returns a pointer to the menu bar layout item.
(Layout constructor only)
\note This method was not available in BeOS R5.
\sa CreateLabelLayoutItem()
*/