Label.st
author claus
Thu, 13 Jan 1994 01:18:51 +0100
changeset 24 966098a893f8
parent 7 15a9291b9bd0
child 25 975bead4571a
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     1
"
5
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1989 by Claus Gittinger
0
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
5
claus
parents: 3
diff changeset
    26
COPYRIGHT (c) 1989 by Claus Gittinger
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    27
              All Rights Reserved
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    28
24
966098a893f8 *** empty log message ***
claus
parents: 7
diff changeset
    29
$Header: /cvs/stx/stx/libwidg/Label.st,v 1.5 1994-01-13 00:16:48 claus Exp $
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    30
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    31
written spring/summer 89 by claus
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    32
'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    33
3
claus
parents: 0
diff changeset
    34
!Label class methodsFor:'documentation'!
claus
parents: 0
diff changeset
    35
claus
parents: 0
diff changeset
    36
documentation
claus
parents: 0
diff changeset
    37
"
claus
parents: 0
diff changeset
    38
This class implements labels, which are views to display a string or image.
claus
parents: 0
diff changeset
    39
The Label will try to do its best to make its contents fit into the
claus
parents: 0
diff changeset
    40
view. The contents can be a String, a collection of Strings (i.e.
claus
parents: 0
diff changeset
    41
Text) or a Form/Image. The contents is drawn in fgColor/bgColor,
claus
parents: 0
diff changeset
    42
which can be changed using:
claus
parents: 0
diff changeset
    43
    aLabel foregroundColor:aColor
claus
parents: 0
diff changeset
    44
    aLabel backgroundColor:aColor
claus
parents: 0
diff changeset
    45
claus
parents: 0
diff changeset
    46
When a label is assigned a contents, it will resize itself to fit
claus
parents: 0
diff changeset
    47
the required size. This resizing can be suppressed by setting the
claus
parents: 0
diff changeset
    48
fixsize attribute to true using:
claus
parents: 0
diff changeset
    49
    aLabel sizeFixed:true
claus
parents: 0
diff changeset
    50
claus
parents: 0
diff changeset
    51
This can be used, if resizing of the label is not wanted.
claus
parents: 0
diff changeset
    52
claus
parents: 0
diff changeset
    53
The placement of the contents within the label is controlled by
claus
parents: 0
diff changeset
    54
the adjust attribute, it can be set with
claus
parents: 0
diff changeset
    55
    aLabel adjust:how
claus
parents: 0
diff changeset
    56
, where how is one of the symbols left, #right, #center, #centerLeft or
claus
parents: 0
diff changeset
    57
#centerRight (see the comment in Label>>adjust:).
claus
parents: 0
diff changeset
    58
claus
parents: 0
diff changeset
    59
example:
claus
parents: 0
diff changeset
    60
    l := Label in:aView.
claus
parents: 0
diff changeset
    61
    l label:'hello world'.
claus
parents: 0
diff changeset
    62
claus
parents: 0
diff changeset
    63
Instance variables:
claus
parents: 0
diff changeset
    64
claus
parents: 0
diff changeset
    65
    logo                <Object>        the logo, can be a Form, String or Text
claus
parents: 0
diff changeset
    66
    labelWidth          <Integer>       the width of the logo in device units
claus
parents: 0
diff changeset
    67
    labelHeight         <Integer>       the height of the logo in device units
claus
parents: 0
diff changeset
    68
    labelOriginX        <Integer>       the x-position of the logo withing the Label
claus
parents: 0
diff changeset
    69
    labelOriginY        <Integer>       the y-position of the logo withing the Label
claus
parents: 0
diff changeset
    70
    adjust              <Symbol>        controls how the logo is positioned within the
claus
parents: 0
diff changeset
    71
                                        label. Can be one of:#left,#right,#center,
claus
parents: 0
diff changeset
    72
                                        #centerLeft or #centerRight (see comment in adjust:)
claus
parents: 0
diff changeset
    73
    hSpace              <Integer>       number of horizontal pixels around logo
claus
parents: 0
diff changeset
    74
    vSpace              <Integer>       number of vertical pixels around logo
