PrintConverter.st
author Claus Gittinger <cg@exept.de>
Tue, 03 Sep 2013 17:23:55 +0200
changeset 3228 187a4158a51a
parent 1467 035afe3aa0ed
child 3458 9fcc98d525df
permissions -rw-r--r--
class: FlyByHelp changed: #initiateHelpFor:at:now: #showHelp:for: changed the flyBy suppression slightly: if the same text is to be shown again, do not show it except if the help is for another widget. (used to check for the text only previously)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
75
claus
parents: 69
diff changeset
     1
"
claus
parents: 69
diff changeset
     2
 COPYRIGHT (c) 1995 by Claus Gittinger
claus
parents: 69
diff changeset
     3
	      All Rights Reserved
claus
parents: 69
diff changeset
     4
claus
parents: 69
diff changeset
     5
 This software is furnished under a license and may be used
claus
parents: 69
diff changeset
     6
 only in accordance with the terms of that license and with the
claus
parents: 69
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
claus
parents: 69
diff changeset
     8
 be provided or otherwise made available to, or used by, any
claus
parents: 69
diff changeset
     9
 other person.  No title to or ownership of the software is
claus
parents: 69
diff changeset
    10
 hereby transferred.
claus
parents: 69
diff changeset
    11
"
claus
parents: 69
diff changeset
    12
1467
035afe3aa0ed Use ISO-639 Language abbreviations
Stefan Vogel <sv@exept.de>
parents: 1191
diff changeset
    13
"{ Package: 'stx:libview2' }"
035afe3aa0ed Use ISO-639 Language abbreviations
Stefan Vogel <sv@exept.de>
parents: 1191
diff changeset
    14
212
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    15
Object subclass:#PrintConverter
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    16
	instanceVariableNames:'valueToStringBlock stringToValueBlock type'
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    17
	classVariableNames:''
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    18
	poolDictionaries:''
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    19
	category:'Interface-Support'
67
e48bf03eb059 Initial revision
claus
parents:
diff changeset
    20
!
e48bf03eb059 Initial revision
claus
parents:
diff changeset
    21
e48bf03eb059 Initial revision
claus
parents:
diff changeset
    22
!PrintConverter class methodsFor:'documentation'!
e48bf03eb059 Initial revision
claus
parents:
diff changeset
    23
75
claus
parents: 69
diff changeset
    24
copyright
claus
parents: 69
diff changeset
    25
"
claus
parents: 69
diff changeset
    26
 COPYRIGHT (c) 1995 by Claus Gittinger
claus
parents: 69
diff changeset
    27
	      All Rights Reserved
claus
parents: 69
diff changeset
    28
claus
parents: 69
diff changeset
    29
 This software is furnished under a license and may be used
claus
parents: 69
diff changeset
    30
 only in accordance with the terms of that license and with the
claus
parents: 69
diff changeset
    31
 inclusion of the above copyright notice.   This software may not
claus
parents: 69
diff changeset
    32
 be provided or otherwise made available to, or used by, any
claus
parents: 69
diff changeset
    33
 other person.  No title to or ownership of the software is
claus
parents: 69
diff changeset
    34
 hereby transferred.
claus
parents: 69
diff changeset
    35
"
claus
parents: 69
diff changeset
    36
!
claus
parents: 69
diff changeset
    37
67
e48bf03eb059 Initial revision
claus
parents:
diff changeset
    38
documentation
e48bf03eb059 Initial revision
claus
parents:
diff changeset
    39
"
86
claus
parents: 83
diff changeset
    40
    printConverters can be used with labels and editFields to convert 
claus
parents: 83
diff changeset
    41
    an object to/from some printed representation.
67
e48bf03eb059 Initial revision
claus
parents:
diff changeset
    42
    Conversion is done via two blocks which can be set at instance
e48bf03eb059 Initial revision
claus
parents:
diff changeset
    43
    creation time - either as custom blocks ot to one of the
86
claus
parents: 83
diff changeset
    44
    standard conversions. There are a number of standard setups, for
claus
parents: 83
diff changeset
    45
    common conversions; if none of them fits your needs, create a custom
claus
parents: 83
diff changeset
    46
    converter, by defining its two conversion blocks.
67
e48bf03eb059 Initial revision
claus
parents:
diff changeset
    47
