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