claus
parents: 0
diff changeset
    75
"
claus
parents: 0
diff changeset
    76
! !
claus
parents: 0
diff changeset
    77
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    78
!Label class methodsFor:'defaults'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    79
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    80
defaultExtent
3
claus
parents: 0
diff changeset
    81
    "return default extent"
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    82
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    83
    ^ 16 @ 16
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    84
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    85
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    86
!Label class methodsFor:'instance creation'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    87
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    88
form:aForm
3
claus
parents: 0
diff changeset
    89
    "return a new Label showing a form"
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    90
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    91
    ^ (self on:Display) form:aForm
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    92
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    93
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    94
form:aForm in:aView
3
claus
parents: 0
diff changeset
    95
    "return a new Label showing a form"
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    96
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    97
    ^ (self in:aView) form:aForm
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    98
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    99
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   100
!Label methodsFor:'initialization'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   101
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   102
initialize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   103
    super initialize.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   104
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   105
    font := font on:device.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   106
    self height:(font height + font descent).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   107
    adjust := #center.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   108
    labelOriginX := 0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   109
    labelOriginY := 0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   110
    labelWidth := 0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   111
    labelHeight := 0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   112
    logo := nil.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   113
    fixSize := false.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   114
    hSpace := (self horizontalPixelPerMillimeter:0.5) rounded.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   115
    vSpace := (self verticalPixelPerMillimeter:0.5) rounded
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   116
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   117
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   118
initStyle
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   119
    super initStyle.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   120
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   121
    fgColor := Black.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   122
    bgColor := viewBackground.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   123
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   124
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   125
realize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   126
    super realize.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   127
    fgColor := fgColor on:device.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   128
    bgColor := bgColor on:device.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   129
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   130
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   131
recreate
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   132
    "after snapin, labels dimensions may have changed due to
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   133
     different font parameters"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   134
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   135
    super recreate.
3
claus
parents: 0
diff changeset
   136
    font := font on:device.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   137
    self computeLabelSize.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   138
    self computeLabelOrigin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   139
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   140
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   141
!Label methodsFor:'accessing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   142
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   143
foregroundColor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   144
    "return the foreground color"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   145
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   146
    ^ fgColor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   147
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   148
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   149
foregroundColor:aColor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   150
    "set the foreground color"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   151
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   152
    fgColor := aColor on:device.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   153
    self redraw
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   154
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   155
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   156
backgroundColor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   157
    "return the background color"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   158
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   159
    ^ bgColor 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   160
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   161
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   162
backgroundColor:aColor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   163
    "set the background color"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   164
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   165
    bgColor := aColor on:device.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   166
    self redraw
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   167
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   168
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   169
foregroundColor:fg backgroundColor:bg
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   170
    "set the colors to be used for drawing"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   171
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   172
    fgColor := fg on:device.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   173
    bgColor := bg on:device.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   174
    self redraw
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   175
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   176
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   177
sizeFixed:aBoolean
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   178
    "set/clear the fix-size attribute (will not change size on label-change)"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   179
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   180
    fixSize := aBoolean
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   181
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   182
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   183
label:aString
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   184
    "set the label-string; adjust extent if not already realized"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   185
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   186
    (logo = aString) ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   187
        logo := aString.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   188
        self newLayout
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   189
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   190
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   191
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   192
label
3
claus
parents: 0
diff changeset
   193
    "return the labels string"
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   194
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   195
    ^ logo
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   196
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   197
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   198
labelWidth
3
claus
parents: 0
diff changeset
   199
    "return the logos width in pixels"
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   200
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   201
    ^ labelWidth
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   202
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   203
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   204
font:aFont
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   205
    "set the font - if I'm not realized, adjust my size"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   206
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   207
    (aFont ~~ font) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   208
        super font:(aFont on:device).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   209
        self newLayout
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   210
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   211
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   212
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   213
adjust:how
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   214
    "set the adjust, how which must be one of
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   215
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   216
     #left        -> left adjust logo
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   217
     #right       -> right adjust logo
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   218
     #center      -> center logo
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   219
     #centerLeft  -> center logo; if it does not fit, left adjust it
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   220
     #centerRight -> center logo; if no fit, right adjust
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   221
    "
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   222
    (adjust ~~ how) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   223
        adjust := how.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   224
        self newLayout
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   225
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   226
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   227
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   228
form:aForm
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   229
    "set the labels form; adjust extent if not already realized"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   230
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   231
    aForm isNil ifFalse:[
3
claus
parents: 0
diff changeset
   232
        aForm ~~ logo ifTrue:[
claus
parents: 0
diff changeset
   233
            logo notNil ifTrue:[
claus
parents: 0
diff changeset
   234
                logo extent = aForm extent ifTrue:[
claus
parents: 0
diff changeset
   235
                    ^ self
claus
parents: 0
diff changeset
   236
                ]
claus
parents: 0
diff changeset
   237
            ].
claus
parents: 0
diff changeset
   238
            logo := aForm.
claus
parents: 0
diff changeset
   239
            self newLayout
claus
parents: 0
diff changeset
   240
        ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   241
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   242
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   243
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   244
!Label methodsFor:'private'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   245
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   246
newLayout
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   247
    "recompute position/size after a change
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   248
     - helper for form:/font: etc."
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   249
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   250
    self computeLabelSize.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   251
    fixSize ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   252
        self resize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   253
    ] ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   254
        self computeLabelOrigin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   255
    ].
