PluggableAdaptor subclass:#TypeConverter
instanceVariableNames:''
classVariableNames:''
poolDictionaries:''
category:'Interface-Support-Models'
!
!TypeConverter class methodsFor:'documentation'!
documentation
"
a typeConverter can be used as an editFields model,
to convert the fields string value to some object.
No real new functionality is added here - all is inherited
from PluggableAdapter; however, some specialized instance creation
methods are added here..
Notice:
this class was implemented using protocol information
from alpha testers - it may not be complete or compatible to
the corresponding ST-80 class.
If you encounter any incompatibilities, please forward a note
describing the incompatibility verbal (i.e. no code) to the ST/X team.
[author:]
Claus Gittinger
"
!
examples
"
convert a number to a string:
[exBegin]
|v t i|
v := 1 asValue.
t := HorizontalPanelView new.
t extent:200@50.
t horizontalLayout:#fitSpace.
i := EditField in:t.
i model:(TypeConverter onNumberValue:v).
t open.
(Delay forSeconds:3) wait.
v value:2.
[exEnd]
"
! !
!TypeConverter class methodsFor:'instance creation'!
onNumberValue:aValueHolder
"create and return a typeConverter, which retrieves
a values string representation via #value, and converts
a number-string to a value via #value:.
Useful as an editFields model, which operates on some
numeric value (or aspectAdaptor, which adapts to a numeric slot)"
^ (self on:aValueHolder) numberToText
"Modified: 21.2.1997 / 18:46:11 / cg"
!
onSymbolValue:aValueHolder
"create and return a typeConverter, which retrieves
a symbol-values string representation via #value, and converts
a string to a symbol via #value:.
Useful as an editFields model, which operates on some
numeric value (or aspectAdaptor, which adapts to a numeric slot)"
^ (self on:aValueHolder) symbolOrNil
"Modified: 21.2.1997 / 18:46:11 / cg"
! !
!TypeConverter methodsFor:'accessing'!
subject
"return the cobverted subject"
^ model
"Created: 21.2.1997 / 18:45:12 / cg"
!
value:newValue
"convert and change"
self setValue:newValue
"Created: 21.2.1997 / 18:45:39 / cg"
! !
!TypeConverter methodsFor:'initialize-release'!
numberOrNil
"setup the converter to convert from a string to a number
and vice versa. Invalid numbers are converted to nil."
self
getBlock:[:model |
|numericValue|
(numericValue := model value) isNil ifTrue:[
String new
] ifFalse:[
numericValue printString
]]
putBlock:
[:model :string |
|value|
string isEmpty ifTrue:[
value := nil
] ifFalse:[
value := string asNumber
].
model value:value]
updateBlock: [:m :a :p | true]
"Created: 21.2.1997 / 18:58:38 / cg"
!
numberToText
"setup the converter to convert from a string to a number
and vice versa, using formatString."
self
getBlock:[:model |
|numericValue|
(numericValue := model value) isNil ifTrue:[
String new
] ifFalse:[
numericValue printString
]]
putBlock:
[:model :string |
|value|
string isEmpty ifTrue:[
value := 0
] ifFalse:[
value := string asNumber
].
model value:value]
updateBlock: [:m :a :p | true]
"Created: 21.2.1997 / 18:57:05 / cg"
"Modified: 21.2.1997 / 18:59:06 / cg"
!
numberToTextFormattedBy:formatString
"setup the converter to convert from a string to a number
and vice versa, using formatString.
The formatString is currently ignored when numbers are converted
from a string."
self
getBlock:[:model |
|numericValue|
(numericValue := model value) isNil ifTrue:[
String new
] ifFalse:[
PrintConverter print:numericValue formattedBy:formatString
]]
putBlock:
[:model :string |
|value|
string isEmpty ifTrue:[
value := 0
] ifFalse:[
value := string asNumber "asNumberFromFormatString:formatString"
].
model value:value]
updateBlock: [:m :a :p | true]
"Modified: 21.2.1997 / 18:59:44 / cg"
!
symbolOrNil
"setup the converter to convert from a string to a symbol
and vice versa. Invalid symbols (i.e. empty) are converted to nil."
self
getBlock:[:model |
|symbolValue|
(symbolValue := model value) isNil ifTrue:[
String new
] ifFalse:[
'#' , symbolValue asString
]]
putBlock:
[:model :string |
|value s|
string isEmpty ifTrue:[
value := nil
] ifFalse:[
s := string withoutSeparators.
(s startsWith:'#') ifTrue:[
s := s copyFrom:2
].
value := s asSymbol
].
model value:value]
updateBlock: [:m :a :p | true]
"Created: 21.2.1997 / 18:58:38 / cg"
! !
!TypeConverter class methodsFor:'documentation'!
version
^ '$Header: /cvs/stx/stx/libview2/TypeConverter.st,v 1.2 1997-02-24 18:05:08 ca Exp $'
! !