Label.st
author claus
Fri, 16 Jul 1993 11:44:44 +0200
changeset 0 e6a541c1c0eb
child 3 9d7eefb5e69f
permissions -rw-r--r--
Initial revision
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     1
"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1989-93 by Claus Gittinger
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     3
              All Rights Reserved
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     4
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    11
"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    12
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    13
View subclass:#Label
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    14
       instanceVariableNames:'logo
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    15
                              labelWidth labelHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    16
                              labelOriginX labelOriginY
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    17
                              adjust hSpace vSpace
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    18
                              bgColor fgColor fixSize'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    19
       classVariableNames:''
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    20
       poolDictionaries:''
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    21
       category:'Views-Layout'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    22
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    23
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    24
Label comment:'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    25
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    26
COPYRIGHT (c) 1989-93 by Claus Gittinger
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    27
              All Rights Reserved
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    28
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    29
this class implements labels - a view holding a string or form
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    30
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    31
%W% %E%
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    32
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    33
written spring/summer 89 by claus
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    34
'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    35
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    36
!Label class methodsFor:'defaults'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    37
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    38
defaultExtent
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    39
    "answer default extent"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    40
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    41
    ^ 16 @ 16
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    42
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    43
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    44
!Label class methodsFor:'instance creation'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    45
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    46
form:aForm
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    47
    "answer a new Label showing a form"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    48
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    49
    ^ (self on:Display) form:aForm
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    50
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    51
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    52
form:aForm in:aView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    53
    "answer a new Label showing a form"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    54
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    55
    ^ (self in:aView) form:aForm
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    56
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    57
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    58
!Label methodsFor:'initialization'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    59
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    60
initialize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    61
    super initialize.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    62
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    63
    font := font on:device.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    64
    self height:(font height + font descent).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    65
    adjust := #center.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    66
    labelOriginX := 0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    67
    labelOriginY := 0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    68
    labelWidth := 0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    69
    labelHeight := 0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    70
    logo := nil.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    71
    fixSize := false.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    72
    hSpace := (self horizontalPixelPerMillimeter:0.5) rounded.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    73
    vSpace := (self verticalPixelPerMillimeter:0.5) rounded
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    74
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    75
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    76
initStyle
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    77
    super initStyle.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    78
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    79
    fgColor := Black.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    80
    bgColor := viewBackground.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    81
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    82
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    83
realize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    84
    super realize.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    85
    fgColor := fgColor on:device.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    86
    bgColor := bgColor on:device.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    87
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    88
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    89
recreate
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    90
    "after snapin, labels dimensions may have changed due to
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    91
     different font parameters"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    92
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    93
    super recreate.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    94
    self computeLabelSize.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    95
    self computeLabelOrigin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    96
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    97
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    98
!Label methodsFor:'accessing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    99
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   100
foregroundColor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   101
    "return the foreground color"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   102
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   103
    ^ fgColor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   104
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   105
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   106
foregroundColor:aColor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   107
    "set the foreground color"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   108
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   109
    fgColor := aColor on:device.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   110
    self redraw
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   111
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   112
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   113
backgroundColor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   114
    "return the background color"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   115
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   116
    ^ bgColor 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   117
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   118
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   119
backgroundColor:aColor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   120
    "set the background color"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   121
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   122
    bgColor := aColor on:device.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   123
    self redraw
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   124
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   125
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   126
foregroundColor:fg backgroundColor:bg
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   127
    "set the colors to be used for drawing"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   128
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   129
    fgColor := fg on:device.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   130
    bgColor := bg on:device.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   131
    self redraw
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   132
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   133
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   134
sizeFixed:aBoolean
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   135
    "set/clear the fix-size attribute (will not change size on label-change)"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   136
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   137
    fixSize := aBoolean
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   138
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   139
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   140
label:aString
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   141
    "set the label-string; adjust extent if not already realized"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   142
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   143
    (logo = aString) ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   144
        logo := aString.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   145
        self newLayout
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   146
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   147
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   148
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   149
label
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   150
    "answer the labels string"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   151
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   152
    ^ logo
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   153
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   154
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   155
labelWidth
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   156
    "answer the logos width in pixels"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   157
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   158
    ^ labelWidth
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   159
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   160
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   161
font:aFont
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   162
    "set the font - if I'm not realized, adjust my size"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   163
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   164
    (aFont ~~ font) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   165
        super font:(aFont on:device).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   166
        self newLayout
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   167
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   168
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   169
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   170
adjust:how
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   171
    "set the adjust, how which must be one of
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   172
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   173
     #left        -> left adjust logo
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   174
     #right       -> right adjust logo
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   175
     #center      -> center logo
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   176
     #centerLeft  -> center logo; if it does not fit, left adjust it
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   177
     #centerRight -> center logo; if no fit, right adjust
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   178
    "
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   179
    (adjust ~~ how) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   180
        adjust := how.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   181
        self newLayout
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   182
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   183
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   184
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   185
form:aForm
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   186
    "set the labels form; adjust extent if not already realized"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   187
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   188
    aForm isNil ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   189
        logo := aForm.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   190
        self newLayout
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   191
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   192
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   193
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   194
!Label methodsFor:'private'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   195
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   196
newLayout
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   197
    "recompute position/size after a change
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   198
     - helper for form:/font: etc."
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   199
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   200
    self computeLabelSize.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   201
    fixSize ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   202
        self resize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   203
    ] ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   204
        self computeLabelOrigin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   205
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   206
    self redraw
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   207
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   208
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   209
resize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   210
    "resize myself to make text fit into myself"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   211
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   212
    |extra|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   213
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   214
    logo isNil ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   215
        (relativeExtent isNil and:[extentRule isNil]) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   216
            extra := margin * 2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   217
            self extent:(labelWidth + extra) @ (labelHeight + extra)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   218
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   219
        self computeLabelOrigin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   220
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   221
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   222
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   223
computeLabelSize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   224
    "compute the extent needed to hold the label; aForm or aString"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   225
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   226
    |numberOfLines textHeight textWidth|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   227
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   228
    (logo isKindOf:String) ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   229
        (logo isKindOf:Text) ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   230
            logo isNil ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   231
                labelWidth := logo width. 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   232
                labelHeight := logo height
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   233
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   234
            ^ self
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   235
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   236
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   237
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   238
    "must be a String or Text"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   239
    (logo isKindOf:String) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   240
        numberOfLines := 1 + (logo occurrencesOf:(Character cr)).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   241
        (numberOfLines ~~ 1) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   242
            logo := logo asText
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   243
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   244
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   245
        numberOfLines := logo size.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   246
        (numberOfLines == 1) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   247
            logo := logo asString
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   248
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   249
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   250
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   251
    textHeight := font height * numberOfLines + font descent.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   252
    textWidth := font widthOf:logo.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   253
    labelWidth := textWidth + (hSpace "+ margin" * 2) .
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   254
    labelHeight := textHeight + (vSpace "+ margin" * 2)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   255
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   256
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   257
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   258
computeLabelOrigin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   259
    "(re)compute the origin of the label whenever label or font changes"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   260
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   261
    |x y|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   262
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   263
    labelHeight isNil ifTrue:[^ self].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   264
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   265
    " always center vertically "
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   266
    (labelHeight < height) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   267
        y := (height - labelHeight) // 2
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   268
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   269
        y := 0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   270
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   271
    labelOriginY := y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   272
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   273
    (((adjust == #center) 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   274
     or:[adjust == #centerRight])
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   275
     or:[adjust == #centerLeft]) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   276
        " center text/form in button "
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   277
        x := (width - labelWidth) // 2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   278
        (width < labelWidth) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   279
            "no fit"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   280
            (adjust == #centerLeft) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   281
                x := margin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   282
            ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   283
                (adjust == #centerRight) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   284
                    x := width - labelWidth - margin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   285
                ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   286
            ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   287
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   288
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   289
        (adjust == #left) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   290
            x := margin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   291
        ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   292
            x := width - labelWidth - margin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   293
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   294
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   295
    labelOriginX := x
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   296
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   297
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   298
!Label methodsFor:'events'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   299
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   300
sizeChanged:how
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   301
    "sent whenever size is changed by someone else"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   302
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   303
    self computeLabelOrigin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   304
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   305
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   306
!Label methodsFor:'redrawing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   307
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   308
drawWith:fg and:bg
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   309
    "redraw my label with fg/bg"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   310
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   311
    |x y cutOff|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   312
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   313
    cutOff := margin * 2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   314
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   315
    self paint:bg.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   316
    self fillRectangleX:margin y:margin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   317
                  width:(width - cutOff)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   318
                 height:(height - cutOff).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   319
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   320
    logo notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   321
        self paint:fg on:bg.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   322
        (logo isKindOf:Form) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   323
            self background:bg.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   324
            self drawOpaqueForm:logo x:labelOriginX y:labelOriginY
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   325
        ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   326
            x := labelOriginX + hSpace.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   327
            y := labelOriginY + (font ascent) + vSpace.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   328
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   329
            (logo isKindOf:String) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   330
                self displayString:logo x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   331
            ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   332
                logo do:[ :line |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   333
                    self displayString:(line printString) x:x y:y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   334
                    y := y + (font height)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   335
                ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   336
            ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   337
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   338
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   339
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   340
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   341
redraw
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   342
    "redraw my label"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   343
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   344
    shown ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   345
        self drawWith:fgColor and:bgColor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   346
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   347
! !