|
Class: RadioButtonGroup
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
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.
RadioButton
Toggle
CheckBox
CheckToggle
Button
Model
ValueHolder
SelectionInList
helpers
-
adaptorFor: someValueHolder value: buttonValue
-
create and return an adaptor for a radioButton
adding & removing
-
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
-
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
-
numberOfValues
-
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.
|
|