3
claus
parents: 0
diff changeset
   256
    shown ifTrue:[
claus
parents: 0
diff changeset
   257
        self redraw
claus
parents: 0
diff changeset
   258
    ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   259
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   260
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   261
resize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   262
    "resize myself to make text fit into myself"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   263
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   264
    |extra|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   265
3
claus
parents: 0
diff changeset
   266
    logo notNil ifTrue:[
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   267
        (relativeExtent isNil and:[extentRule isNil]) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   268
            extra := margin * 2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   269
            self extent:(labelWidth + extra) @ (labelHeight + extra)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   270
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   271
        self computeLabelOrigin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   272
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   273
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   274
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   275
computeLabelSize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   276
    "compute the extent needed to hold the label; aForm or aString"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   277
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   278
    |numberOfLines textHeight textWidth|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   279
3
claus
parents: 0
diff changeset
   280
    (logo isKindOf:Collection) ifFalse:[
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   281
        logo notNil ifTrue:[
3
claus
parents: 0
diff changeset
   282
            labelWidth := logo width. 
claus
parents: 0
diff changeset
   283
            labelHeight := logo height
claus
parents: 0
diff changeset
   284
        ].
claus
parents: 0
diff changeset
   285
        ^ self
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   286
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   287
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   288
    "must be a String or Text"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   289
    (logo isKindOf:String) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   290
        numberOfLines := 1 + (logo occurrencesOf:(Character cr)).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   291
        (numberOfLines ~~ 1) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   292
            logo := logo asText
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   293
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   294
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   295
        numberOfLines := logo size.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   296
        (numberOfLines == 1) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   297
            logo := logo asString
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   298
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   299
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   300
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   301
    textHeight := font height * numberOfLines + font descent.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   302
    textWidth := font widthOf:logo.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   303
    labelWidth := textWidth + (hSpace "+ margin" * 2) .
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   304
    labelHeight := textHeight + (vSpace "+ margin" * 2)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   305
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   306
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   307
computeLabelOrigin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   308
    "(re)compute the origin of the label whenever label or font changes"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   309
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   310
    |x y|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   311
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   312
    labelHeight isNil ifTrue:[^ self].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   313
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   314
    " always center vertically "
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   315
    (labelHeight < height) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   316
        y := (height - labelHeight) // 2
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   317
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   318
        y := 0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   319
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   320
    labelOriginY := y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   321
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   322
    (((adjust == #center) 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   323
     or:[adjust == #centerRight])
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   324
     or:[adjust == #centerLeft]) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   325
        " center text/form in button "
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   326
        x := (width - labelWidth) // 2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   327
        (width < labelWidth) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   328
            "no fit"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   329
            (adjust == #centerLeft) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   330
                x := margin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   331
            ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   332
                (adjust == #centerRight) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   333
                    x := width - labelWidth - margin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   334
                ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   335
            ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   336
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   337
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   338
        (adjust == #left) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   339
            x := margin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   340
        ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   341
            x := width - labelWidth - margin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   342
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   343
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   344
    labelOriginX := x
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   345
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   346
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   347
!Label methodsFor:'events'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   348
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   349
sizeChanged:how
3
claus
parents: 0
diff changeset
   350
    "sent whenever size is changed by someone else - recompute the
claus
parents: 0
diff changeset
   351
     logos position within the View."
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   352
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   353
    self computeLabelOrigin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   354
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   355
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   356
!Label methodsFor:'redrawing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   357
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   358
drawWith:fg and:bg
3
claus
parents: 0
diff changeset
   359
    "redraw my label with fg/bg - this generic method is also used by subclasses
claus
parents: 0
diff changeset
   360
     (especially Button) to redraw the logo in different colors."
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   361
3
claus
parents: 0
diff changeset
   362
    |x y cutOff mustClear|
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   363
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   364
    cutOff := margin * 2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   365
3
claus
parents: 0
diff changeset
   366
    mustClear := true.
claus
parents: 0
diff changeset
   367
claus
parents: 0
diff changeset
   368
    (logo notNil and:[(logo isKindOf:Form) or:[logo isKindOf:Image]]) ifTrue:[
claus
parents: 0
diff changeset
   369
        (labelOriginX == 0 and:[labelOriginY == 0]) ifTrue:[
claus
parents: 0
diff changeset
   370
            logo width >= (width - cutOff) ifTrue:[
claus
parents: 0
diff changeset
   371
                logo height >= (height - cutOff) ifTrue:[
claus
parents: 0
diff changeset
   372
                    "no need to clear before - avoid flicker"
claus
parents: 0
diff changeset
   373
                    mustClear := false
claus
parents: 0
diff changeset
   374
                ]
claus
parents: 0
diff changeset
   375
            ]
claus
parents: 0
diff changeset
   376
        ].
claus
parents: 0
diff changeset
   377
    ].
claus
parents: 0
diff changeset
   378
claus
parents: 0
diff changeset
   379
    mustClear ifTrue:[
claus
parents: 0
diff changeset
   380
        self paint:bg.
claus
parents: 0
diff changeset
   381
        self fillRectangleX:margin y:margin
claus
parents: 0
diff changeset
   382
                      width:(width - cutOff)
claus
parents: 0
diff changeset
   383
                     height:(height - cutOff).
claus
parents: 0
diff changeset
   384
    ].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   385
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   386
    logo notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   387
        self paint:fg on:bg.
3
claus
parents: 0
diff changeset
   388
        (logo isKindOf:Image) ifTrue:[
24
966098a893f8 *** empty log message ***
claus
parents: 7
diff changeset
   389
            logo := logo on:device
966098a893f8 *** empty log message ***
claus
parents: 7
diff changeset
   390
        ].
3
claus
parents: 0
diff changeset
   391
        ((logo isKindOf:Form) or:[logo isKindOf:Image]) ifTrue:[
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   392
            self background:bg.
24
966098a893f8 *** empty log message ***
claus
parents: 7
diff changeset
   393
            self displayOpaqueForm:logo x:labelOriginX y:labelOriginY
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   394
        ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   395
            x := labelOriginX + hSpace.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   396
            y := labelOriginY + (font ascent) + vSpace.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   397
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   398
            (logo isKindOf:String) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   399
                self displayString:logo x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   400
            ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   401
                logo do:[ :line |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   402
                    self displayString:(line printString) x:x y:y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   403
                    y := y + (font height)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   404
                ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   405
            ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   406
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   407
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   408
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   409
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   410
redraw
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   411
    "redraw my label"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   412
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   413
    shown ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   414
        self drawWith:fgColor and:bgColor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   415
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   416
! !