e48bf03eb059 Initial revision
claus
parents:
diff changeset
    48
    Notice: this class was implemented using protocol information
e48bf03eb059 Initial revision
claus
parents:
diff changeset
    49
    from alpha testers - it may not be complete or compatible to
e48bf03eb059 Initial revision
claus
parents:
diff changeset
    50
    the corresponding ST-80 class. If you encounter any incompatibilities,
e48bf03eb059 Initial revision
claus
parents:
diff changeset
    51
    please forward a note to the ST/X team.
222
c51b06f6bf9a documentation
Claus Gittinger <cg@exept.de>
parents: 212
diff changeset
    52
c51b06f6bf9a documentation
Claus Gittinger <cg@exept.de>
parents: 212
diff changeset
    53
    [author:]
c51b06f6bf9a documentation
Claus Gittinger <cg@exept.de>
parents: 212
diff changeset
    54
        Claus Gittinger
67
e48bf03eb059 Initial revision
claus
parents:
diff changeset
    55
"
e48bf03eb059 Initial revision
claus
parents:
diff changeset
    56
!
e48bf03eb059 Initial revision
claus
parents:
diff changeset
    57
e48bf03eb059 Initial revision
claus
parents:
diff changeset
    58
examples 
e48bf03eb059 Initial revision
claus
parents:
diff changeset
    59
"
86
claus
parents: 83
diff changeset
    60
  stupid examples:
claus
parents: 83
diff changeset
    61
    convert date <-> string:
230
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    62
                                                                        [exBegin]
69
claus
parents: 68
diff changeset
    63
      |conv|
67
e48bf03eb059 Initial revision
claus
parents:
diff changeset
    64
69
claus
parents: 68
diff changeset
    65
      conv := (PrintConverter new)
230
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    66
                  toPrint:[:date | date printString]
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    67
                  toRead:[:string | Date readFromString:string].
69
claus
parents: 68
diff changeset
    68
      (conv printStringFor:(Date today)) inspect.
claus
parents: 68
diff changeset
    69
      (conv readValueFrom:(Date today printString)) inspect
230
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    70
                                                                        [exEnd]
69
claus
parents: 68
diff changeset
    71
claus
parents: 68
diff changeset
    72
86
claus
parents: 83
diff changeset
    73
    convert number <-> string:
230
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    74
                                                                        [exBegin]
69
claus
parents: 68
diff changeset
    75
      |conv|
claus
parents: 68
diff changeset
    76
claus
parents: 68
diff changeset
    77
      conv := (PrintConverter new) initForNumber.
claus
parents: 68
diff changeset
    78
      (conv printStringFor:12345) inspect.
claus
parents: 68
diff changeset
    79
      (conv readValueFrom:'12345') inspect
230
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    80
                                                                        [exEnd]
67
e48bf03eb059 Initial revision
claus
parents:
diff changeset
    81
e48bf03eb059 Initial revision
claus
parents:
diff changeset
    82
86
claus
parents: 83
diff changeset
    83
    convert boolean <-> string:
230
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    84
                                                                        [exBegin]
69
claus
parents: 68
diff changeset
    85
      |conv|
claus
parents: 68
diff changeset
    86
claus
parents: 68
diff changeset
    87
      conv := (PrintConverter new) initForYesNo.
claus
parents: 68
diff changeset
    88
      (conv printStringFor:true).  
claus
parents: 68
diff changeset
    89
      (conv printStringFor:false).    
claus
parents: 68
diff changeset
    90
      (conv readValueFrom:'yes').  
claus
parents: 68
diff changeset
    91
      (conv readValueFrom:'no').  
1467
035afe3aa0ed Use ISO-639 Language abbreviations
Stefan Vogel <sv@exept.de>
parents: 1191
diff changeset
    92
      'if language is #de:'.
69
claus
parents: 68
diff changeset
    93
      (conv readValueFrom:'ja').    
claus
parents: 68
diff changeset
    94
      (conv readValueFrom:'nein')  
230
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    95
                                                                        [exEnd]
69
claus
parents: 68
diff changeset
    96
86
claus
parents: 83
diff changeset
    97
  concrete examples: 
claus
parents: 83
diff changeset
    98
    convert in an inputField:
230
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    99
                                                                        [exBegin]
