Name

MenuButton — Button with popup menu

Synopsis

MenuButton ( string  label ,
  itemList  menu );

Parameters

string label

itemList menu

items

Properties

string Label

the text on the MenuButton

Description

This is a widget that looks very much like a PushButton, but unlike a PushButton it doesn't immediately start some action but opens a popup menu from where the user can select an item that starts an action. Any item may in turn open a submenu etc.

UserInput() returns the ID of a menu item if one was activated. It will never return the ID of the MenuButton itself.

Style guide hint: Don't overuse this widget. Use it for dialogs that provide lots of actions. Make the most frequently used actions accessible via normal PushButtons. Move less frequently used actions (e.g. "expert" actions) into one or more MenuButtons. Don't nest the popup menus too deep - the deeper the nesting, the more awkward the user interface will be.

You can (and should) provide keybord shortcuts along with the button label as well as for any menu item.

Usage

 	`MenuButton( "button label", [ `item( `id( `doit ), "& Do it" ), `item( `id( `something ), "& Something" ) ] );

Examples

          {
    // Build a dialog with one menu button.
    // Wait the user selects a menu entry, 
    // then close the dialog and terminate.

    // Please note it's pretty pointless to create menu entries without an ID -
    // you'd never know what entry the user selected.

    UI::OpenDialog( 
	       `MenuButton( "&Create",
			    [
			     `item(`id(`folder), "&Folder" 	),
			     `item(`id(`text),   "&Text File"	),
			     `item(`id(`image),  "&Image"	)
			     ]
			    )
	       );

    any id = UI::UserInput();
    UI::CloseDialog();

    y2milestone( "Selected: %1", id );
}

        
          {
    // Build a dialog with one menu button with a submenu.
    // Wait the user selects a menu entry, 
    // then close the dialog and terminate.

    // Please note it's pretty pointless to create menu entries without an ID -
    // you'd never know what entry the user selected.
    
    UI::OpenDialog( 
	       `MenuButton( "&Create",
			    [
			     `item(`id(`folder), "&Folder" 	),
			     `menu( "&Document",
				    [
				     `item(`id(`text),   "&Text File"	),
				     `item(`id(`image),  "&Image"	)
				    ]
				   )
			     ]
			    )
	       );

    any id = UI::UserInput();
    UI::CloseDialog();

    y2milestone( "Selected: %1", id );
}