VariableVerticalPanel.st
author claus
Wed, 24 Aug 1994 01:38:59 +0200
changeset 51 e895ac4cc7c8
parent 38 4b9b70b2cc87
child 59 450ce95a72a4
permissions -rw-r--r--
support non-string entries
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     1
"
5
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1991 by Claus Gittinger
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     3
              All Rights Reserved
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     4
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    11
"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    12
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    13
View subclass:#VariableVerticalPanel
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    14
         instanceVariableNames:'movedHandle prev start
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    15
                                barHeight barWidth separatingLine
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    16
                                shadowForm lightForm
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    17
                                showHandle handlePosition 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    18
                                handleColor noColor
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    19
                                trackLine'
23
69f1ba57f67a *** empty log message ***
claus
parents: 7
diff changeset
    20
         classVariableNames:''
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    21
         poolDictionaries:''
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    22
         category:'Views-Layout'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    23
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    24
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    25
VariableVerticalPanel comment:'
5
claus
parents: 3
diff changeset
    26
COPYRIGHT (c) 1991 by Claus Gittinger
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    27
              All Rights Reserved
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    28
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    29
$Header: /cvs/stx/stx/libwidg/VariableVerticalPanel.st,v 1.7 1994-08-07 13:23:37 claus Exp $
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    30
'!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    31
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    32
!VariableVerticalPanel class methodsFor:'documentation'!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    33
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    34
copyright
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    35
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    36
 COPYRIGHT (c) 1991 by Claus Gittinger
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    37
              All Rights Reserved
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    39
 This software is furnished under a license and may be used
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    40
 only in accordance with the terms of that license and with the
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    41
 inclusion of the above copyright notice.   This software may not
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    42
 be provided or otherwise made available to, or used by, any
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    43
 other person.  No title to or ownership of the software is
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    44
 hereby transferred.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    45
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    46
!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    47
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    48
version
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    49
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    50
$Header: /cvs/stx/stx/libwidg/VariableVerticalPanel.st,v 1.7 1994-08-07 13:23:37 claus Exp $
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    51
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    52
!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    53
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    54
documentation
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    55
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    56
    a View to separate its subviews vertically by a movable bar;
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    57
    the size-ratios of the subviews can be changed by moving this bar.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    58
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    59
    The bar-handle is either an exposed knob (style == #motif)
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    60
    or the forms defined in Scroller (style ~~ #motif)
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    61
    or nothing.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    62
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    63
    The subvies dimensions MUST be given as relative sizes;
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    64
    typically creation is done as:
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    65
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    66
        p := VariableVerticalPanel in:superView.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    67
        v1 := <someViewClass> origin:0.0 @ 0.0
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    68
                              corner:1.0 @ 0.5
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    69
                                  in:p.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    70
        v2 := <someViewClass> origin:0.0 @ 0.5 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    71
                              corner:1.0 @ 0.8 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    72
                                  in:p.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    73
        v3 := <someViewClass> origin:0.0 @ 0.8 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    74
                              corner:1.0 @ 1.0
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    75
                                  in:p.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    76
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    77
   example:
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    78
        |top p v1 v2 v3|
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    79
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    80
        top := StandardSystemView new.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    81
        top extent:300@300.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    82
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    83
        p := VariableVerticalPanel 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    84
                 origin:0.0 @ 0.0
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    85
                 corner:1.0 @ 1.0
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    86
                 in:top.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    87
        v1 := ScrollableView for:SelectionInListView in:p.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    88
        v1 origin:0.0 @ 0.0
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    89
           corner:1.0 @ 0.5.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    90
        v1 list:(FileDirectory directoryNamed:'/etc') contents.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    91
        v1 action:[:selNr |
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    92
                |fullName stream text|
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    93
                fullName := '/etc/' , v1 selectionValue.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    94
                stream := fullName asFilename readStream.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    95
                stream notNil ifTrue:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    96
                    text := stream contents.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    97
                    v2 contents:text.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    98
                    v3 contents:text
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    99
                ]
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   100
        ].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   101
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   102
        v2 := TextView 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   103
                 origin:0.0 @ 0.5 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   104
                 corner:1.0 @ 0.8 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   105
                 in:p.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   106
        v3 := ScrollableView 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   107
                 for:EditTextView 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   108
                 in:p.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   109
        v3 origin:0.0 @ 0.8 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   110
           corner:1.0 @ 1.0.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   111
        top open
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   112
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   113
! !
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   114
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   115
!VariableVerticalPanel class methodsFor:'defaults'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   116
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   117
shadowFormOn:aDisplay
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   118
    "use same handle as Scroller"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   119
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   120
    ^ Scroller handleShadowFormOn:aDisplay
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   121
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   122
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   123
lightFormOn:aDisplay
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   124
    "use same handle as Scroller"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   125
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   126
    ^ Scroller handleLightFormOn:aDisplay
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   127
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   128
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   129
!VariableVerticalPanel methodsFor:'initializing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   130
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   131
initialize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   132
    super initialize.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   133
    noColor := Color noColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   134
    handleColor := Black.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   135
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   136
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   137
initStyle
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   138
    super initStyle.
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   139
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   140
    showHandle := style ~~ #mswindows.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   141
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   142
    (style == #next) ifTrue:[
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   143
        shadowForm := self class shadowFormOn:device.
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   144
        lightForm := self class lightFormOn:device.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   145
        self barHeight:(shadowForm height + 2).
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   146
        barWidth := shadowForm width.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   147
        handlePosition := #center.
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   148
    ] ifFalse:[
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   149
        shadowForm := lightForm := nil.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   150
        handlePosition := #right
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   151
    ].
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   152
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   153
    style == #motif ifTrue:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   154
        trackLine := true.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   155
        separatingLine := "true" false. "its so ugly"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   156
    ] ifFalse:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   157
        trackLine := false.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   158
        separatingLine := false
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   159
    ].
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   160
23
69f1ba57f67a *** empty log message ***
claus
parents: 7
diff changeset
   161
    self is3D ifTrue:[
69f1ba57f67a *** empty log message ***
claus
parents: 7
diff changeset
   162
        self barHeight:(3 * ViewSpacing)
69f1ba57f67a *** empty log message ***
claus
parents: 7
diff changeset
   163
    ] ifFalse:[
69f1ba57f67a *** empty log message ***
claus
parents: 7
diff changeset
   164
        self barHeight:(2 * ViewSpacing)
69f1ba57f67a *** empty log message ***
claus
parents: 7
diff changeset
   165
    ].
