--- a/RButtGrp.st Wed Sep 08 20:14:57 1999 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,307 +0,0 @@
-"
- COPYRIGHT (c) 1991 by Claus Gittinger
- All Rights Reserved
-
- This software is furnished under a license and may be used
- only in accordance with the terms of that license and with the
- inclusion of the above copyright notice. This software may not
- be provided or otherwise made available to, or used by, any
- other person. No title to or ownership of the software is
- hereby transferred.
-"
-
-ValueHolder subclass:#RadioButtonGroup
- instanceVariableNames:'numberOfValues'
- classVariableNames:''
- poolDictionaries:''
- category:'Views-Support'
-!
-
-!RadioButtonGroup class methodsFor:'documentation '!
-
-copyright
-"
- COPYRIGHT (c) 1991 by Claus Gittinger
- All Rights Reserved
-
- This software is furnished under a license and may be used
- only in accordance with the terms of that license and with the
- inclusion of the above copyright notice. This software may not
- be provided or otherwise made available to, or used by, any
- other person. No title to or ownership of the software is
- hereby transferred.
-"
-!
-
-documentation
-"
- 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.
-
- [author:]
- Claus Gittinger
-
- [see also:]
- RadioButton Toggle CheckBox CheckToggle Button
- Model ValueHolder SelectionInList
-"
-
- "Modified: 1.3.1997 / 14:11:57 / cg"
-!
-
-examples
-"
- using Toggles for 'at most one-on behavior':
- [exBegin]
- |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.
- [exEnd]
-
-
- using RadioButtons for 'one-on behavior':
- [exBegin]
- |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.
- [exEnd]
-
-
- same, with initial selection:
- [exBegin]
- |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.
- [exEnd]
-
-
- 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:
- [exBegin]
- |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
- [exEnd]
-
-
- using checkBoxes (these have a label included).
- notice, that we change their behavior to radioButton behavior:
- [exBegin]
- |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.
- [exEnd]
-
-
- a small dialog
- [exBegin]
- |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'
- ]
- [exEnd]
-
- as a selectionIndexHolder of a selectionInList
- (i.e. a selectionInListView and a group displaying the same selection):
- [exBegin]
- |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.
- [exEnd]
-"
-
- "Created: / 15.11.1995 / 17:14:53 / cg"
- "Modified: / 30.10.1997 / 20:18:25 / cg"
-!
-
-version
- ^ '$Header: /cvs/stx/stx/libwidg/Attic/RButtGrp.st,v 1.30 1999-03-22 21:57:33 cg Exp $'
-! !
-
-!RadioButtonGroup class methodsFor:'helpers'!
-
-adaptorFor:someValueHolder value:buttonValue
- "create and return an adaptor for a radioButton"
-
- |adaptor|
-
- adaptor := PluggableAdaptor on:someValueHolder.
-
- "/ the adapter plays boolean-value holder towards
- "/ the radioButton, returning true iff the groups
- "/ value is the same as the buttons index-value; false otherwise.
- "/ Likewise, a true-store from the button sets the group value
- "/ to the buttons index.
-
- adaptor getBlock:[:m | (m value = buttonValue) ]
- putBlock:[:m :onOff |
- onOff ifTrue:[
- m value:buttonValue
- ] ifFalse:[
- "/ support for toggles
- buttonValue = m value ifTrue:[
- m value:nil
- ]
- ]
- ]
- updateBlock:[:m :a :v | true].
-
- ^ adaptor
-
- "Created: / 30.10.1997 / 19:45:34 / cg"
- "Modified: / 30.10.1997 / 20:14:25 / cg"
-! !
-
-!RadioButtonGroup methodsFor:'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
- "
- self add:aRadioButton value:nil
-!
-
-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"
-
- |adaptor selectValue|
-
- numberOfValues := (numberOfValues ? 0) + 1.
- selectValue := aValueOrNil ? numberOfValues.
-
- "/ the adapter plays boolean-value holder towards
- "/ the radioButton, returning true iff the groups
- "/ value is the same as the buttons index-value; false otherwise.
- "/ Likewise, a true-store from the button sets the group value
- "/ to the buttons index.
-
- adaptor := self class adaptorFor:self value:selectValue.
- aRadioButton isOn ifTrue:[
- self value:selectValue.
- ].
- aRadioButton model:adaptor.
-
- "Modified: / 30.10.1997 / 20:14:54 / cg"
-! !
-