69
claus
parents: 68
diff changeset
   100
      |dialog field|
claus
parents: 68
diff changeset
   101
claus
parents: 68
diff changeset
   102
      dialog := Dialog new.
claus
parents: 68
diff changeset
   103
      dialog addTextLabel:'a number (and only numbers):'.
claus
parents: 68
diff changeset
   104
      dialog addVerticalSpace.
claus
parents: 68
diff changeset
   105
      field := dialog addInputFieldOn:(0 asValue).
claus
parents: 68
diff changeset
   106
      field converter:(PrintConverter new initForNumber).
claus
parents: 68
diff changeset
   107
      field immediateAccept:true.
claus
parents: 68
diff changeset
   108
      dialog addOkButton.
claus
parents: 68
diff changeset
   109
      dialog open.
claus
parents: 68
diff changeset
   110
      dialog accepted ifTrue:[
268
1998023f12dc showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 230
diff changeset
   111
          Transcript showCR:field editValue
69
claus
parents: 68
diff changeset
   112
      ]
230
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   113
                                                                        [exEnd]
67
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   114
86
claus
parents: 83
diff changeset
   115
    convert a models value for a label:
230
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   116
                                                                        [exBegin]
86
claus
parents: 83
diff changeset
   117
      |top v1 v2 l1 l2|
claus
parents: 83
diff changeset
   118
claus
parents: 83
diff changeset
   119
      v1 := 0 asValue.
claus
parents: 83
diff changeset
   120
      v2 := Date today asValue.
claus
parents: 83
diff changeset
   121
claus
parents: 83
diff changeset
   122
      top := StandardSystemView new.
claus
parents: 83
diff changeset
   123
      top extent:200@200.
claus
parents: 83
diff changeset
   124
claus
parents: 83
diff changeset
   125
      l1 := Label origin:0.0@0.0 corner:1.0@0.5 in:top.
claus
parents: 83
diff changeset
   126
      l1 converter:(PrintConverter new initForInteger).
claus
parents: 83
diff changeset
   127
      l1 model:v1; labelMessage:#value; aspect:#value.
claus
parents: 83
diff changeset
   128
      l1 level:-1; inset:10.
claus
parents: 83
diff changeset
   129
claus
parents: 83
diff changeset
   130
      l2 := Label origin:0.0@0.5 corner:1.0@1.0 in:top.
claus
parents: 83
diff changeset
   131
      l2 converter:(PrintConverter new initForDate).
claus
parents: 83
diff changeset
   132
      l2 model:v2; labelMessage:#value; aspect:#value.
claus
parents: 83
diff changeset
   133
      l2 level:-1; inset:10.
claus
parents: 83
diff changeset
   134
claus
parents: 83
diff changeset
   135
      top open.
claus
parents: 83
diff changeset
   136
claus
parents: 83
diff changeset
   137
      'now, change the values ...'.
claus
parents: 83
diff changeset
   138
      [
230
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   139
        1 to:50 do:[:i|
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   140
            v1 value:(v1 value + 1).
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   141
            v2 value:(v2 value addDays:1).
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   142
            (Delay forSeconds:0.5) wait
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   143
        ]
86
claus
parents: 83
diff changeset
   144
      ] fork
230
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   145
                                                                        [exEnd]
86
claus
parents: 83
diff changeset
   146
claus
parents: 83
diff changeset
   147
    convert a models value for a label with limited precision
claus
parents: 83
diff changeset
   148
    float conversion:
230
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   149
                                                                        [exBegin]
86
claus
parents: 83
diff changeset
   150
      |top v l1 l2|
claus
parents: 83
diff changeset
   151
claus
parents: 83
diff changeset
   152
      v := 0.0 asValue.
claus
parents: 83
diff changeset
   153
claus
parents: 83
diff changeset
   154
      top := StandardSystemView new.
claus
parents: 83
diff changeset
   155
      top extent:200@200.
claus
parents: 83
diff changeset
   156
claus
parents: 83
diff changeset
   157
      l1 := Label origin:0.0@0.0 corner:1.0@0.5 in:top.
claus
parents: 83
diff changeset
   158
      l1 converter:(PrintConverter new initForFloat).
claus
parents: 83
diff changeset
   159
      l1 model:v; labelMessage:#value; aspect:#value.