69f1ba57f67a *** empty log message ***
claus
parents: 7
diff changeset
   166
    barWidth := 2 * ViewSpacing. "motif style width"
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   167
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   168
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   169
initCursor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   170
    "set the cursor - a double arrow"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   171
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   172
    cursor := Cursor sourceForm:(Form fromFile:'VVPanel.xbm')
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   173
                     maskForm:(Form fromFile:'VVPanel_m.xbm')
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   174
                     hotX:8
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   175
                     hotY:8.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   176
    "
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   177
     if bitmaps are not available, use a standard cursor
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   178
    "
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   179
    cursor isNil ifTrue:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   180
        "which one looks better ?"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   181
        cursor := Cursor upDownArrow
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   182
        "cursor := Cursor upLimitArrow"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   183
    ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   184
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   185
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   186
initEvents
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   187
    self enableButtonEvents.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   188
    self enableButtonMotionEvents
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   189
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   190
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   191
fixSize 
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   192
    extentChanged ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   193
        super fixSize.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   194
        self resizeSubviewsFrom:1 to:(subViews size)
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   195
    ] ifFalse:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   196
        super fixSize
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   197
    ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   198
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   199
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   200
!VariableVerticalPanel methodsFor:'accessing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   201
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   202
add:aView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   203
    "a view is added; make its size relative (if not already done)"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   204
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   205
"obsolete" self halt.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   206
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   207
    super add:aView.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   208
    shown ifTrue:[
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   209
        (superView isNil or:[superView shown]) ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   210
            self setupSubviewSizes
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   211
        ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   212
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   213
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   214
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   215
removeSubView:aView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   216
    "a view is removed; adjust other subviews sizes"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   217
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   218
    super removeSubView:aView.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   219
    shown ifTrue:[
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   220
        (superView isNil or:[superView shown]) ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   221
            self setupSubviewSizes
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   222
        ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   223
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   224
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   225
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   226
barHeight:nPixel
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   227
    "set the height of the separating bar"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   228
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   229
    barHeight := nPixel.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   230
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   231
    "if screen is very low-res, make certain bar is visible and catchable"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   232
    (barHeight < 4) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   233
        barHeight := 4
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   234
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   235
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   236
    "make it even so spacing is equally spreadable among subviews"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   237
    barHeight odd ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   238
        barHeight := barHeight + 1
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   239
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   240
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   241
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   242
handlePosition:aSymbol
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   243
    "define the position of the handle; the argument aSymbol
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   244
     may be one of #left, #right or #center"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   245
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   246
    handlePosition := aSymbol
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   247
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   248
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   249
handlePosition
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   250
    "return the position of the handle"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   251
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   252
    ^ handlePosition
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   253
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   254
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   255
style:styleSymbol
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   256
    "define the style of the handle;
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   257
     styleSymbol may be #motif to draw a little knob or
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   258
     enything else to draw scrollBars handleForm"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   259
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   260
    (styleSymbol ~~ style) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   261
        style := styleSymbol.
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   262
        style == #next ifTrue:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   263
            shadowForm := self class shadowFormOn:device.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   264
            lightForm := self class lightFormOn:device.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   265
        ] ifFalse:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   266
            shadowForm := lightForm := nil
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   267
        ].
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   268
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   269
        shadowForm notNil ifTrue:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   270
            (self is3D and:[style ~~ #motif]) ifTrue:[
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   271
                self barHeight:(shadowForm height + 2).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   272
                barWidth := shadowForm width
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   273
            ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   274
        ].
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   275
        shown ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   276
            self resizeSubviewsFrom:1 to:(subViews size).
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   277
            self redraw
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   278
        ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   279
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   280
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   281
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   282
!VariableVerticalPanel methodsFor:'drawing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   283
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   284
drawHandleFormAtX:hx y:hy
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   285
    "kludge for now"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   286
    (viewBackground colorId notNil
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   287
     and:[shadowColor colorId notNil
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   288
          and:[lightColor colorId notNil]]) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   289
        self foreground:viewBackground background:noColor function:#xor.
24
966098a893f8 *** empty log message ***
claus
parents: 23
diff changeset
   290
        self displayOpaqueForm:shadowForm x:hx y:hy.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   291
        self foreground:shadowColor function:#or.
24
966098a893f8 *** empty log message ***
claus
parents: 23
diff changeset
   292
        self displayOpaqueForm:shadowForm x:hx y:hy.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   293
        self foreground:viewBackground function:#xor.
24
966098a893f8 *** empty log message ***
claus
parents: 23
diff changeset
   294
        self displayOpaqueForm:lightForm x:hx y:hy.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   295
        self foreground:lightColor function:#or.
24
966098a893f8 *** empty log message ***
claus
parents: 23
diff changeset
   296
        self displayOpaqueForm:lightForm x:hx y:hy.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   297
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   298
        self foreground:viewBackground.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   299
        paint := nil. "kludge to force paint to be really set"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   300
        self paint:viewBackground.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   301
        self function:#copy
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   302
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   303
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   304
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   305
drawHandleAtX:hx y:hy
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   306
    |h y m|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   307
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   308
    (self is3D and:[shadowForm notNil]) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   309
        h := shadowForm height
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   310
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   311
        h := barHeight - 4
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   312
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   313
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   314
    self paint:viewBackground.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   315
    self fillRectangleX:margin y:hy 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   316
                  width:(width - margin - margin) 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   317
                  height:barHeight.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   318
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   319
    self is3D ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   320
        m := (barHeight - h) // 2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   321
        shadowForm isNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   322
            y := hy + (barHeight // 2).
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   323
            separatingLine ifTrue:[
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   324
                self paint:shadowColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   325
                self displayLineFromX:margin y:y toX:(width - margin) y:y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   326
                y := y + 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   327
                self paint:lightColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   328
                self displayLineFromX:margin y:y toX:(width - margin) y:y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   329
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   330
            self paint:viewBackground.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   331
            self fillRectangleX:(hx - barWidth) y:hy 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   332
                         width:(barWidth + barWidth) 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   333
                         height:h.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   334
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   335
            "/ y := hy.   "old"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   336
            y := hy - 1.  "2.10.3"
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   337
            self drawEdgesForX:(hx - barWidth)
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   338
                             y:(y + m)
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   339
                         width:(barWidth + barWidth)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   340
                        height:h level:2
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   341
        ] ifFalse:[
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   342
            "/ y := hy.   "old"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   343
            y := hy - 1.  "2.10.3"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   344
            self drawHandleFormAtX:hx y:(y + m)
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   345
        ].
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   346
        style == #st80 ifTrue:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   347
            y := hy - 1.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   348
            self paint:lightColor.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   349
            self displayLineFromX:margin y:y toX:(width - margin) y:y.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   350
            y := hy + barHeight - 2.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   351
            self paint:shadowColor.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   352
            self displayLineFromX:margin y:y toX:(width - margin) y:y.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   353
        ].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   354
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   355
        y := hy + barHeight - 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   356
        self paint:handleColor.
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   357
        separatingLine ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   358
            self displayLineFromX:0 y:hy+1 toX:width y:hy+1.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   359
            self displayLineFromX:0 y:y toX:width y:y.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   360
        ].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   361
        self fillRectangleX:hx y:hy width:barHeight height:barHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   362
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   363
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   364
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   365
redrawHandlesFrom:start to:stop
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   366
    "redraw some handles"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   367
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   368
    subViews notNil ifTrue:[
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   369
        showHandle ifTrue:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   370
            self handleOriginsFrom:start to:stop do:[:hPoint |
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   371
                self drawHandleAtX:(hPoint x) y:(hPoint y)
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   372
            ].
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   373
            movedHandle notNil ifTrue:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   374
                self noClipByChildren.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   375
                self xoring:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   376
                    trackLine ifTrue:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   377
                        self displayLineFromX:0 y:prev+(barHeight // 2)
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   378
                                          toX:width y:prev+(barHeight // 2).
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   379
                    ] ifFalse:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   380
                        self fillRectangleX:0 y:prev width:width height:barHeight
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   381
                    ]
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   382
                ].
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   383
                self clipByChildren
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   384
            ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   385
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   386
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   387
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   388
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   389
redraw
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   390
    "redraw the handles"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   391
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   392
    self redrawHandlesFrom:1 to:(subViews size)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   393
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   394
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   395
!VariableVerticalPanel methodsFor:'events'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   396
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   397
sizeChanged:how
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   398
    "tell subviews if I change size"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   399
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   400
    shown ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   401
        (how == #smaller) ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   402
            self resizeSubviewsFrom:1 to:(subViews size)
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   403
        ] ifFalse:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   404
            self resizeSubviewsFrom:(subViews size) to:1
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   405
        ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   406
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   407
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   408
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   409
buttonPress:button x:bx y:by
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   410
    "button was pressed - if it hits a handle, start move"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   411
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   412
    |handle|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   413
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   414
    ((button == 1) or:[button == #select]) ifTrue:[
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   415
        handle := 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   416
        self handleOriginsDo:[:hPoint |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   417
            |hy|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   418
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   419
            hy := hPoint y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   420
            (by between:hy and:(hy + barHeight)) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   421
                movedHandle := handle.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   422
                prev := hy.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   423
                start := by - hy.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   424
                self noClipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   425
                self xoring:[
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   426
                    trackLine ifTrue:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   427
                        self displayLineFromX:0 y:hy+(barHeight // 2) 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   428
                                          toX:width y:hy+(barHeight // 2).
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   429
                    ] ifFalse:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   430
                        self fillRectangleX:0 y:hy width:width height:barHeight
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   431
                    ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   432
                ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   433
                self clipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   434
                ^ self
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   435
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   436
            handle := handle + 1
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   437
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   438
        movedHandle := nil
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   439
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   440
        super buttonPress:button x:bx y:by
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   441
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   442
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   443
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   444
buttonMotion:button x:bx y:by
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   445
    "mouse-button was moved while pressed;
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   446
     clear prev handleBar and draw handle bar at new position" 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   447
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   448
    |ypos limitTop limitBot|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   449
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   450
    movedHandle isNil ifTrue: [^ self].          "should not happen"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   451
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   452
    "speedup - if there is already another movement, 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   453
     ignore thisone ... "
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   454
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   455
    device synchronizeOutput.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   456
    self buttonMotionEventPending ifTrue:[^ self].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   457
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   458
    ypos := by - start.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   459
    limitTop := barHeight // 2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   460
    limitBot := self height - barHeight.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   461
    movedHandle > 1 ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   462
        limitTop := (subViews at:movedHandle) origin y + (barHeight // 2)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   463
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   464
    movedHandle < (subViews size - 1) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   465
        limitBot := (subViews at:(movedHandle + 2)) origin y - barHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   466
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   467
    limitBot := limitBot - barHeight.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   468
    (ypos < limitTop) ifTrue:[ "check against view limits"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   469
        ypos := limitTop
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   470
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   471
        (ypos > limitBot) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   472
            ypos := limitBot
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   473
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   474
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   475
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   476
    self noClipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   477
    self xoring:[
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   478
        trackLine ifTrue:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   479
            self displayLineFromX:0 y:prev+(barHeight // 2) 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   480
                              toX:width y:prev+(barHeight // 2).
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   481
            self displayLineFromX:0 y:ypos+(barHeight // 2) 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   482
                              toX:width y:ypos+(barHeight // 2).
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   483
        ] ifFalse:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   484
            self fillRectangleX:0 y:prev width:width height:barHeight.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   485
            self fillRectangleX:0 y:ypos width:width height:barHeight
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   486
        ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   487
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   488
    self clipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   489
    prev := ypos
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   490
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   491
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   492
buttonRelease:button x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   493
    "end bar-move"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   494
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   495
    |aboveView belowView aboveIndex belowIndex newY|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   496
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   497
    ((button == 1) or:[button == #select]) ifTrue:[
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   498
        movedHandle isNil ifTrue:[^ self].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   499
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   500
        "undo the last xor"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   501
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   502
        self noClipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   503
        self xoring:[
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   504
            trackLine ifTrue:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   505
                self displayLineFromX:0 y:prev+(barHeight // 2) 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   506
                                  toX:width y:prev+(barHeight // 2).
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   507
            ] ifFalse:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   508
                self fillRectangleX:0 y:prev width:width height:barHeight
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   509
            ].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   510
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   511
        self clipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   512
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   513
        "compute the new relative heights"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   514
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   515
        aboveIndex := movedHandle.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   516
        belowIndex := movedHandle + 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   517
        aboveView := subViews at:aboveIndex.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   518
        belowView := subViews at:belowIndex.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   519
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   520
        newY := (prev + start / height) asFloat.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   521
        aboveView relativeCorner:aboveView relativeCorner x @ newY.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   522
        belowView relativeOrigin:belowView relativeOrigin x @ newY.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   523
        self resizeSubviewsFrom:aboveIndex to:belowIndex.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   524
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   525
        movedHandle := nil.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   526
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   527
        self redrawHandlesFrom:aboveIndex to:belowIndex
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   528
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   529
        super buttonRelease:button x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   530
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   531
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   532
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   533
!VariableVerticalPanel methodsFor:'private'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   534
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   535
anyNonRelativeSubviews
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   536
    "return true, if any of my subviews has no relative origin/extent"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   537
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   538
    1 to:(subViews size) do:[:index |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   539
        |view|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   540
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   541
        view := subViews at:index.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   542
        view relativeExtent isNil ifTrue:[^ true].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   543
        view relativeOrigin isNil ifTrue:[^ true]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   544
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   545
    ^ false
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   546
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   547
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   548
setupSubviewSizes
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   549
    "setup subviews sizes (in case of non-relative sizes)"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   550
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   551
    |y h|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   552
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   553
    self anyNonRelativeSubviews ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   554
        "there is at least one subview without
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   555
         relative origin/extent - setup all subviews
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   556
         to spread evenly ..."
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   557
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   558
        y := 0.0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   559
        h := 1.0 / (subViews size).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   560
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   561
        1 to:(subViews size) do:[:index |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   562
            |view|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   563
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   564
            view := subViews at:index.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   565
            index == subViews size ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   566
                view origin:(0.0 @ y) corner:(1.0 @ 1.0)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   567
            ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   568
                view origin:(0.0 @ y) corner:(1.0 @ (y + h))
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   569
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   570
            y := y + h
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   571
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   572
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   573
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   574
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   575
resizeSubviewsFrom:start to:stop
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   576
    "readjust size of some subviews"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   577
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   578
    |step nSubviews|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   579
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   580
    subViews notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   581
        (start <= stop) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   582
            step := 1
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   583
        ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   584
            step := -1
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   585
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   586
        nSubviews := subViews size.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   587
        start to:stop by:step do:[:index |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   588
            |bw view o1 o2 relOrg relCorner newOrg newCorner|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   589
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   590
            view := subViews at:index.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   591
            bw := view borderWidth.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   592
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   593
            index == 1 ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   594
                o1 := 0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   595
            ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   596
                o1 := barHeight // 2 - bw
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   597
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   598
            index ==  nSubviews ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   599
                o2 := 0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   600
            ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   601
                o2 := barHeight // 2 - bw
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   602
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   603
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   604
            relCorner := view relativeCorner.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   605
            relCorner isNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   606
                self error:'subview must have relative corner'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   607
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   608
            newCorner := view cornerFromRelativeCorner.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   609
            newCorner notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   610
                newCorner y:(newCorner y - o2)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   611
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   612
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   613
            relOrg := view relativeOrigin.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   614
            relOrg isNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   615
                self error:'subview must have relative origin'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   616
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   617
            newOrg := view originFromRelativeOrigin.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   618
            newOrg notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   619
                (index ~~ 1) ifTrue:[  
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   620
                    newOrg y:(newOrg y + o1)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   621
                ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   622
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   623
            view pixelOrigin:newOrg corner:newCorner
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   624
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   625
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   626
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   627
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   628
handleOriginsFrom:start to:stop do:aBlock
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   629
    "evaluate the argument block for some handle-origins"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   630
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   631
    |x hw|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   632
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   633
    subViews notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   634
        shadowForm notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   635
            hw := shadowForm width
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   636
        ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   637
            hw := barHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   638
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   639
        (handlePosition == #left) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   640
            x := hw * 2
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   641
        ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   642
            (handlePosition == #right) ifTrue:[
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   643
                x := width - (1 "2" * hw) - margin
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   644
            ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   645
                x := width // 2
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   646
            ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   647
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   648
        (start + 1) to:stop do:[:index |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   649
            |view y|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   650
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   651
            view := subViews at:index.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   652
            y := view origin y - barHeight + 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   653
            aBlock value:(x @ y)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   654
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   655
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   656
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   657
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   658
handleOriginsDo:aBlock
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   659
    "evaluate the argument block for every handle-origin"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   660
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   661
    self handleOriginsFrom:1 to:(subViews size) do:aBlock
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   662
! !