TabSpec.st
author claus
Wed, 24 Aug 1994 01:44:22 +0200
changeset 19 79ab6bc98651
child 25 e07adf47d209
permissions -rw-r--r--
Initial revision
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
19
79ab6bc98651 Initial revision
claus
parents:
diff changeset
     1
'From Smalltalk/X, Version:2.10.3 on 12-aug-1994 at 10:44:09 pm'!
79ab6bc98651 Initial revision
claus
parents:
diff changeset
     2
79ab6bc98651 Initial revision
claus
parents:
diff changeset
     3
Object subclass:#TabulatorSpecification
79ab6bc98651 Initial revision
claus
parents:
diff changeset
     4
	 instanceVariableNames:'tabUnit tabPositions tabTypes'
79ab6bc98651 Initial revision
claus
parents:
diff changeset
     5
	 classVariableNames:''
79ab6bc98651 Initial revision
claus
parents:
diff changeset
     6
	 poolDictionaries:''
79ab6bc98651 Initial revision
claus
parents:
diff changeset
     7
	 category:'Views-Support'
79ab6bc98651 Initial revision
claus
parents:
diff changeset
     8
!
79ab6bc98651 Initial revision
claus
parents:
diff changeset
     9
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    10
!TabulatorSpecification methodsFor:'queries'!
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    11
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    12
pixelsPerUnitOn:aGC
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    13
    "
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    14
     return the number of device pixels one unit of my tabs
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    15
     takes on aGC
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    16
    "
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    17
    tabUnit isNil ifTrue:[
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    18
        tabUnit := #col
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    19
    ].
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    20
    tabUnit == #col ifTrue:[
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    21
        ^ aGC font width
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    22
    ].
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    23
    tabUnit == #inch ifTrue:[
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    24
        ^ aGC device horizontalPixelPerInch
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    25
    ].
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    26
    tabUnit == #mm ifTrue:[
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    27
        ^ aGC device horizontalPixelPerMillimeter
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    28
    ].
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    29
    tabUnit == #cm ifTrue:[
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    30
        ^ aGC device horizontalPixelPerMillimeter * 10
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    31
    ].
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    32
    "
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    33
     assume pixels
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    34
    "
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    35
    ^ 1.
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    36
!
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    37
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    38
positionOfTab:index on:aGC
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    39
    |unit pos|
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    40
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    41
    tabPositions isNil ifTrue:[^ nil].
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    42
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    43
    unit := self pixelsPerUnitOn:aGC.
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    44
    pos := ((tabPositions at:index) * unit).
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    45
    ^ pos
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    46
!
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    47
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    48
positionOfTab:index forString:aString on:aGC
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    49
    |pos type idx left|
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    50
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    51
    pos := self positionOfTab:index on:aGC.
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    52
    pos isNil ifTrue:[^ nil].
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    53
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    54
    tabTypes notNil ifTrue:[
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    55
        (tabTypes isMemberOf:Symbol) ifTrue:[
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    56
            type := tabTypes
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    57
        ] ifFalse:[
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    58
            type := tabTypes at:(index).
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    59
        ].
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    60
    ] ifFalse:[
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    61
        type := #left
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    62
    ].
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    63
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    64
    type == #right ifTrue:[
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    65
        ^ pos - (aGC font widthOf:aString).
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    66
    ].
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    67
    type == #center ifTrue:[
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    68
        ^ pos - ((aGC font widthOf:aString) // 2).
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    69
    ].
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    70
    type == #decimal ifTrue:[
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    71
        idx := aString indexOf:$..
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    72
        idx == 0 ifTrue:[
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    73
             ^ pos - (aGC font widthOf:aString).
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    74
        ].
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    75
        left := aString copyTo:(idx-1).
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    76
        ^ pos - (aGC font widthOf:left).
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    77
    ].
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    78
    "default is left"
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    79
    ^ pos
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    80
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    81
! !
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    82
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    83
!TabulatorSpecification methodsFor:'accessing'!
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    84
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    85
unit:aSymbol
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    86
    "allowed are: #inch, #mm, #cm, #pixel and #col"
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    87
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    88
    tabUnit := aSymbol
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    89
!
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    90
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    91
unit
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    92
    ^ tabUnit
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    93
!
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    94
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    95
align:types
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    96
    "
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    97
     an array of tab-types; each one is
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    98
        #left
79ab6bc98651 Initial revision
claus
parents:
diff changeset
    99
        #right
79ab6bc98651 Initial revision
claus
parents:
diff changeset
   100
        #center
79ab6bc98651 Initial revision
claus
parents:
diff changeset
   101
        #decimal
79ab6bc98651 Initial revision
claus
parents:
diff changeset
   102
     or a symbol which gives align of all tabs
79ab6bc98651 Initial revision
claus
parents:
diff changeset
   103
79ab6bc98651 Initial revision
claus
parents:
diff changeset
   104
    "
79ab6bc98651 Initial revision
claus
parents:
diff changeset
   105
    tabTypes := types
79ab6bc98651 Initial revision
claus
parents:
diff changeset
   106
!
79ab6bc98651 Initial revision
claus
parents:
diff changeset
   107
79ab6bc98651 Initial revision
claus
parents:
diff changeset
   108
align
79ab6bc98651 Initial revision
claus
parents:
diff changeset
   109
    ^ tabTypes
79ab6bc98651 Initial revision
claus
parents:
diff changeset
   110
!
79ab6bc98651 Initial revision
claus
parents:
diff changeset
   111
79ab6bc98651 Initial revision
claus
parents:
diff changeset
   112
positions:tabs
79ab6bc98651 Initial revision
claus
parents:
diff changeset
   113
    tabPositions := tabs
79ab6bc98651 Initial revision
claus
parents:
diff changeset
   114
!
79ab6bc98651 Initial revision
claus
parents:
diff changeset
   115
79ab6bc98651 Initial revision
claus
parents:
diff changeset
   116
positions
79ab6bc98651 Initial revision
claus
parents:
diff changeset
   117
    ^ tabPositions
79ab6bc98651 Initial revision
claus
parents:
diff changeset
   118
! !
79ab6bc98651 Initial revision
claus
parents:
diff changeset
   119