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 );
}