class: TypeConverter
added: #symbolOrNumberOrNil
changed:
#numberWithOptionalScale
#possiblePrintConverterTypes
--- a/TypeConverter.st Sat Aug 10 13:25:55 2013 +0200
+++ b/TypeConverter.st Fri Aug 23 12:28:38 2013 +0200
@@ -287,18 +287,25 @@
#numberOrNil
#numberInRangeOrNil
#numberOrPointOrNil
+ #numberOrStringOrSymbolOrNil
+ #numberOrSymbolOrNil
+ #numberWithOptionalScale
+ #integer
#integerInRange
#integerWithThousandsSeparator
#fileSize
#hexadecimal
#hexIntegerInRange
#symbolOrNil
+ #symbolOrBooleanOrNil
+ #symbolOrNumberOrNil
#smalltalkObject
#smalltalkPoint
+ #literal
+ #date
+ #dateOrNil
#dateDDMMYYYY
#dateMMDDYYYY
- #date
- #dateOrNil
#time12H
#time24H
#time
@@ -1202,6 +1209,47 @@
"Created: / 21.2.1997 / 18:58:38 / cg"
"Modified: / 26.5.1998 / 15:06:06 / cg"
+!
+
+symbolOrNumberOrNil
+ "setup the converter to convert from a string to a symbol or number
+ and vice versa. Invalid symbols (i.e. empty) are converted to nil;
+ nil values are converted to an empty string."
+
+ self
+ getBlock:[:model |
+ |symbolValue|
+
+ ((symbolValue := model value) isSymbol
+ or:[symbolValue isNumber])
+ ifFalse:[
+ ''
+ ] ifTrue:[
+ symbolValue storeString.
+ ]]
+
+ putBlock:
+ [:model :string |
+
+ |value s|
+
+ string size == 0 ifTrue:[
+ value := nil
+ ] ifFalse:[
+ s := string withoutSeparators.
+ (s startsWith:'#') ifTrue:[
+ s := s copyFrom:2.
+ (s startsWith:$') ifTrue:[
+ s := s copyFrom:2 to:(s size - 1)
+ ].
+ value := s asSymbol
+ ] ifFalse:[
+ value := Number readFromString:s onError:[s asSymbol].
+ ].
+ ].
+ model value:value]
+
+ updateBlock: [:m :a :p | true]
! !
!TypeConverter methodsFor:'standard converters-numbers'!
@@ -1749,6 +1797,7 @@
|scaleDict|
scaleDict := Dictionary withKeysAndValues:#(
+ $g 1000000000
$m 1000000
$k 1000
$t 1000
@@ -1878,10 +1927,10 @@
!TypeConverter class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libview2/TypeConverter.st,v 1.69 2013-03-10 16:55:55 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libview2/TypeConverter.st,v 1.70 2013-08-23 10:28:38 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libview2/TypeConverter.st,v 1.69 2013-03-10 16:55:55 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libview2/TypeConverter.st,v 1.70 2013-08-23 10:28:38 cg Exp $'
! !