claus
parents: 83
diff changeset
   160
      l1 level:-1; inset:10.
claus
parents: 83
diff changeset
   161
claus
parents: 83
diff changeset
   162
      l2 := Label origin:0.0@0.5 corner:1.0@1.0 in:top.
claus
parents: 83
diff changeset
   163
      l2 converter:(PrintConverter new initForFloatWithPrecision:2).
claus
parents: 83
diff changeset
   164
      l2 model:v; labelMessage:#value; aspect:#value.
claus
parents: 83
diff changeset
   165
      l2 level:-1; inset:10.
claus
parents: 83
diff changeset
   166
claus
parents: 83
diff changeset
   167
      top open.
claus
parents: 83
diff changeset
   168
claus
parents: 83
diff changeset
   169
      'now, change the values ...'.
claus
parents: 83
diff changeset
   170
      [
230
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   171
        1 to:100 do:[:i|
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   172
            v value:(v value + 0.005).
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   173
            (Delay forSeconds:0.5) wait
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   174
        ]
86
claus
parents: 83
diff changeset
   175
      ] fork
230
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   176
                                                                        [exEnd]
86
claus
parents: 83
diff changeset
   177
claus
parents: 83
diff changeset
   178
    a custom converter, converting a number to either 'odd'
claus
parents: 83
diff changeset
   179
    or 'even' strings (we only need a one-way converter for labels):
230
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   180
                                                                        [exBegin]
86
claus
parents: 83
diff changeset
   181
      |top v l1 l2|
claus
parents: 83
diff changeset
   182
claus
parents: 83
diff changeset
   183
      v := 0 asValue.
claus
parents: 83
diff changeset
   184
claus
parents: 83
diff changeset
   185
      top := StandardSystemView new.
claus
parents: 83
diff changeset
   186
      top extent:200@200.
claus
parents: 83
diff changeset
   187
claus
parents: 83
diff changeset
   188
      l1 := Label origin:0.0@0.0 corner:1.0@0.5 in:top.
claus
parents: 83
diff changeset
   189
      l1 converter:(PrintConverter new initForInteger).
claus
parents: 83
diff changeset
   190
      l1 model:v; labelMessage:#value; aspect:#value.
claus
parents: 83
diff changeset
   191
      l1 level:-1; inset:10.
claus
parents: 83
diff changeset
   192
claus
parents: 83
diff changeset
   193
      l2 := Label origin:0.0@0.5 corner:1.0@1.0 in:top.
claus
parents: 83
diff changeset
   194
      l2 converter:(PrintConverter 
230
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   195
                      new 
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   196
                          toPrint:[:num | num even ifTrue:['even'] 
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   197
                                                   ifFalse:['odd']]
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   198
                          toRead:[:string | ]).
86
claus
parents: 83
diff changeset
   199
      l2 model:v; labelMessage:#value; aspect:#value.
claus
parents: 83
diff changeset
   200
      l2 level:-1; inset:10.
claus
parents: 83
diff changeset
   201
claus
parents: 83
diff changeset
   202
      top open.
claus
parents: 83
diff changeset
   203
claus
parents: 83
diff changeset
   204
      'now, change the values ...'.
claus
parents: 83
diff changeset
   205
      [
230
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   206
        1 to:100 do:[:i|
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   207
            v value:(v value + 1).
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   208
            (Delay forSeconds:0.5) wait
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   209
        ]
86
claus
parents: 83
diff changeset
   210
      ] fork
230
a8e07181c763 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   211
                                                                        [exEnd]
67
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   212
69
claus
parents: 68
diff changeset
   213
    see more examples in the EditField examples.
67
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   214
"
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   215
! !
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   216
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   217
!PrintConverter class methodsFor:'instance creation'!
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   218
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   219
new
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   220
    ^ (super new) 
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   221
	toPrint:[:val | val]
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   222
	toRead:[:string | string]
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   223
! !
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   224
86
claus
parents: 83
diff changeset
   225
!PrintConverter class methodsFor:'utilities'!
claus
parents: 83
diff changeset
   226
claus
parents: 83
diff changeset
   227
print:aNumber formattedBy:formatString
claus
parents: 83
diff changeset
   228
    "take the digits of aNumbers printString, and squash them
claus
parents: 83
diff changeset
   229
     into formatString, where #-characters are replaced by
