eXept Software AG Logo

Smalltalk/X Webserver

Documentation of class 'RadioButtonGroup':

Home

Documentation
www.exept.de
Everywhere
for:
[back]

Class: RadioButtonGroup


Inheritance:

   Object
   |
   +--Model
      |
      +--ValueModel
         |
         +--ValueHolder
            |
            +--RadioButtonGroup

Package:
stx:libwidg
Category:
Views-Support
Version:
rev: 1.33 date: 2002/11/11 09:49:19
user: cg
file: RadioButtonGroup.st directory: libwidg
module: stx stc-classLibrary: libwidg
Author:
Claus Gittinger

Description:


RadioButtonGroups control the interaction between RadioButtons
turning off other button(s) when one of the group is pressed.
To group some buttons (and have one-on behavior) use:

    |g|

    g := RadioButtonGroup new.
    ...
    b1 := RadioButton label:....
    g add:b1
    ...
    b2 := RadioButton label:....
    g add:b2
    ...

A radioButtonGroup is itself usable as a model, holding the index of
the selected button. It can be used as a selectionIndexHolder of a
SelectionInList instance.


Related information:

    RadioButton
    Toggle
    CheckBox
    CheckToggle
    Button
    Model
    ValueHolder
    SelectionInList

Class protocol:

helpers
o  adaptorFor: someValueHolder value: buttonValue
create and return an adaptor for a radioButton


Instance protocol:

adding & removing
o  add: aRadioButton
add a radioButton to the group - actually, this name is misleading;
it simple creates an adaptor, which converts my value into a boolean,
depending on the buttons index-number

o  add: aRadioButton value: aValueOrNil
add a radioButton to the group - actually, this name is misleading;
it simply creates an adaptor, which converts my value into a boolean,
depending on the buttons index-number or aValueOrNil

queries
o  numberOfValues


Examples:


using Toggles for 'at most one-on behavior':
    |top panel b group|

    top := StandardSystemView label:'toggles'.
    panel := HorizontalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
    group := RadioButtonGroup new.
    b := Toggle label:'one' in:panel.
    group add:b.
    b := Toggle label:'two' in:panel.
    group add:b.
    b := Toggle label:'three' in:panel.
    group add:b.
    top extent:(panel preferredExtent).
    top open.
using RadioButtons for 'one-on behavior':
    |top panel b group|

    top := StandardSystemView label:'radio'.
    panel := HorizontalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
    group := RadioButtonGroup new.
    b := RadioButton label:'one' in:panel.
    group add:b.
    b := RadioButton label:'two' in:panel.
    group add:b.
    b := RadioButton label:'three' in:panel.
    group add:b.
    top extent:(panel preferredExtent).
    top open.
same, with initial selection:
    |top panel b group|

    top := StandardSystemView label:'radio'.
    panel := HorizontalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
    group := RadioButtonGroup new.
    b := RadioButton label:'one' in:panel.
    group add:b.
    b := RadioButton label:'two' in:panel.
    group add:b.
    b := RadioButton label:'three' in:panel.
    group add:b.
    top extent:(panel preferredExtent).

    group value:1.
    top open.
using Buttons for 'none-on behavior'; buttons do not show the boolean state (they only fire); however, the groups value remembers the last pressed button:
    |top panel b group|

    top := StandardSystemView new.
    panel := HorizontalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
    group := RadioButtonGroup new.
    b := Button label:'one' in:panel.
    group add:b.
    b := Button label:'two' in:panel.
    group add:b.
    b := Button label:'three' in:panel.
    group add:b.
    top extent:(panel preferredExtent).
    top open.

    group inspect
using checkBoxes (these have a label included). notice, that we change their behavior to radioButton behavior:
    |top panel b group|

    top := StandardSystemView new.
    panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
    panel horizontalLayout:#left.
    group := RadioButtonGroup new.
    b := CheckBox label:'one' in:panel.
    b controller beRadioButton.
    group add:b.
    b := CheckBox label:'two' in:panel.
    b controller beRadioButton.
    group add:b.
    b := CheckBox label:'three' in:panel.
    b controller beRadioButton.
    group add:b.
    top extent:(panel preferredExtent).
    top open.
a small dialog
    |dialog group b|

    dialog := Dialog new.

    group := RadioButtonGroup new.
    group add:(b := dialog addCheckBox:'one' on:nil).
    b controller beRadioButton.
    group add:(b := dialog addCheckBox:'two' on:nil).
    b controller beRadioButton.
    group add:(b := dialog addCheckBox:'three' on:nil).
    b controller beRadioButton.
    group value:2.
    dialog addAbortButton; addOkButton.
    dialog open.

    dialog accepted ifTrue:[
        Transcript showCR:'you selected: ' , group value printString
    ] ifFalse:[
        Transcript showCR:'aborted'
    ]
as a selectionIndexHolder of a selectionInList (i.e. a selectionInListView and a group displaying the same selection):
|top top2 panel b sv group selectionInList|

top := StandardSystemView extent:200@200.

panel := HorizontalPanelView
            origin:0.0@0.0 corner:1.0@1.0 in:top.

group := RadioButtonGroup new.
selectionInList := SelectionInList new.
selectionInList list:#('am' 'fm' 'off').
selectionInList selectionIndexHolder:group.

b := RadioButton label:'am' in:panel.
group add:b.

b := RadioButton label:'fm' in:panel.
group add:b.

b := RadioButton label:'off' in:panel.
group add:b.

group value:1.
top open.


top2 := StandardSystemView extent:200@200.
sv := SelectionInListView in:top2.
sv model:selectionInList.
sv origin:0.0@0.0 corner:1.0@1.0.
top2 open.


ST/X 7.2.0.0; WebServer 1.670 at bd0aa1f87cdd.unknown:8081; Fri, 26 Apr 2024 07:41:35 GMT