Name

SelectionBox — Scrollable list selection

Synopsis

SelectionBox ( string  label ,
  list  items );

Parameters

string label

Options

shrinkable

make the widget very small

immediate

make `notify trigger immediately when the selected item changes

Optional Arguments

list items

the items contained in the selection box

Properties

string Label

The label above the list describing what it is all about

string CurrentItem

The currently selected item or its ID, if it has one. Alias: Value

id_list Items

The items that are displayed

Description

A selection box offers the user to select an item out of a list. Each item has a label and an optional id. When constructing the list of items, you have two way of specifying an item. Either you give a plain string, in which case the string is used both for the id and the label of the item. Or you specify a term `item( term id, string label ) or `item( term id, string label, boolean selected ), where you give an id of the form `id( any v ) where you can store an aribtrary value as id. The third argument controls whether the item is the selected item.

Usage

 	`SelectionBox( `id( `pizza ), "select your Pizza:", [ "Margarita", `item( `id( `na ), "Napoli" ) ] )

Examples

          {
    UI::OpenDialog(
	       `VBox( 
		     `SelectionBox( "Select your Pizza:",
				    [
				       "Napoli",
				       "Funghi",
				       "Salami"
				     ] ),
		     `PushButton("&OK")
		     )
	       );
    UI::UserInput();
    UI::CloseDialog();
}

        
          {
    // Create a selection box with three entries.
    // All entries have IDs to identify them independent of locale
    // (The texts might have to be translated!).
    // Entry "Funghi" will be selected by default.
    UI::OpenDialog(
	       `VBox(
		     `SelectionBox(`id(`pizza),
				    "Select your Pizza:",
				    [
				     `item(`id(`nap), "Napoli"       ),
				     `item(`id(`fun), "Funghi", true ),
				     `item(`id(`sal), "Salami"       )
				    ] ),
		     `PushButton("&OK")
		     )
	       );
    UI::UserInput();

    // Get the input from the selection box.
    //
    // Notice: The return value of UI::UserInput() does NOT return this value!
    // Rather, it returns the ID of the widget (normally the PushButton)
    // that caused UI::UserInput() to return.
    any pizza = UI::QueryWidget(`id(`pizza), `CurrentItem);
    
    // Close the dialog.
    // Remember to read values from the dialog's widgets BEFORE closing it!
    UI::CloseDialog();

    // Evaluate selection

    string toppings = "nothing";

    if      ( pizza == `nap )	toppings = "Tomatoes, Cheese";
    else if ( pizza == `fun )	toppings = "Tomatoes, Cheese, Mushrooms";
    else if ( pizza == `sal )	toppings = "Tomatoes, Cheese, Sausage";
    
    // Pop up a new dialog to echo the selection.
    UI::OpenDialog(
	       `VBox(
		     `Label("You will get a pizza with:"),
		     `Label(toppings),
		     `PushButton("&OK")
		     )
	       );
    UI::UserInput();
    UI::CloseDialog();
}

        
          {
    // Create a selection box with three entries.
    // All entries have IDs to identify them independent of locale
    // (The texts might have to be translated!).
    // Entry "Funghi" will be selected by default.
    //
    // There are two buttons to select a "Today's special" and a
    // "veggie" pizza to demonstrate how to select list entries
    // programmatically.
    UI::OpenDialog(
	       `VBox(
		     `SelectionBox(`id(`pizza),
				   "Select your Pizza:",
				   [
				    `item(`id(`nap), "Napoli"       ),
				    `item(`id(`fun), "Funghi", true ),
				    `item(`id(`sal), "Salami"       )
				   ] ),
		     `HBox(
			   `PushButton(`id(`todays_special), `opt(`hstretch), "&Today's special" ),
			   `PushButton(`id(`veggie),         `opt(`hstretch), "&Veggie" )
			   ),
		     `PushButton(`id(`ok), `opt(`default), "&OK")
		     )
	       );

    any id = nil;
    
    repeat
	{
	    id = UI::UserInput();

	    if      ( id == `todays_special ) UI::ChangeWidget( `id( `pizza ), `CurrentItem, `nap );
	    else if ( id == `veggie         ) UI::ChangeWidget( `id( `pizza ), `CurrentItem, `fun );
	} until ( id == `ok );

    // Get the input from the selection box.
    //
    // Notice: The return value of UI::UserInput() does NOT return this value!
    // Rather, it returns the ID of the widget (normally the PushButton)
    // that caused UI::UserInput() to return.
    any pizza = UI::QueryWidget(`id(`pizza), `CurrentItem);
    
    // Close the dialog.
    // Remember to read values from the dialog's widgets BEFORE closing it!
    UI::CloseDialog();

    // Evaluate selection

    string toppings = "nothing";

    if      ( pizza == `nap )	toppings = "Tomatoes, Cheese";
    else if ( pizza == `fun )	toppings = "Tomatoes, Cheese, Mushrooms";
    else if ( pizza == `sal )	toppings = "Tomatoes, Cheese, Sausage";
    
    // Pop up a new dialog to echo the selection.
    UI::OpenDialog(
	       `VBox(
		     `Label("You will get a pizza with:"),
		     `Label(toppings),
		     `PushButton(`opt(`default), "&OK")
		     )
	       );
    UI::UserInput();
    
    UI::CloseDialog();
}

        
          {
    // Create a selection box with three entries.
    // All entries have IDs to identify them independent of locale
    // (The texts might have to be translated!).
    // Entry "Funghi" will be selected by default.
    //
    // There are two buttons to select a "Today's special" and a
    // "veggie" pizza to demonstrate how to select list entries
    // from within a YCP script - even without having to use item IDs.
    UI::OpenDialog(
	       `VBox(
		     `SelectionBox(`id(`pizza),
				   "Select your Pizza:",
				   [
				    "Napoli",
				    "Funghi",
				    "Salami",
				    "Quattro Stagioni (a pizza which is devided into 4 parts each with a different topping)",
				    "Caprese",
				    "Speciale",
				    "Hawaii"
				   ] ),
		     `HBox(
			   `PushButton(`id(`todays_special), `opt(`hstretch), "&Today's special" ),
			   `PushButton(`id(`veggie),         `opt(`hstretch), "&Veggie" )
			   ),
		     `PushButton(`id(`ok), `opt(`default), "&OK")
		     )
	       );

    any id = nil;
    
    repeat
	{
	    id = UI::UserInput();

	    if      ( id == `todays_special ) UI::ChangeWidget( `id( `pizza ), `CurrentItem, "Napoli" );
	    else if ( id == `veggie         ) UI::ChangeWidget( `id( `pizza ), `CurrentItem, "Funghi" );
	} until ( id == `ok );

    // Get the input from the selection box.
    //
    // Notice: The return value of UI::UserInput() does NOT return this value!
    // Rather, it returns the ID of the widget (normally the PushButton)
    // that caused UI::UserInput() to return.
    string pizza = (string) UI::QueryWidget(`id(`pizza), `CurrentItem);
    
    // Close the dialog.
    // Remember to read values from the dialog's widgets BEFORE closing it!
    UI::CloseDialog();

    
    // Pop up a new dialog to echo the selection.
    UI::OpenDialog(
	       `VBox(
		     `Label("Pizza " + pizza + " coming right up"),
		     `PushButton(`opt(`default), "&OK")
		     )
	       );
    UI::UserInput();
    
    UI::CloseDialog();
}

        
          // Selection box with icons
{
    UI::OpenDialog(
		   `VBox(
			 `Heading( "YaST2 Mini Control Center" ),
			 `SelectionBox(`id(`mod ),
				       "Modules",
				       [
					`item(`id( "keyboard"	), `icon( "yast-keyboard.png"	), "Keyboard"	),
					`item(`id( "mouse"	), `icon( "yast-mouse.png" 	), "Mouse"      ),
					`item(`id( "timezone"	), `icon( "yast-timezone.png" 	), "Time zone"  ),
					`item(`id( "lan"	), `icon( "yast-lan.png" 	), "Network"    ),
					`item(`id( "sw_single"	), `icon( "yast-software.png" 	), "Software"   )
					] ),
			 `PushButton("&OK")
			 )
		   );
    UI::UserInput();

    // Get the input from the selection box.
    //
    // Notice: The return value of UI::UserInput() does NOT return this value!
    // Rather, it returns the ID of the widget (normally the PushButton)
    // that caused UI::UserInput() to return.
    string mod = (string) UI::QueryWidget(`id(`mod ), `CurrentItem);
    
    // Close the dialog.
    // Remember to read values from the dialog's widgets BEFORE closing it!
    UI::CloseDialog();

}

        
          // Example showing how to replace SelectionBox items
{

    list pizza_list =
	[
	 "Pizza Napoli",
	 "Pizza Funghi",
	 "Pizza Salami",
	 "Pizza Hawaii"
	 ];

    list pasta_list =
	[
	 "Spaghetti",
	 "Rigatoni",
	 "Tortellini"
	 ];

    UI::OpenDialog( `VBox(
			  `SelectionBox(`id(`menu), "Daily &Specials:", pizza_list ),
			  `HBox(
				`PushButton(`id(`pizza), "Pi&zza" ),
				`PushButton(`id(`pasta), "&Pasta" ),
				`PushButton(`id(`diet ), "Strict &Diet" )
				),
			  `PushButton(`id(`ok), "&OK" )
			  )
		    );

    symbol button = nil;

    do
    {
	button = (symbol) UI::UserInput();

	if ( button == `pizza )		UI::ChangeWidget(`menu, `Items, pizza_list );
	if ( button == `pasta )		UI::ChangeWidget(`menu, `Items, pasta_list );
	if ( button == `diet  )		UI::ChangeWidget(`menu, `Items, [] );
	
    } while ( button != `ok );

    string order = (string) UI::QueryWidget(`menu, `CurrentItem );
    UI::CloseDialog();


    //
    // Show the result
    //
    
    UI::OpenDialog(`VBox(
			 `Label( sformat( "Your order: %1", order ) ),
			 `PushButton(`opt(`default), "&OK" )
			 )
		   );
    UI::UserInput();
    UI::CloseDialog();
}

        
          // Example showing how to replace SelectionBox items
{

    list pizza_list =
	[
	 `item(`id("Pizza #01"), "Pizza Napoli" ),
	 `item(`id("Pizza #02"), "Pizza Funghi" ),
	 `item(`id("Pizza #03"), "Pizza Salami", true ),
	 `item(`id("Pizza #04"), "Pizza Hawaii" )
	 ];

    list pasta_list =
	[
	 `item(`id("Pasta #11"), "Spaghetti"  ),
	 `item(`id("Pasta #12"), "Rigatoni", true   ),
	 `item(`id("Pasta #13"), "Tortellini" )
	 ];

    UI::OpenDialog( `VBox(
			  `SelectionBox(`id(`menu), "Daily &Specials:", pizza_list ),
			  `HBox(
				`PushButton(`id(`pizza), "Pi&zza" ),
				`PushButton(`id(`pasta), "&Pasta" )
				),
			  `PushButton(`id(`ok), "&OK" )
			  )
		    );

    symbol button = nil;

    do
    {
	button = (symbol) UI::UserInput();

	if ( button == `pizza )		UI::ChangeWidget(`menu, `Items, pizza_list );
	if ( button == `pasta )		UI::ChangeWidget(`menu, `Items, pasta_list );
	
    } while ( button != `ok );

    string order = (string) UI::QueryWidget(`menu, `CurrentItem );
    UI::CloseDialog();


    //
    // Show the result
    //
    
    UI::OpenDialog(`VBox(
			 `Label( sformat( "Your order: %1", order ) ),
			 `PushButton(`opt(`default), "&OK" )
			 )
		   );
    UI::UserInput();
    UI::CloseDialog();
}