claus
parents: 83
diff changeset
   230
     successive characters from the printString.
claus
parents: 83
diff changeset
   231
     Warning: use with care - it does not check for decimal points etc.
claus
parents: 83
diff changeset
   232
	      the printString of aNumber must have enough digits for all
claus
parents: 83
diff changeset
   233
	      #-characters to be replaced.
claus
parents: 83
diff changeset
   234
	      Therefore, precheck the numbers value and use appropriate format
claus
parents: 83
diff changeset
   235
	      strings then.
claus
parents: 83
diff changeset
   236
     For number formatting, see also: printfPrintString: implementations."
claus
parents: 83
diff changeset
   237
claus
parents: 83
diff changeset
   238
    |pS fS out|
claus
parents: 83
diff changeset
   239
claus
parents: 83
diff changeset
   240
    pS := ReadStream on:aNumber printString.
claus
parents: 83
diff changeset
   241
    fS := ReadStream on:formatString.
claus
parents: 83
diff changeset
   242
    out := WriteStream on:String new.
claus
parents: 83
diff changeset
   243
    [fS atEnd] whileFalse:[
claus
parents: 83
diff changeset
   244
	|c|
claus
parents: 83
diff changeset
   245
claus
parents: 83
diff changeset
   246
	c := fS next.
claus
parents: 83
diff changeset
   247
	c == $# ifTrue:[
claus
parents: 83
diff changeset
   248
	    c := pS next
claus
parents: 83
diff changeset
   249
	].
claus
parents: 83
diff changeset
   250
	out nextPut:c
claus
parents: 83
diff changeset
   251
    ].
claus
parents: 83
diff changeset
   252
    ^ out contents
claus
parents: 83
diff changeset
   253
claus
parents: 83
diff changeset
   254
    "
claus
parents: 83
diff changeset
   255
     PrintConverter print:'123456789' formattedBy:'US$ ###,###.##' 
claus
parents: 83
diff changeset
   256
claus
parents: 83
diff changeset
   257
    fails for:
claus
parents: 83
diff changeset
   258
     PrintConverter print:'1234' formattedBy:'US$ ###,###.##' 
claus
parents: 83
diff changeset
   259
claus
parents: 83
diff changeset
   260
    invalid string for:
claus
parents: 83
diff changeset
   261
     PrintConverter print:'123456789' formattedBy:'US$ ###' 
claus
parents: 83
diff changeset
   262
    "
claus
parents: 83
diff changeset
   263
! !
claus
parents: 83
diff changeset
   264
100
claus
parents: 96
diff changeset
   265
!PrintConverter methodsFor:'accessing'!
claus
parents: 96
diff changeset
   266
claus
parents: 96
diff changeset
   267
type
claus
parents: 96
diff changeset
   268
    "return the type if its one of the standard converters,
claus
parents: 96
diff changeset
   269
     #number, #string etc. nil otherwise"
claus
parents: 96
diff changeset
   270
claus
parents: 96
diff changeset
   271
    ^ type
claus
parents: 96
diff changeset
   272
! !
claus
parents: 96
diff changeset
   273
212
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   274
!PrintConverter methodsFor:'converting'!
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   275
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   276
printStringFor:aValue
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   277
    "sent when an inputField wants a models value to be converted to a string
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   278
     for display"
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   279
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   280
    ^ valueToStringBlock value:aValue
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   281
!
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   282
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   283
readValueFrom:aString
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   284
    "sent when an inputField wants a string to be converted to a value 
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   285
     to be returned as its contents value"
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   286
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   287
    ^ stringToValueBlock value:aString
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   288
! !
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   289
67
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   290
!PrintConverter methodsFor:'initialization'!
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   291
100
claus
parents: 96
diff changeset
   292
initFor:aTypeSymbol
claus
parents: 96
diff changeset
   293
    "initialize to convert to/from objects as specified by aTypeSymbol,
claus
parents: 96
diff changeset
   294
     which may be one of #number, #string, #symbol, #date or #password ..."
claus
parents: 96
diff changeset
   295
claus
parents: 96
diff changeset
   296
    aTypeSymbol == #number ifTrue:[
407
7dedb9b0f157 checkin from browser
ca
parents: 268
diff changeset
   297
        self initForNumber
