VariableHorizontalPanel.st
author claus
Sun, 07 Aug 1994 15:23:42 +0200
changeset 38 4b9b70b2cc87
parent 23 69f1ba57f67a
child 59 450ce95a72a4
permissions -rw-r--r--
2.10.3 pre-final version
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) 1992 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
VariableVerticalPanel subclass:#VariableHorizontalPanel
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    14
         instanceVariableNames:''
23
69f1ba57f67a *** empty log message ***
claus
parents: 7
diff changeset
    15
         classVariableNames:''
0
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:'
5
claus
parents: 3
diff changeset
    21
COPYRIGHT (c) 1992 by Claus Gittinger
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    22
              All Rights Reserved
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    23
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    24
$Header: /cvs/stx/stx/libwidg/VariableHorizontalPanel.st,v 1.6 1994-08-07 13:23:35 claus Exp $
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    25
'!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    26
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    27
!VariableHorizontalPanel class methodsFor:'documentation'!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    28
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    29
copyright
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    30
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    31
 COPYRIGHT (c) 1992 by Claus Gittinger
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    32
              All Rights Reserved
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    33
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    34
 This software is furnished under a license and may be used
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    35
 only in accordance with the terms of that license and with the
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    36
 inclusion of the above copyright notice.   This software may not
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    37
 be provided or otherwise made available to, or used by, any
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    38
 other person.  No title to or ownership of the software is
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    39
 hereby transferred.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    40
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    41
!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    42
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    43
version
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    44
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    45
$Header: /cvs/stx/stx/libwidg/VariableHorizontalPanel.st,v 1.6 1994-08-07 13:23:35 claus Exp $
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    46
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    47
!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    48
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    49
documentation
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    50
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    51
    a View to separate its subviews horizontally by a movable bar
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    52
    to adjust the size-ratios.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    53
    The bar-handle is either an exposed knob (knobStyle == #motif)
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    54
    or the forms defined in Scroller (knobStyle ~~ #motif)
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    55
    or nothing.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    56
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    57
    The subvies dimensions MUST be given as relative sizes;
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    58
    typically creation is done as:
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    59
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    60
        p := VariableHorizontalPanel in:superView.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    61
        v1 := <someViewClass> origin:0.0 @ 0.0
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    62
                              corner:0.5 @ 1.0
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    63
                                  in:p.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    64
        v2 := <someViewClass> origin:0.5 @ 0.0
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    65
                              corner:0.8 @ 1.0
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    66
                                  in:p.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    67
        v3 := <someViewClass> origin:0.8 @ 0.0
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    68
                              corner:1.0 @ 1.0
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    69
                                  in:p.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    70
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    71
   example:
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    72
        |top p v1 v2 v3|
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    73
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    74
        top := StandardSystemView new.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    75
        top extent:300@200.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    76
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    77
        p := VariableHorizontalPanel 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    78
                 origin:0.0 @ 0.0
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    79
                 corner:1.0 @ 1.0
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    80
                 in:top.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    81
        v1 := SelectionInListView 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    82
                 origin:0.0 @ 0.0
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    83
                 corner:0.5 @ 1.0
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    84
                 in:p.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    85
        v2 := EditTextView 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    86
                 origin:0.5 @ 0.0
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    87
                 corner:0.8 @ 1.0
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    88
                 in:p.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    89
        v3 := ScrollableView 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    90
                 for:TextView 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    91
                 in:p.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    92
        v3 origin:0.8 @ 0.0 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    93
           corner:1.0 @ 1.0.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    94
        top open
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    95
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    96
! !
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    97
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    98
!VariableHorizontalPanel methodsFor:'initializing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    99
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   100
initCursor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   101
    "set the cursor - a horizontal double arrow"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   102
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   103
    cursor := Cursor sourceForm:(Form fromFile:'VHPanel.xbm')
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   104
                     maskForm:(Form fromFile:'VHPanel_m.xbm')
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   105
                     hotX:8
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   106
                     hotY:8.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   107
    "
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   108
     if bitmaps are not available, use a standard cursor
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   109
    "
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   110
    cursor isNil ifTrue:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   111
        "which one looks better ?"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   112
        cursor := Cursor leftRightArrow
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   113
        "cursor := Cursor leftLimitArrow"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   114
    ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   115
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   116
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   117
!VariableHorizontalPanel methodsFor:'private'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   118
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   119
handleOriginsFrom:start to:stop do:aBlock
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   120
    "evaluate the argument block for some handle-origins"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   121
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   122
    |y hh|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   123
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   124
    subViews notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   125
        shadowForm notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   126
            hh := shadowForm height
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   127
        ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   128
            hh := barHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   129
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   130
        (handlePosition == #left) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   131
            y := hh * 2
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   132
        ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   133
            (handlePosition == #right) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   134
                y := height - (2 * hh) - margin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   135
            ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   136
                y := height // 2
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   137
            ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   138
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   139
        (start + 1) to:stop do:[:index |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   140
            |x view|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   141
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   142
            view := subViews at:index.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   143
            x := view origin x - barHeight + 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   144
            aBlock value:(x @ y)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   145
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   146
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   147
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   148
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   149
setupSubviewSizes
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   150
    "setup subviews sizes (in case of non-relative sizes)"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   151
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   152
    |x w |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   153
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   154
    self anyNonRelativeSubviews ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   155
        "there is at least one subview without
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   156
         relative origin/extent - setup all subviews
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   157
         to spread evenly ..."
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   158
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   159
        x := 0.0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   160
        w := 1.0 / (subViews size).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   161
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   162
        1 to:(subViews size) do:[:index |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   163
            |view|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   164
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   165
            view := subViews at:index.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   166
            index == subViews size ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   167
                view origin:(x @ 0.0) corner:(1.0 @ 1.0)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   168
            ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   169
                view origin:(x @ 0.0) corner:((x + w) @ 1.0)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   170
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   171
            x := x + w
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   172
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   173
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   174
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   175
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   176
resizeSubviewsFrom:start to:stop
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   177
    "readjust size of some subviews"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   178
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   179
    |step nSubviews|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   180
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   181
    subViews notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   182
        (start <= stop) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   183
            step := 1
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   184
        ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   185
            step := -1
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   186
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   187
        nSubviews := subViews size.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   188
        start to:stop by:step do:[:index |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   189
            |bw view o1 o2 relCorner relOrg newCorner newOrg|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   190
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   191
            view := subViews at:index.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   192
            bw := view borderWidth.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   193
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   194
            index == 1 ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   195
                o1 := 0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   196
            ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   197
                o1 := barHeight // 2 - bw
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   198
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   199
            index ==  nSubviews ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   200
                o2 := 0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   201
            ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   202
                o2 := barHeight // 2 - bw
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   203
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   204
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   205
            relCorner := view relativeCorner.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   206
            relCorner isNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   207
                self error:'subview must have relative corner'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   208
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   209
            newCorner := view cornerFromRelativeCorner.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   210
            newCorner notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   211
                newCorner x:(newCorner x - o2)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   212
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   213
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   214
            relOrg := view relativeOrigin.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   215
            relOrg isNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   216
                self error:'subview must have relative origin'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   217
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   218
            newOrg := view originFromRelativeOrigin.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   219
            newOrg notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   220
                (index ~~ 1) ifTrue:[  
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   221
                    newOrg x:(newOrg x + o1)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   222
                ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   223
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   224
            view pixelOrigin:newOrg corner:newCorner
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   225
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   226
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   227
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   228
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   229
!VariableHorizontalPanel methodsFor:'events'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   230
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   231
buttonPress:button x:bx y:by
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   232
    "button was pressed - if it hits a handle, start move"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   233
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   234
    |handle|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   235
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   236
    ((button == 1) or:[button == #select]) ifTrue:[
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   237
        handle := 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   238
        self handleOriginsDo:[:hPoint |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   239
            |hx|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   240
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   241
            hx := hPoint x.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   242
            (bx between:hx and:(hx + barHeight)) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   243
                movedHandle := handle.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   244
                prev := hx.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   245
                start := bx - hx.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   246
                self noClipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   247
                self xoring:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   248
                    self fillRectangleX:hx y:0 width:barHeight height:height
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   249
                ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   250
                self clipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   251
                ^ self
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   252
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   253
            handle := handle + 1
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   254
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   255
        movedHandle := nil
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   256
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   257
        super buttonPress:button x:bx y:by
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   258
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   259
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   260
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   261
buttonMotion:button x:bx y:by
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   262
    "mouse-button was moved while pressed;
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   263
     clear prev handleBar and draw handle bar at new position" 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   264
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   265
    |xpos limitTop limitBot|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   266
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   267
    movedHandle isNil ifTrue: [^ self].          "should not happen"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   268
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   269
    "speedup - if there is already another movement, 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   270
     ignore thisone ... "
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   271
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   272
    device synchronizeOutput.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   273
    self buttonMotionEventPending ifTrue:[^ self].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   274
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   275
    xpos := bx - start.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   276
    limitTop := barHeight // 2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   277
    limitBot := self width - barHeight.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   278
    movedHandle > 1 ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   279
        limitTop := (subViews at:movedHandle) origin x + (barHeight // 2)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   280
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   281
    movedHandle < (subViews size - 1) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   282
        limitBot := (subViews at:(movedHandle + 2)) origin x - barHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   283
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   284
    limitBot := limitBot - barHeight.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   285
    (xpos < limitTop) ifTrue:[ "check against view limits"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   286
        xpos := limitTop
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   287
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   288
        (xpos > limitBot) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   289
            xpos := limitBot
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   290
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   291
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   292
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   293
    self noClipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   294
    self xoring:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   295
        self fillRectangleX:prev y:0 width:barHeight height:height.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   296
        self fillRectangleX:xpos y:0 width:barHeight height:height
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   297
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   298
    self clipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   299
    prev := xpos
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   300
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   301
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   302
buttonRelease:button x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   303
    "end bar-move"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   304
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   305
    |aboveView belowView aboveIndex belowIndex newX|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   306
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   307
    ((button == 1) or:[button == #select]) ifTrue:[
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   308
        movedHandle isNil ifTrue:[^ self].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   309
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   310
        "undo the last xor"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   311
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   312
        self noClipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   313
        self xoring:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   314
            self fillRectangleX:prev y:0 width:barHeight height:height
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   315
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   316
        self clipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   317
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   318
        "compute the new relative heights"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   319
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   320
        aboveIndex := movedHandle.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   321
        belowIndex := movedHandle + 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   322
        aboveView := subViews at:aboveIndex.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   323
        belowView := subViews at:belowIndex.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   324
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   325
        newX := (prev + start / width) asFloat .
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   326
        aboveView relativeCorner:newX @ aboveView relativeCorner y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   327
        belowView relativeOrigin:newX @ belowView relativeOrigin y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   328
        self resizeSubviewsFrom:aboveIndex to:belowIndex.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   329
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   330
        movedHandle := nil.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   331
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   332
        "and redraw handles"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   333
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   334
        self redrawHandlesFrom:aboveIndex to:belowIndex
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   335
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   336
        super buttonRelease:button x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   337
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   338
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   339
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   340
!VariableHorizontalPanel methodsFor:'drawing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   341
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   342
drawHandleAtX:hx y:hy
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   343
    |w x m|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   344
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   345
    (self is3D and:[shadowForm notNil]) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   346
        w := shadowForm height
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   347
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   348
        w := barHeight - 4
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   349
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   350
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   351
    self paint:viewBackground.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   352
    self fillRectangleX:hx y:margin 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   353
                  width:barHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   354
                 height:(height - margin - margin).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   355
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   356
    self is3D ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   357
         m := (barHeight - w) // 2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   358
         shadowForm isNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   359
            x := hx + (barHeight // 2).
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   360
            separatingLine ifTrue:[
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   361
                self paint:shadowColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   362
                self displayLineFromX:x y:margin toX:x y:(height - margin).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   363
                x := x + 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   364
                self paint:lightColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   365
                self displayLineFromX:x y:margin toX:x y:(height - margin).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   366
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   367
            self paint:viewBackground.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   368
            self fillRectangleX:hx y:(hy - barWidth) 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   369
                          width:w height:(barWidth + barWidth).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   370
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   371
            "/ x := hx.    "old"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   372
            x := hx - 1.   "2.10.3"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   373
            self drawEdgesForX:(x + m)
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   374
                             y:(hy - barWidth)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   375
                         width:w height:(barWidth + barWidth)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   376
                         level:2
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   377
        ] ifFalse:[
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   378
            "/ x := hx.    "old"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   379
            x := hx - 1.   "2.10.3"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   380
            self drawHandleFormAtX:(x + m) y:hy
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   381
        ].
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   382
        style == #st80 ifTrue:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   383
            x := hx - 1.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   384
            self paint:lightColor.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   385
            self displayLineFromX:x y:margin toX:x y:(height - margin).
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   386
            x := hx + barHeight - 2.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   387
            self paint:shadowColor.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   388
            self displayLineFromX:x y:margin toX:x y:(height - margin).
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   389
        ].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   390
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   391
        x := hx + barHeight - 2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   392
        self paint:handleColor.
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   393
        separatingLine ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   394
            self displayLineFromX:hx y:0 toX:hx y:height.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   395
            self displayLineFromX:x y:0 toX:x y:height.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   396
        ].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   397
        self fillRectangleX:hx y:hy width:barHeight height:barHeight
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
redrawHandlesFrom:start to:stop
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   402
    "redraw some handles"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   403
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   404
    subViews notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   405
        self handleOriginsFrom:start to:stop do:[:hPoint |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   406
            self drawHandleAtX:(hPoint x) y:(hPoint y)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   407
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   408
        movedHandle notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   409
            self noClipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   410
            self xoring:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   411
                self fillRectangleX:prev y:0 width:barHeight height:height
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   412
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   413
            self clipByChildren
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   414
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   415
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   416
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   417
! !