VarVPanel.st
author claus
Thu, 13 Jan 1994 01:18:51 +0100
changeset 24 966098a893f8
parent 23 69f1ba57f67a
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:#VariableVerticalPanel
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    14
         instanceVariableNames:'movedHandle prev start
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    15
                                barHeight barWidth separatingLine
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    16
                                shadowForm lightForm
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    17
                                handlePosition 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    18
                                handleColor noColor'
23
69f1ba57f67a *** empty log message ***
claus
parents: 7
diff changeset
    19
         classVariableNames:''
0
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
VariableVerticalPanel comment:'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    25
5
claus
parents: 3
diff changeset
    26
COPYRIGHT (c) 1991 by Claus Gittinger
0
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
a View to separate its subviews vertically by a movable bar;
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    30
the size-ratios of the subviews can be changed by moving this bar.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    31
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    32
The bar-handle is either an exposed knob (style == #motif)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    33
or the forms defined in Scroller (style ~~ #motif)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    34
24
966098a893f8 *** empty log message ***
claus
parents: 23
diff changeset
    35
$Header: /cvs/stx/stx/libwidg/Attic/VarVPanel.st,v 1.6 1994-01-13 00:18:51 claus Exp $
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    36
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    37
written summer 91 by claus
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    38
'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    39
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    40
!VariableVerticalPanel class methodsFor:'defaults'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    41
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    42
shadowFormOn:aDisplay
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    43
    "use same handle as Scroller"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    44
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    45
    ^ Scroller handleShadowFormOn:aDisplay
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    46
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    47
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    48
lightFormOn:aDisplay
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    49
    "use same handle as Scroller"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    50
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    51
    ^ Scroller handleLightFormOn:aDisplay
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    52
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    53
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    54
!VariableVerticalPanel methodsFor:'initializing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    55
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    56
initialize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    57
    super initialize.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    58
    noColor := Color noColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    59
    handleColor := Black.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    60
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    61
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    62
initStyle
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    63
    |defaultPosition|
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    64
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    65
    super initStyle.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    66
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    67
    (style == #next) ifTrue:[
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    68
        shadowForm := self class shadowFormOn:device.
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    69
        lightForm := self class lightFormOn:device.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    70
        defaultPosition := #center.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    71
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    72
        self barHeight:(shadowForm height + 2).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    73
        barWidth := shadowForm width
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    74
    ] ifFalse:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    75
        defaultPosition := #right
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    76
    ].
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    77
    handlePosition := resources at:'HANDLE_POSITION' default:defaultPosition.
23
69f1ba57f67a *** empty log message ***
claus
parents: 7
diff changeset
    78
    separatingLine := resources at:'SEPARATING_LINE' default:false. "its so ugly"
69f1ba57f67a *** empty log message ***
claus
parents: 7
diff changeset
    79
    self is3D ifTrue:[
69f1ba57f67a *** empty log message ***
claus
parents: 7
diff changeset
    80
        self barHeight:(3 * ViewSpacing)
69f1ba57f67a *** empty log message ***
claus
parents: 7
diff changeset
    81
    ] ifFalse:[
69f1ba57f67a *** empty log message ***
claus
parents: 7
diff changeset
    82
        self barHeight:(2 * ViewSpacing)
69f1ba57f67a *** empty log message ***
claus
parents: 7
diff changeset
    83
    ].
69f1ba57f67a *** empty log message ***
claus
parents: 7
diff changeset
    84
    barWidth := 2 * ViewSpacing. "motif style width"
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    85
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    86
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    87
initCursor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    88
    "set the cursor - a double arrow"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    89
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    90
    "which one looks better ?"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    91
    cursor := Cursor upDownArrow
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    92
    "cursor := Cursor upLimitArrow"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    93
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    94
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    95
initEvents
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    96
    self enableButtonEvents.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    97
    self enableButtonMotionEvents
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    98
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    99
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   100
fixSize 
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   101
    extentChanged ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   102
        super fixSize.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   103
        self resizeSubviewsFrom:1 to:(subViews size)
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   104
    ] ifFalse:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   105
        super fixSize
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   106
    ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   107
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   108
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   109
!VariableVerticalPanel methodsFor:'accessing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   110
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   111
add:aView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   112
    "a view is added; make its size relative (if not already done)"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   113
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   114
"obsolete" self halt.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   115
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   116
    super add:aView.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   117
    shown ifTrue:[
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   118
        (superView isNil or:[superView shown]) ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   119
            self setupSubviewSizes
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   120
        ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   121
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   122
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   123
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   124
removeSubView:aView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   125
    "a view is removed; adjust other subviews sizes"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   126
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   127
    super removeSubView:aView.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   128
    shown ifTrue:[
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   129
        (superView isNil or:[superView shown]) ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   130
            self setupSubviewSizes
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   131
        ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   132
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   133
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   134
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   135
barHeight:nPixel
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   136
    "set the height of the separating bar"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   137
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   138
    barHeight := nPixel.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   139
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   140
    "if screen is very low-res, make certain bar is visible and catchable"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   141
    (barHeight < 4) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   142
        barHeight := 4
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   143
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   144
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   145
    "make it even so spacing is equally spreadable among subviews"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   146
    barHeight odd ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   147
        barHeight := barHeight + 1
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   148
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   149
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   150
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   151
handlePosition:aSymbol
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   152
    "define the position of the handle; the argument aSymbol
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   153
     may be one of #left, #right or #center"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   154
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   155
    handlePosition := aSymbol
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   156
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   157
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   158
handlePosition
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   159
    "return the position of the handle"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   160
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   161
    ^ handlePosition
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   162
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   163
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   164
style:styleSymbol
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   165
    "define the style of the handle;
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   166
     styleSymbol may be #motif to draw a little knob or
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   167
     enything else to draw scrollBars handleForm"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   168
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   169
    (styleSymbol ~~ style) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   170
        style := styleSymbol.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   171
        shadowForm := self class shadowFormOn:device.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   172
        lightForm := self class lightFormOn:device.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   173
        (self is3D and:[style ~~ #motif]) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   174
            shadowForm notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   175
                self barHeight:(shadowForm height + 2).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   176
                barWidth := shadowForm width
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   177
            ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   178
        ].
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   179
        shown ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   180
            self resizeSubviewsFrom:1 to:(subViews size).
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   181
            self redraw
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   182
        ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   183
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   184
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   185
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   186
!VariableVerticalPanel methodsFor:'drawing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   187
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   188
drawHandleFormAtX:hx y:hy
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   189
    "kludge for now"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   190
    (viewBackground colorId notNil
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   191
     and:[shadowColor colorId notNil
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   192
          and:[lightColor colorId notNil]]) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   193
        self foreground:viewBackground background:noColor function:#xor.
24
966098a893f8 *** empty log message ***
claus
parents: 23
diff changeset
   194
        self displayOpaqueForm:shadowForm x:hx y:hy.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   195
        self foreground:shadowColor function:#or.
24
966098a893f8 *** empty log message ***
claus
parents: 23
diff changeset
   196
        self displayOpaqueForm:shadowForm x:hx y:hy.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   197
        self foreground:viewBackground function:#xor.
24
966098a893f8 *** empty log message ***
claus
parents: 23
diff changeset
   198
        self displayOpaqueForm:lightForm x:hx y:hy.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   199
        self foreground:lightColor function:#or.
24
966098a893f8 *** empty log message ***
claus
parents: 23
diff changeset
   200
        self displayOpaqueForm:lightForm x:hx y:hy.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   201
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   202
        self foreground:viewBackground.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   203
        paint := nil. "kludge to force paint to be really set"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   204
        self paint:viewBackground.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   205
        self function:#copy
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   206
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   207
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   208
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   209
drawHandleAtX:hx y:hy
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   210
    |h y m|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   211
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   212
    (self is3D and:[shadowForm notNil]) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   213
        h := shadowForm height
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   214
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   215
        h := barHeight - 4
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   216
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   217
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   218
    self paint:viewBackground.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   219
    self fillRectangleX:margin y:hy 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   220
                  width:(width - margin - margin) 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   221
                  height:barHeight.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   222
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   223
    self is3D ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   224
        m := (barHeight - h) // 2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   225
        shadowForm isNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   226
            y := hy + (barHeight // 2).
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   227
            separatingLine ifTrue:[
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   228
                self paint:shadowColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   229
                self displayLineFromX:margin y:y toX:(width - margin) y:y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   230
                y := y + 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   231
                self paint:lightColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   232
                self displayLineFromX:margin y:y toX:(width - margin) y:y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   233
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   234
            self paint:viewBackground.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   235
            self fillRectangleX:(hx - barWidth) y:hy 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   236
                         width:(barWidth + barWidth) 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   237
                         height:h.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   238
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   239
            self drawEdgesForX:(hx - barWidth)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   240
                             y:(hy + m)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   241
                         width:(barWidth + barWidth)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   242
                        height:h level:2
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   243
        ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   244
            self drawHandleFormAtX:hx y:(hy + m)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   245
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   246
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   247
        y := hy + barHeight - 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   248
        self paint:handleColor.
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   249
        separatingLine ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   250
            self displayLineFromX:0 y:hy+1 toX:width y:hy+1.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   251
            self displayLineFromX:0 y:y toX:width y:y.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   252
        ].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   253
        self fillRectangleX:hx y:hy width:barHeight height:barHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   254
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   255
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   256
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   257
redrawHandlesFrom:start to:stop
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   258
    "redraw some handles"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   259
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   260
    subViews notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   261
        self handleOriginsFrom:start to:stop do:[:hPoint |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   262
            self drawHandleAtX:(hPoint x) y:(hPoint y)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   263
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   264
        movedHandle notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   265
            self noClipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   266
            self xoring:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   267
                self fillRectangleX:0 y:prev width:width height:barHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   268
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   269
            self clipByChildren
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   270
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   271
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   272
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   273
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   274
redraw
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   275
    "redraw the handles"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   276
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   277
    self redrawHandlesFrom:1 to:(subViews size)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   278
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   279
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   280
!VariableVerticalPanel methodsFor:'events'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   281
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   282
sizeChanged:how
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   283
    "tell subviews if I change size"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   284
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   285
    shown ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   286
        (how == #smaller) ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   287
            self resizeSubviewsFrom:1 to:(subViews size)
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   288
        ] ifFalse:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   289
            self resizeSubviewsFrom:(subViews size) to:1
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   290
        ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   291
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   292
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   293
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   294
buttonPress:button x:bx y:by
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   295
    "button was pressed - if it hits a handle, start move"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   296
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   297
    |handle|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   298
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   299
    (button == 1) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   300
        handle := 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   301
        self handleOriginsDo:[:hPoint |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   302
            |hy|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   303
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   304
            hy := hPoint y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   305
            (by between:hy and:(hy + barHeight)) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   306
                movedHandle := handle.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   307
                prev := hy.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   308
                start := by - hy.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   309
                self noClipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   310
                self xoring:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   311
                    self fillRectangleX:0 y:hy width:width height:barHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   312
                ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   313
                self clipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   314
                ^ self
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   315
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   316
            handle := handle + 1
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   317
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   318
        movedHandle := nil
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   319
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   320
        super buttonPress:button x:bx y:by
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   321
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   322
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   323
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   324
buttonMotion:button x:bx y:by
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   325
    "mouse-button was moved while pressed;
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   326
     clear prev handleBar and draw handle bar at new position" 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   327
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   328
    |ypos limitTop limitBot|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   329
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   330
    movedHandle isNil ifTrue: [^ self].          "should not happen"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   331
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   332
    "speedup - if there is already another movement, 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   333
     ignore thisone ... "
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   334
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   335
    device synchronizeOutput.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   336
    self buttonMotionEventPending ifTrue:[^ self].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   337
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   338
    ypos := by - start.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   339
    limitTop := barHeight // 2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   340
    limitBot := self height - barHeight.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   341
    movedHandle > 1 ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   342
        limitTop := (subViews at:movedHandle) origin y + (barHeight // 2)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   343
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   344
    movedHandle < (subViews size - 1) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   345
        limitBot := (subViews at:(movedHandle + 2)) origin y - barHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   346
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   347
    limitBot := limitBot - barHeight.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   348
    (ypos < limitTop) ifTrue:[ "check against view limits"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   349
        ypos := limitTop
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   350
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   351
        (ypos > limitBot) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   352
            ypos := limitBot
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   353
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   354
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   355
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   356
    self noClipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   357
    self xoring:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   358
        self fillRectangleX:0 y:prev width:width height:barHeight.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   359
        self fillRectangleX:0 y:ypos width:width height:barHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   360
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   361
    self clipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   362
    prev := ypos
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   363
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   364
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   365
buttonRelease:button x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   366
    "end bar-move"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   367
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   368
    |aboveView belowView aboveIndex belowIndex newY|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   369
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   370
    (button == 1) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   371
        movedHandle isNil ifTrue:[^ self].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   372
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   373
        "undo the last xor"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   374
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   375
        self noClipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   376
        self xoring:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   377
            self fillRectangleX:0 y:prev width:width height:barHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   378
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   379
        self clipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   380
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   381
        "compute the new relative heights"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   382
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   383
        aboveIndex := movedHandle.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   384
        belowIndex := movedHandle + 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   385
        aboveView := subViews at:aboveIndex.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   386
        belowView := subViews at:belowIndex.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   387
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   388
        newY := (prev + start / height) asFloat.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   389
        aboveView relativeCorner:aboveView relativeCorner x @ newY.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   390
        belowView relativeOrigin:belowView relativeOrigin x @ newY.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   391
        self resizeSubviewsFrom:aboveIndex to:belowIndex.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   392
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   393
        movedHandle := nil.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   394
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   395
        self redrawHandlesFrom:aboveIndex to:belowIndex
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   396
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   397
        super buttonRelease:button x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   398
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   399
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   400
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   401
!VariableVerticalPanel methodsFor:'private'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   402
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   403
anyNonRelativeSubviews
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   404
    "return true, if any of my subviews has no relative origin/extent"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   405
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   406
    1 to:(subViews size) do:[:index |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   407
        |view|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   408
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   409
        view := subViews at:index.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   410
        view relativeExtent isNil ifTrue:[^ true].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   411
        view relativeOrigin isNil ifTrue:[^ true]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   412
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   413
    ^ false
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   414
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   415
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   416
setupSubviewSizes
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   417
    "setup subviews sizes (in case of non-relative sizes)"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   418
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   419
    |y h|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   420
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   421
    self anyNonRelativeSubviews ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   422
        "there is at least one subview without
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   423
         relative origin/extent - setup all subviews
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   424
         to spread evenly ..."
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   425
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   426
        y := 0.0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   427
        h := 1.0 / (subViews size).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   428
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   429
        1 to:(subViews size) do:[:index |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   430
            |view|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   431
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   432
            view := subViews at:index.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   433
            index == subViews size ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   434
                view origin:(0.0 @ y) corner:(1.0 @ 1.0)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   435
            ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   436
                view origin:(0.0 @ y) corner:(1.0 @ (y + h))
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   437
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   438
            y := y + h
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   439
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   440
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   441
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   442
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   443
resizeSubviewsFrom:start to:stop
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   444
    "readjust size of some subviews"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   445
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   446
    |step nSubviews|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   447
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   448
    subViews notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   449
        (start <= stop) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   450
            step := 1
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   451
        ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   452
            step := -1
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   453
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   454
        nSubviews := subViews size.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   455
        start to:stop by:step do:[:index |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   456
            |bw view o1 o2 relOrg relCorner newOrg newCorner|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   457
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   458
            view := subViews at:index.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   459
            bw := view borderWidth.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   460
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   461
            index == 1 ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   462
                o1 := 0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   463
            ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   464
                o1 := barHeight // 2 - bw
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   465
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   466
            index ==  nSubviews ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   467
                o2 := 0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   468
            ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   469
                o2 := barHeight // 2 - bw
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   470
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   471
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   472
            relCorner := view relativeCorner.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   473
            relCorner isNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   474
                self error:'subview must have relative corner'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   475
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   476
            newCorner := view cornerFromRelativeCorner.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   477
            newCorner notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   478
                newCorner y:(newCorner y - o2)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   479
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   480
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   481
            relOrg := view relativeOrigin.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   482
            relOrg isNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   483
                self error:'subview must have relative origin'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   484
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   485
            newOrg := view originFromRelativeOrigin.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   486
            newOrg notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   487
                (index ~~ 1) ifTrue:[  
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   488
                    newOrg y:(newOrg y + o1)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   489
                ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   490
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   491
            view pixelOrigin:newOrg corner:newCorner
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   492
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   493
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   494
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   495
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   496
handleOriginsFrom:start to:stop do:aBlock
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   497
    "evaluate the argument block for some handle-origins"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   498
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   499
    |x hw|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   500
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   501
    subViews notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   502
        shadowForm notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   503
            hw := shadowForm width
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   504
        ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   505
            hw := barHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   506
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   507
        (handlePosition == #left) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   508
            x := hw * 2
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   509
        ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   510
            (handlePosition == #right) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   511
                x := width - (2 * hw) - margin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   512
            ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   513
                x := width // 2
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   514
            ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   515
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   516
        (start + 1) to:stop do:[:index |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   517
            |view y|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   518
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   519
            view := subViews at:index.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   520
            y := view origin y - barHeight + 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   521
            aBlock value:(x @ y)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   522
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   523
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   524
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   525
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   526
handleOriginsDo:aBlock
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   527
    "evaluate the argument block for every handle-origin"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   528
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   529
    self handleOriginsFrom:1 to:(subViews size) do:aBlock
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   530
! !