VarHPanel.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) 1992-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
VariableVerticalPanel subclass:#VariableHorizontalPanel
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    14
         instanceVariableNames:''
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    15
         classVariableNames:'hArrow'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    16
         poolDictionaries:''
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    17
         category:'Views-Layout'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    18
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    19
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    20
VariableHorizontalPanel comment:'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    21
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    22
COPYRIGHT (c) 1992-93 by Claus Gittinger
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    23
              All Rights Reserved
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    24
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    25
a View to separate its subviews horizontally by a movable bar
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    26
to adjust the size-ratios.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    27
The bar-handle is either an exposed knob (knobStyle == #motif)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    28
or the forms defined in Scroller (knobStyle ~~ #motif)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    29
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    30
%W% %E%
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    31
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    32
written summer 92 by claus
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    33
'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    34
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    35
!VariableHorizontalPanel methodsFor:'initializing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    36
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    37
initCursor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    38
    "set the cursor - a horizontal double arrow"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    39
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    40
    "which one looks better ?"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    41
    cursor := Cursor leftRightArrow
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    42
    "cursor := Cursor leftLimitArrow"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    43
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    44
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    45
!VariableHorizontalPanel methodsFor:'private'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    46
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    47
handleOriginsFrom:start to:stop do:aBlock
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    48
    "evaluate the argument block for some handle-origins"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    49
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    50
    |y hh|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    51
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    52
    subViews notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    53
        shadowForm notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    54
            hh := shadowForm height
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    55
        ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    56
            hh := barHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    57
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    58
        (handlePosition == #left) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    59
            y := hh * 2
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    60
        ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    61
            (handlePosition == #right) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    62
                y := height - (2 * hh) - margin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    63
            ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    64
                y := height // 2
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    65
            ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    66
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    67
        (start + 1) to:stop do:[:index |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    68
            |x view|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    69
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    70
            view := subViews at:index.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    71
            x := view origin x - barHeight + 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    72
            aBlock value:(x @ y)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    73
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    74
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    75
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    76
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    77
setupSubviewSizes
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    78
    "setup subviews sizes (in case of non-relative sizes)"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    79
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    80
    |x w |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    81
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    82
    self anyNonRelativeSubviews ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    83
        "there is at least one subview without
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    84
         relative origin/extent - setup all subviews
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    85
         to spread evenly ..."
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    86
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    87
        x := 0.0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    88
        w := 1.0 / (subViews size).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    89
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    90
        1 to:(subViews size) do:[:index |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    91
            |view|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    92
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    93
            view := subViews at:index.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    94
            index == subViews size ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    95
                view origin:(x @ 0.0) corner:(1.0 @ 1.0)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    96
            ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    97
                view origin:(x @ 0.0) corner:((x + w) @ 1.0)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    98
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    99
            x := x + w
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   100
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   101
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   102
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   103
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   104
resizeSubviewsFrom:start to:stop
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   105
    "readjust size of some subviews"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   106
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   107
    |step nSubviews|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   108
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   109
    subViews notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   110
        (start <= stop) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   111
            step := 1
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   112
        ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   113
            step := -1
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   114
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   115
        nSubviews := subViews size.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   116
        start to:stop by:step do:[:index |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   117
            |bw view o1 o2 relCorner relOrg newCorner newOrg|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   118
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   119
            view := subViews at:index.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   120
            bw := view borderWidth.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   121
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   122
            index == 1 ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   123
                o1 := 0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   124
            ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   125
                o1 := barHeight // 2 - bw
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   126
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   127
            index ==  nSubviews ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   128
                o2 := 0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   129
            ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   130
                o2 := barHeight // 2 - bw
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   131
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   132
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   133
            relCorner := view relativeCorner.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   134
            relCorner isNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   135
                self error:'subview must have relative corner'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   136
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   137
            newCorner := view cornerFromRelativeCorner.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   138
            newCorner notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   139
                newCorner x:(newCorner x - o2)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   140
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   141
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   142
            relOrg := view relativeOrigin.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   143
            relOrg isNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   144
                self error:'subview must have relative origin'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   145
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   146
            newOrg := view originFromRelativeOrigin.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   147
            newOrg notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   148
                (index ~~ 1) ifTrue:[  
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   149
                    newOrg x:(newOrg x + o1)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   150
                ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   151
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   152
            view pixelOrigin:newOrg corner:newCorner
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   153
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   154
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   155
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   156
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   157
!VariableHorizontalPanel methodsFor:'events'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   158
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   159
buttonPress:button x:bx y:by
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   160
    "button was pressed - if it hits a handle, start move"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   161
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   162
    |handle|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   163
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   164
    (button == 1) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   165
        handle := 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   166
        self handleOriginsDo:[:hPoint |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   167
            |hx|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   168
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   169
            hx := hPoint x.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   170
            (bx between:hx and:(hx + barHeight)) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   171
                movedHandle := handle.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   172
                prev := hx.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   173
                start := bx - hx.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   174
                self noClipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   175
                self xoring:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   176
                    self fillRectangleX:hx y:0 width:barHeight height:height
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   177
                ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   178
                self clipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   179
                ^ self
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   180
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   181
            handle := handle + 1
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   182
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   183
        movedHandle := nil
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   184
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   185
        super buttonPress:button x:bx y:by
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   186
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   187
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   188
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   189
buttonMotion:button x:bx y:by
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   190
    "mouse-button was moved while pressed;
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   191
     clear prev handleBar and draw handle bar at new position" 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   192
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   193
    |xpos limitTop limitBot|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   194
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   195
    movedHandle isNil ifTrue: [^ self].          "should not happen"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   196
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   197
    "speedup - if there is already another movement, 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   198
     ignore thisone ... "
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   199
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   200
    device synchronizeOutput.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   201
    self buttonMotionEventPending ifTrue:[^ self].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   202
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   203
    xpos := bx - start.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   204
    limitTop := barHeight // 2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   205
    limitBot := self width - barHeight.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   206
    movedHandle > 1 ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   207
        limitTop := (subViews at:movedHandle) origin x + (barHeight // 2)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   208
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   209
    movedHandle < (subViews size - 1) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   210
        limitBot := (subViews at:(movedHandle + 2)) origin x - barHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   211
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   212
    limitBot := limitBot - barHeight.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   213
    (xpos < limitTop) ifTrue:[ "check against view limits"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   214
        xpos := limitTop
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   215
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   216
        (xpos > limitBot) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   217
            xpos := limitBot
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   218
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   219
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   220
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   221
    self noClipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   222
    self xoring:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   223
        self fillRectangleX:prev y:0 width:barHeight height:height.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   224
        self fillRectangleX:xpos y:0 width:barHeight height:height
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   225
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   226
    self clipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   227
    prev := xpos
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   228
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   229
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   230
buttonRelease:button x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   231
    "end bar-move"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   232
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   233
    |aboveView belowView aboveIndex belowIndex newX|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   234
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   235
    (button == 1) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   236
        movedHandle isNil ifTrue:[^ self].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   237
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   238
        "undo the last xor"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   239
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   240
        self noClipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   241
        self xoring:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   242
            self fillRectangleX:prev y:0 width:barHeight height:height
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   243
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   244
        self clipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   245
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   246
        "compute the new relative heights"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   247
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   248
        aboveIndex := movedHandle.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   249
        belowIndex := movedHandle + 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   250
        aboveView := subViews at:aboveIndex.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   251
        belowView := subViews at:belowIndex.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   252
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   253
        newX := (prev + start / width) asFloat .
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   254
        aboveView relativeCorner:newX @ aboveView relativeCorner y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   255
        belowView relativeOrigin:newX @ belowView relativeOrigin y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   256
        self resizeSubviewsFrom:aboveIndex to:belowIndex.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   257
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   258
        movedHandle := nil.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   259
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   260
        "and redraw handles"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   261
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   262
        self redrawHandlesFrom:aboveIndex to:belowIndex
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   263
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   264
        super buttonRelease:button x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   265
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   266
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   267
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   268
!VariableHorizontalPanel methodsFor:'drawing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   269
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   270
drawHandleAtX:hx y:hy
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   271
    |w x m|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   272
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   273
    (self is3D and:[shadowForm notNil]) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   274
        w := shadowForm height
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   275
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   276
        w := barHeight - 4
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   277
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   278
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   279
    self paint:viewBackground.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   280
    self fillRectangleX:hx y:margin 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   281
                  width:barHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   282
                 height:(height - margin - margin).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   283
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   284
    self is3D ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   285
         m := (barHeight - w) // 2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   286
         shadowForm isNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   287
            x := hx + (barHeight // 2).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   288
            style == #motif ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   289
                self paint:shadowColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   290
                self displayLineFromX:x y:margin toX:x y:(height - margin).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   291
                x := x + 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   292
                self paint:lightColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   293
                self displayLineFromX:x y:margin toX:x y:(height - margin).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   294
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   295
            self paint:viewBackground.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   296
            self fillRectangleX:hx y:(hy - barWidth) 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   297
                          width:w height:(barWidth + barWidth).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   298
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   299
            self drawEdgesForX:(hx + m)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   300
                             y:(hy - barWidth)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   301
                         width:w height:(barWidth + barWidth)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   302
                         level:2
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   303
        ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   304
            self drawHandleFormAtX:(hx + m) y:hy
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   305
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   306
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   307
        x := hx + barHeight - 2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   308
        self paint:handleColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   309
        self displayLineFromX:hx y:0 toX:hx y:height.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   310
        self displayLineFromX:x y:0 toX:x y:height.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   311
        self fillRectangleX:hx y:hy width:barHeight height:barHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   312
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   313
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   314
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   315
redrawHandlesFrom:start to:stop
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   316
    "redraw some handles"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   317
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   318
    subViews notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   319
        self handleOriginsFrom:start to:stop do:[:hPoint |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   320
            self drawHandleAtX:(hPoint x) y:(hPoint y)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   321
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   322
        movedHandle notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   323
            self noClipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   324
            self xoring:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   325
                self fillRectangleX:prev y:0 width:barHeight height:height
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   326
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   327
            self clipByChildren
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   328
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   329
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   330
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   331
! !