Name

CheckBox — Clickable on/off toggle button

Synopsis

CheckBox ( string label ,
  boolean|nil checked );
 

Parameters

string label

the text describing the check box

Options

boldFont

use a bold font

Optional Arguments

boolean|nil checked

whether the check box should start checked - nil means tristate condition, i.e. neither on nor off

Description

A checkbox widget has two states: Checked and not checked. It returns no user input but you can query and change its state via the Value property.

Usage

 	`CheckBox( `id( `cheese ), "& Extra cheese" )

Examples

          {
    UI::OpenDialog(
	       `CheckBox("A &checked check box\nwith multi-line", true)
	       );
    UI::UserInput();
    UI::CloseDialog();
}

        
          {
    UI::OpenDialog(
	       `VBox(
		     `Label("Select your extras"),
		     `Left(`CheckBox(`id(`cheese), "Extra Cheese")),
		     `Left(`CheckBox(`id(`pepr),   "Pepperoni", true)),
		     `PushButton("&OK")
		     )
	       );
    UI::UserInput();
    boolean cheese = (boolean) UI::QueryWidget(`cheese, `Value);
    boolean pepr   = (boolean) UI::QueryWidget(`pepr,   `Value);
    UI::CloseDialog();

    define string yesno(boolean b) ``{ if (b) return "yes"; else return "no"; };

    UI::OpenDialog(
	       `VBox(
		     `Left(`Label("Extra Cheese: " + yesno(cheese))),
		     `Left(`Label("Pepperoni: "    + yesno(pepr))),
		     `PushButton("&OK")
		     )
	       );
    UI::UserInput();
    UI::CloseDialog();
}

	       

        
          {
    // Build dialog with one check box and buttons to set its state to
    // on, off or "don't care" (tri-state).
    
    UI::OpenDialog(
	       `VBox( 
		     `CheckBox(`id(`cb), "Format hard disk"),
		     `HBox(
			   `HWeight(1, `PushButton(`id(`setOn ),   "Set on"     ) ),
			   `HWeight(1, `PushButton(`id(`setOff),   "Set off"    ) ),
			   `HWeight(1, `PushButton(`id(`dontCare), "Don't care" ) )
			   ),
		     `PushButton(`id(`ok), "&OK")
		     )
	       );

    
    // Input loop. Will be left only after 'OK' is clicked.

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

	    if      ( button == `setOn    ) UI::ChangeWidget ( `id(`cb), `Value, true  );
	    else if ( button == `setOff   ) UI::ChangeWidget ( `id(`cb), `Value, false );
	    else if ( button == `dontCare ) UI::ChangeWidget ( `id(`cb), `Value, nil   );
	} until ( button == `ok );
	

    // Get the check box's value.
    //
    // 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.
    
    boolean cb_val = (boolean) UI::QueryWidget(`id(`cb), `Value);
    
    // Close the dialog.
    // Remember to read values from the dialog's widgets BEFORE closing it!
    UI::CloseDialog();

    // Convert the check box value to string.
    string valStr = "Don't care";
    if ( cb_val == true  ) valStr = "Yes";
    if ( cb_val == false ) valStr = "No";
    
    // Pop up a new dialog to echo the input.
    UI::OpenDialog(
	       `VBox(
		     `Label("Your selection:"),
		     `Label(valStr),
		     `PushButton("&OK")
		     )
	       );
    UI::UserInput();
    UI::CloseDialog();
}

        
          {
    UI::OpenDialog(
	       `VBox(
		     `Label("Select your extras"),
		     `Left(`CheckBox(`id(`cheese), "Extra Cheese")),
		     `Left(`CheckBox(`id(`pepr),   "Pepperoni", true)),
		     `Left(`CheckBox(`id(`salami), `opt(`boldFont), "Extra Salami")),
		     `PushButton("&OK")
		     )
	       );
    UI::UserInput();
    boolean cheese = (boolean) UI::QueryWidget(`cheese, `Value);
    boolean pepr   = (boolean) UI::QueryWidget(`pepr,   `Value);
    boolean salami = (boolean) UI::QueryWidget(`salami, `Value);
    UI::CloseDialog();

    define string yesno(boolean b) ``{ if (b) return "yes"; else return "no"; };

    UI::OpenDialog(
	       `VBox(
		     `Left(`Label("Extra Cheese: " + yesno(cheese))),
		     `Left(`Label("Pepperoni: "    + yesno(pepr))),
		     `Left(`Label("Extra Salami: " + yesno(salami))),
		     `PushButton("&OK")
		     )
	       );
    UI::UserInput();
    UI::CloseDialog();
}