7dedb9b0f157 checkin from browser
ca
parents: 268
diff changeset
   298
    ].
7dedb9b0f157 checkin from browser
ca
parents: 268
diff changeset
   299
    aTypeSymbol == #numberOrNil ifTrue:[
7dedb9b0f157 checkin from browser
ca
parents: 268
diff changeset
   300
        self initForNumberOrNil
7dedb9b0f157 checkin from browser
ca
parents: 268
diff changeset
   301
    ].
7dedb9b0f157 checkin from browser
ca
parents: 268
diff changeset
   302
    aTypeSymbol == #integer ifTrue:[
7dedb9b0f157 checkin from browser
ca
parents: 268
diff changeset
   303
        self initForInteger
7dedb9b0f157 checkin from browser
ca
parents: 268
diff changeset
   304
    ].
7dedb9b0f157 checkin from browser
ca
parents: 268
diff changeset
   305
    aTypeSymbol == #integerOrNil ifTrue:[
7dedb9b0f157 checkin from browser
ca
parents: 268
diff changeset
   306
        self initForIntegerOrNil
100
claus
parents: 96
diff changeset
   307
    ].
claus
parents: 96
diff changeset
   308
    (aTypeSymbol == #string or:[aTypeSymbol == #password]) ifTrue:[
407
7dedb9b0f157 checkin from browser
ca
parents: 268
diff changeset
   309
        self initForString
100
claus
parents: 96
diff changeset
   310
    ].
claus
parents: 96
diff changeset
   311
    aTypeSymbol == #date ifTrue:[
407
7dedb9b0f157 checkin from browser
ca
parents: 268
diff changeset
   312
        self initForDate
7dedb9b0f157 checkin from browser
ca
parents: 268
diff changeset
   313
    ].
1191
fdc4454013e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 411
diff changeset
   314
    aTypeSymbol == #time ifTrue:[
fdc4454013e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 411
diff changeset
   315
        self initForTime
fdc4454013e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 411
diff changeset
   316
    ].
fdc4454013e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 411
diff changeset
   317
    aTypeSymbol == #timeOrNil ifTrue:[
fdc4454013e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 411
diff changeset
   318
        self initForTimeOrNil
fdc4454013e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 411
diff changeset
   319
    ].
407
7dedb9b0f157 checkin from browser
ca
parents: 268
diff changeset
   320
    aTypeSymbol == #float ifTrue:[
7dedb9b0f157 checkin from browser
ca
parents: 268
diff changeset
   321
        self initForFloat
7dedb9b0f157 checkin from browser
ca
parents: 268
diff changeset
   322
    ].
7dedb9b0f157 checkin from browser
ca
parents: 268
diff changeset
   323
    aTypeSymbol == #dateOrNil ifTrue:[
7dedb9b0f157 checkin from browser
ca
parents: 268
diff changeset
   324
        self initForDateOrNil
100
claus
parents: 96
diff changeset
   325
    ].
claus
parents: 96
diff changeset
   326
    aTypeSymbol == #symbol ifTrue:[
407
7dedb9b0f157 checkin from browser
ca
parents: 268
diff changeset
   327
        self initForSymbol
100
claus
parents: 96
diff changeset
   328
    ].
claus
parents: 96
diff changeset
   329
claus
parents: 96
diff changeset
   330
    type := aTypeSymbol
claus
parents: 96
diff changeset
   331
claus
parents: 96
diff changeset
   332
    "Modified: 6.9.1995 / 12:10:38 / claus"
claus
parents: 96
diff changeset
   333
!
claus
parents: 96
diff changeset
   334
212
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   335
initForDate
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   336
    "initialize to convert to/from a date 
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   337
     - if the string is empty or invalid, convert to the current date"
69
claus
parents: 68
diff changeset
   338
212
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   339
    valueToStringBlock := [:date | date printString].
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   340
    stringToValueBlock := [:string | Date readFromString:string onError:[Date today]]
67
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   341
!
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   342
212
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   343
initForDateOrNil
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   344
    "initialize to convert to/from a date 
69
claus
parents: 68
diff changeset
   345
     - if the string is empty or invalid, convert to nil"
claus
parents: 68
diff changeset
   346
212
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   347
    valueToStringBlock := [:date | date printString].
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   348
    stringToValueBlock := [:string | Date readFromString:string onError:nil]
