FramedBox.st
author claus
Sun, 16 Jan 1994 05:02:06 +0100
changeset 25 975bead4571a
parent 24 966098a893f8
child 38 4b9b70b2cc87
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) 1991 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:#FramedBox
3
claus
parents: 0
diff changeset
    14
         instanceVariableNames:'label layout fgColor'
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    15
         classVariableNames:''
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    16
         poolDictionaries:''
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    17
         category:'Views-Layout'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    18
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    19
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    20
FramedBox comment:'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    21
5
claus
parents: 3
diff changeset
    22
COPYRIGHT (c) 1991 by Claus Gittinger
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    23
              All Rights Reserved
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    24
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    25
a frame around something. The frame may have a label, whose position
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    26
is controlled by the layout variable, aSymbol which may be one of:
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    27
[#topCenter #topLeft #topRight #bottomLeft #bottomCenter #bottomRight]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    28
25
975bead4571a *** empty log message ***
claus
parents: 24
diff changeset
    29
$Header: /cvs/stx/stx/libwidg/FramedBox.st,v 1.6 1994-01-16 04:01:45 claus Exp $
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    30
written spring 91 by claus
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    31
'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    32
3
claus
parents: 0
diff changeset
    33
!FramedBox methodsFor:'private'!
claus
parents: 0
diff changeset
    34
claus
parents: 0
diff changeset
    35
redrawIfShown
claus
parents: 0
diff changeset
    36
    shown ifTrue:[
claus
parents: 0
diff changeset
    37
        self clear.
claus
parents: 0
diff changeset
    38
        self redraw
claus
parents: 0
diff changeset
    39
    ]
claus
parents: 0
diff changeset
    40
! !
claus
parents: 0
diff changeset
    41
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    42
!FramedBox methodsFor:'accessing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    43
3
claus
parents: 0
diff changeset
    44
foregroundColor
claus
parents: 0
diff changeset
    45
    "return the frame labels foreground color"
claus
parents: 0
diff changeset
    46
claus
parents: 0
diff changeset
    47
    ^ fgColor
claus
parents: 0
diff changeset
    48
!
claus
parents: 0
diff changeset
    49
claus
parents: 0
diff changeset
    50
foregroundColor:aColor
claus
parents: 0
diff changeset
    51
    "set the frame labels foreground color"
claus
parents: 0
diff changeset
    52
claus
parents: 0
diff changeset
    53
    aColor ~= fgColor ifTrue:[
claus
parents: 0
diff changeset
    54
        fgColor := aColor.
claus
parents: 0
diff changeset
    55
        self redrawIfShown
claus
parents: 0
diff changeset
    56
    ]
claus
parents: 0
diff changeset
    57
!
claus
parents: 0
diff changeset
    58
claus
parents: 0
diff changeset
    59
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    60
label
3
claus
parents: 0
diff changeset
    61
    "return the frames labelstring"
claus
parents: 0
diff changeset
    62
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    63
    ^ label
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    64
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    65
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    66
label:aString
3
claus
parents: 0
diff changeset
    67
    "set the frames labelstring"
claus
parents: 0
diff changeset
    68
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    69
    (label ~= aString) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    70
        label := aString.
3
claus
parents: 0
diff changeset
    71
        self redrawIfShown
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    72
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    73
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    74
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    75
font:aFont
3
claus
parents: 0
diff changeset
    76
    "set the frame labelstrings font"
claus
parents: 0
diff changeset
    77
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    78
    (font ~= aFont) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    79
        super font:aFont.
3
claus
parents: 0
diff changeset
    80
        self redrawIfShown
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    81
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    82
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    83
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    84
viewRectangle
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    85
    "return the inside area - redefined to save frame from
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    86
     relative computations"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    87
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    88
    |m2 sep|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    89
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    90
    sep := font height.
25
975bead4571a *** empty log message ***
claus
parents: 24
diff changeset
    91
    m2 := sep + sep "+ sep".
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    92
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    93
    ^ (sep @ sep) extent:((width - m2) @ (height - m2))
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    94
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    95
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    96
layout
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    97
    ^ layout
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    98
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    99
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   100
layout:aSymbol
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   101
    "define the position of the label;
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   102
     aSymbol may be: topLeft, topCenter, topRight;
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   103
     bottomLeft, bottomCenter or bottomRight"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   104
3
claus
parents: 0
diff changeset
   105
    layout ~~ aSymbol ifTrue:[
claus
parents: 0
diff changeset
   106
        layout := aSymbol.
claus
parents: 0
diff changeset
   107
        self redrawIfShown
claus
parents: 0
diff changeset
   108
    ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   109
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   110
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   111
!FramedBox methodsFor:'events'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   112
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   113
sizeChanged:how
3
claus
parents: 0
diff changeset
   114
    self redrawIfShown.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   115
    super sizeChanged:how
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   116
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   117
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   118
!FramedBox methodsFor:'drawing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   119
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   120
drawFrame
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   121
    "redraw the frame"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   122
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   123
    |sep halfSep right bot left top bm1 rm3|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   124
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   125
    sep := font height.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   126
    halfSep := sep // 2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   127
    self is3D ifFalse:[
24
966098a893f8 *** empty log message ***
claus
parents: 7
diff changeset
   128
        self displayRectangleX:halfSep y:halfSep
966098a893f8 *** empty log message ***
claus
parents: 7
diff changeset
   129
                         width:(width - sep) height:(height - sep).
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   130
        ^ self
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   131
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   132
    self paint:lightColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   133
    right := width - halfSep.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   134
    bot := height - halfSep.
24
966098a893f8 *** empty log message ***
claus
parents: 7
diff changeset
   135
    self displayRectangleX:halfSep y:halfSep
966098a893f8 *** empty log message ***
claus
parents: 7
diff changeset
   136
                     width:(width - sep) height:(height - sep + 1).
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   137
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   138
    self paint:shadowColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   139
    left := halfSep - 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   140
    top := halfSep - 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   141
    bm1 := bot - 1.
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   142
    self displayLineFromX:left y:top toX:(right - 1) y:top.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   143
    self displayLineFromX:left y:top toX:left y:bm1.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   144
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   145
    rm3 := right - 3.
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   146
"
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   147
    self displayLineFromX:rm3 y:(halfSep + 1) toX:rm3 y:bm1.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   148
    self displayLineFromX:(halfSep + 2) y:(bot - 2) toX:(right - 2) y:(bot - 2)
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   149
"
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   150
    self displayLineFromX:rm3 y:(halfSep + 1) toX:rm3 y:bm1-1.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   151
    self displayLineFromX:(halfSep + 2) y:(bot - 2) toX:(right - 2 - 1) y:(bot - 2)
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   152
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   153
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   154
redraw
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   155
    "redraw the frame and name if present"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   156
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   157
    |labelLen l x y|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   158
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   159
    label isNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   160
        l := ' '.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   161
        labelLen := 0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   162
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   163
        l := ' ' , label , ' '.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   164
        labelLen := font widthOf:l
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   165
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   166
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   167
    self drawFrame.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   168
    labelLen > 0 ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   169
        labelLen < width ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   170
            (#(topLeft topCenter topRight) includes:layout) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   171
                y := font ascent.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   172
            ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   173
                y := height - font descent.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   174
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   175
            (#(topLeft bottomLeft) includes:layout) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   176
                x := font height
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   177
            ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   178
                (#(topRight bottomRight) includes:layout) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   179
                    x := width - labelLen - font height
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   180
                ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   181
                    x := (width - labelLen) // 2
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   182
                ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   183
            ].
3
claus
parents: 0
diff changeset
   184
            self paint:fgColor on:viewBackground.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   185
            self displayOpaqueString:l x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   186
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   187
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   188
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   189
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   190
!FramedBox methodsFor:'initialization'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   191
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   192
initStyle
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   193
    "default position is top-center, except for ms-windows, where
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   194
     the text is positioned at top-left"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   195
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   196
    super initStyle.
3
claus
parents: 0
diff changeset
   197
    fgColor := Black.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   198
    style == #mswindows ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   199
        layout := #topLeft 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   200
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   201
        layout := #topCenter
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   202
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   203
! !