69
claus
parents: 68
diff changeset
   349
!
claus
parents: 68
diff changeset
   350
86
claus
parents: 83
diff changeset
   351
initForFloat
claus
parents: 83
diff changeset
   352
    "initialize to convert to/from an float 
claus
parents: 83
diff changeset
   353
     - if the string is empty or invalid, convert to 0"
claus
parents: 83
diff changeset
   354
claus
parents: 83
diff changeset
   355
    valueToStringBlock := [:num | num asFloat printString].
claus
parents: 83
diff changeset
   356
    stringToValueBlock := [:string | Float readFromString:string onError:0]
claus
parents: 83
diff changeset
   357
!
claus
parents: 83
diff changeset
   358
claus
parents: 83
diff changeset
   359
initForFloatWithPrecision:nDigits
claus
parents: 83
diff changeset
   360
    "initialize to convert to/from an float with nDigits after the decimal point
claus
parents: 83
diff changeset
   361
     (truncating remaining digits).
claus
parents: 83
diff changeset
   362
     - if the string is empty or invalid, convert to 0"
claus
parents: 83
diff changeset
   363
claus
parents: 83
diff changeset
   364
    |conv|
claus
parents: 83
diff changeset
   365
claus
parents: 83
diff changeset
   366
    conv := '%.' , nDigits printString , 'f'.
claus
parents: 83
diff changeset
   367
    valueToStringBlock := [:num | num asFloat printfPrintString:conv].
claus
parents: 83
diff changeset
   368
    stringToValueBlock := [:string | Float readFromString:string onError:0]
claus
parents: 83
diff changeset
   369
!
claus
parents: 83
diff changeset
   370
212
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   371
initForInteger
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   372
    "initialize to convert to/from an integer 
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   373
     - if the string is empty or invalid, convert to 0"
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   374
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   375
    valueToStringBlock := [:num | num truncated printString].
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   376
    stringToValueBlock := [:string | Integer readFromString:string onError:0]
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   377
!
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   378
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   379
initForIntegerOrNil
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   380
    "initialize to convert to/from an integer 
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   381
     - if the string is empty or invalid, convert to nil"
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   382
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   383
    valueToStringBlock := [:num | 
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   384
	num isNil ifTrue:[''] 
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   385
		  ifFalse:[num printString]].
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   386
    stringToValueBlock := [:string | 
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   387
	Integer readFromString:string onError:nil]
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   388
!
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   389
67
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   390
initForNumber
69
claus
parents: 68
diff changeset
   391
    "initialize to convert to/from a number 
claus
parents: 68
diff changeset
   392
     - if the string is empty or invalid, convert to 0"
claus
parents: 68
diff changeset
   393
67
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   394
    valueToStringBlock := [:num | num printString].
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   395
    stringToValueBlock := [:string | Number readFromString:string onError:0]
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   396
!
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   397
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   398
initForNumberOrNil
69
claus
parents: 68
diff changeset
   399
    "initialize to convert to/from a number 
claus
parents: 68
diff changeset
   400
     - if the string is empty or invalid, convert to nil"
claus
parents: 68
diff changeset
   401
claus
parents: 68
diff changeset
   402
    valueToStringBlock := [:num | 
411
8b8b0128d129 *** empty log message ***
ca
parents: 407
diff changeset
   403
        num isNil ifTrue:[''] 
8b8b0128d129 *** empty log message ***
ca
parents: 407
diff changeset
   404
                  ifFalse:[num printString]].
8b8b0128d129 *** empty log message ***
ca
parents: 407
diff changeset
   405
    stringToValueBlock := [:string |
8b8b0128d129 *** empty log message ***
ca
parents: 407
diff changeset
   406
        |s|
8b8b0128d129 *** empty log message ***
ca
parents: 407
diff changeset
   407
8b8b0128d129 *** empty log message ***
ca
parents: 407
diff changeset
   408
        s := string.
8b8b0128d129 *** empty log message ***
ca
parents: 407
diff changeset
   409
        (s endsWith:'.') ifTrue:[
8b8b0128d129 *** empty log message ***
ca
parents: 407
diff changeset
   410
            s := s , '0'
8b8b0128d129 *** empty log message ***
ca
parents: 407
diff changeset
   411
        ].
8b8b0128d129 *** empty log message ***
ca
parents: 407
diff changeset
   412
        Number readFromString:s onError:nil
8b8b0128d129 *** empty log message ***
ca
parents: 407
diff changeset
   413
    ]
8b8b0128d129 *** empty log message ***
ca
parents: 407
diff changeset
   414
8b8b0128d129 *** empty log message ***
ca
parents: 407
diff changeset
   415
8b8b0128d129 *** empty log message ***
ca
parents: 407
diff changeset
   416
8b8b0128d129 *** empty log message ***
ca
parents: 407
diff changeset
   417
67
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   418
!
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   419
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   420
initForString
69
claus
parents: 68
diff changeset
   421
    "initialize for a string - this is trivial"
claus
parents: 68
diff changeset
   422
67
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   423
    valueToStringBlock := [:val | val isNil ifTrue:[''] ifFalse:[val]].
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   424
    stringToValueBlock := [:string | string]
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   425
!
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   426
1191
fdc4454013e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 411
diff changeset
   427
initForTime
fdc4454013e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 411
diff changeset
   428
    "initialize to convert to/from a time 
fdc4454013e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 411
diff changeset
   429
     - if the string is empty or invalid, convert to the current time"
fdc4454013e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 411
diff changeset
   430
fdc4454013e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 411
diff changeset
   431
    valueToStringBlock := [:time | time printString].
fdc4454013e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 411
diff changeset
   432
    stringToValueBlock := [:string | Time readFromString:string onError:[Time now]]
fdc4454013e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 411
diff changeset
   433
!
fdc4454013e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 411
diff changeset
   434
fdc4454013e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 411
diff changeset
   435
initForTimeOrNil
fdc4454013e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 411
diff changeset
   436
    "initialize to convert to/from a time 
fdc4454013e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 411
diff changeset
   437
     - if the string is empty or invalid, convert to nil"
fdc4454013e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 411
diff changeset
   438
fdc4454013e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 411
diff changeset
   439
    valueToStringBlock := [:time | time printString].
fdc4454013e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 411
diff changeset
   440
    stringToValueBlock := [:string | Time readFromString:string onError:nil]
fdc4454013e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 411
diff changeset
   441
!
fdc4454013e4 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 411
diff changeset
   442
68
claus
parents: 67
diff changeset
   443
initForYesNo
69
claus
parents: 68
diff changeset
   444
    "initialize to convert a 'yes'/'no' string to/from a boolean 
claus
parents: 68
diff changeset
   445
     The string is supposed to be in the current Language
claus
parents: 68
diff changeset
   446
     (i.e. if german, ja/nein has to be enterred.
claus
parents: 68
diff changeset
   447
     Invalid entries are converted to false."
claus
parents: 68
diff changeset
   448
68
claus
parents: 67
diff changeset
   449
    valueToStringBlock := [:bool | bool ifTrue:[ApplicationModel classResources string:'yes']
claus
parents: 67
diff changeset
   450
					ifFalse:[ApplicationModel classResources string:'no']].
claus
parents: 67
diff changeset
   451
    stringToValueBlock := [:string | string = (ApplicationModel classResources string:'yes')]
212
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   452
!
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   453
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   454
toPrint:printBlock toRead:readBlock
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   455
    "initialize to convert using two custom blocks.
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   456
     printBlock is supposed to get the objects value as argument,
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   457
     and to return a string.
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   458
     readBlock is supposed to get a string as argument, and return
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   459
     the corresponding object."
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   460
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   461
    valueToStringBlock := printBlock.
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   462
    stringToValueBlock := readBlock.
67
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   463
! !
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   464
212
874afdeb380a commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   465
!PrintConverter class methodsFor:'documentation'!
100
claus
parents: 96
diff changeset
   466
223
b65dc250db8d documentation
Claus Gittinger <cg@exept.de>
parents: 222
diff changeset
   467
version
1467
035afe3aa0ed Use ISO-639 Language abbreviations
Stefan Vogel <sv@exept.de>
parents: 1191
diff changeset
   468
    ^ '$Header: /cvs/stx/stx/libview2/PrintConverter.st,v 1.18 2001-04-20 09:47:43 stefan Exp $'
67
e48bf03eb059 Initial revision
claus
parents:
diff changeset
   469
! !