VarHPanel.st
author claus
Mon, 10 Oct 1994 04:03:47 +0100
changeset 59 450ce95a72a4
parent 38 4b9b70b2cc87
child 60 f3c738c24ce6
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     1
"
5
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1992 by Claus Gittinger
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
     3
	      All Rights Reserved
0
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
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    14
	 instanceVariableNames:''
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    15
	 classVariableNames:''
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    16
	 poolDictionaries:''
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    17
	 category:'Views-Layout'
0
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
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    22
	      All Rights Reserved
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    23
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    24
$Header: /cvs/stx/stx/libwidg/Attic/VarHPanel.st,v 1.7 1994-10-10 03:03:20 claus Exp $
38
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
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    32
	      All Rights Reserved
38
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
"
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    45
$Header: /cvs/stx/stx/libwidg/Attic/VarHPanel.st,v 1.7 1994-10-10 03:03:20 claus Exp $
38
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
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    60
	p := VariableHorizontalPanel in:superView.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    61
	v1 := <someViewClass> origin:0.0 @ 0.0
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    62
			      corner:0.5 @ 1.0
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    63
				  in:p.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    64
	v2 := <someViewClass> origin:0.5 @ 0.0
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    65
			      corner:0.8 @ 1.0
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    66
				  in:p.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    67
	v3 := <someViewClass> origin:0.8 @ 0.0
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    68
			      corner:1.0 @ 1.0
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    69
				  in:p.
38
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:
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    72
	|top p v1 v2 v3|
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
    73
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    74
	top := StandardSystemView new.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    75
	top extent:300@200.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    76
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    77
	p := VariableHorizontalPanel 
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    78
		 origin:0.0 @ 0.0
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    79
		 corner:1.0 @ 1.0
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    80
		 in:top.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    81
	v1 := SelectionInListView 
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    82
		 origin:0.0 @ 0.0
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    83
		 corner:0.5 @ 1.0
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    84
		 in:p.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    85
	v2 := EditTextView 
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    86
		 origin:0.5 @ 0.0
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    87
		 corner:0.8 @ 1.0
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    88
		 in:p.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    89
	v3 := ScrollableView 
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    90
		 for:TextView 
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    91
		 in:p.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    92
	v3 origin:0.8 @ 0.0 
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    93
	   corner:1.0 @ 1.0.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
    94
	top open
38
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')
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   104
		     maskForm:(Form fromFile:'VHPanel_m.xbm')
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   105
		     hotX:8
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   106
		     hotY:8.
38
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:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   111
	"which one looks better ?"
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   112
	cursor := Cursor leftRightArrow
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   113
	"cursor := Cursor leftLimitArrow"
38
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:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   125
	shadowForm notNil ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   126
	    hh := shadowForm height
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   127
	] ifFalse:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   128
	    hh := barHeight
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   129
	].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   130
	(handlePosition == #left) ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   131
	    y := hh * 2
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   132
	] ifFalse:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   133
	    (handlePosition == #right) ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   134
		y := height - (2 * hh) - margin
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   135
	    ] ifFalse:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   136
		y := height // 2
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   137
	    ]
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   138
	].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   139
	(start + 1) to:stop do:[:index |
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   140
	    |x view|
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   141
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   142
	    view := subViews at:index.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   143
	    x := view origin x - barHeight + 1.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   144
	    aBlock value:(x @ y)
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   145
	]
0
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:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   155
	"there is at least one subview without
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   156
	 relative origin/extent - setup all subviews
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   157
	 to spread evenly ..."
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   158
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   159
	x := 0.0.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   160
	w := 1.0 / (subViews size).
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   161
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   162
	1 to:(subViews size) do:[:index |
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   163
	    |view|
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   164
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   165
	    view := subViews at:index.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   166
	    index == subViews size ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   167
		view origin:(x @ 0.0) corner:(1.0 @ 1.0)
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   168
	    ] ifFalse:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   169
		view origin:(x @ 0.0) corner:((x + w) @ 1.0)
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   170
	    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   171
	    x := x + w
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   172
	]
0
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:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   182
	(start <= stop) ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   183
	    step := 1
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   184
	] ifFalse:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   185
	    step := -1
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   186
	].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   187
	nSubviews := subViews size.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   188
	start to:stop by:step do:[:index |
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   189
	    |bw view o1 o2 relCorner relOrg newCorner newOrg|
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   190
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   191
	    view := subViews at:index.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   192
	    bw := view borderWidth.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   193
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   194
	    index == 1 ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   195
		o1 := 0.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   196
	    ] ifFalse:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   197
		o1 := barHeight // 2 - bw
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   198
	    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   199
	    index ==  nSubviews ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   200
		o2 := 0.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   201
	    ] ifFalse:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   202
		o2 := barHeight // 2 - bw
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   203
	    ].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   204
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   205
	    relCorner := view relativeCorner.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   206
	    relCorner isNil ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   207
		self error:'subview must have relative corner'
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   208
	    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   209
	    newCorner := view cornerFromRelativeCorner.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   210
	    newCorner notNil ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   211
		newCorner x:(newCorner x - o2)
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   212
	    ].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   213
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   214
	    relOrg := view relativeOrigin.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   215
	    relOrg isNil ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   216
		self error:'subview must have relative origin'
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   217
	    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   218
	    newOrg := view originFromRelativeOrigin.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   219
	    newOrg notNil ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   220
		(index ~~ 1) ifTrue:[  
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   221
		    newOrg x:(newOrg x + o1)
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   222
		].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   223
	    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   224
	    view pixelOrigin:newOrg corner:newCorner
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   225
	]
0
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:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   237
	handle := 1.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   238
	self handleOriginsDo:[:hPoint |
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   239
	    |hx|
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   240
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   241
	    hx := hPoint x.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   242
	    (bx between:hx and:(hx + barHeight)) ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   243
		movedHandle := handle.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   244
		prev := hx.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   245
		start := bx - hx.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   246
		self noClipByChildren.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   247
		self xoring:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   248
		    trackLine ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   249
			self displayLineFromX:hx+(barHeight // 2) y:0
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   250
					  toX:hx+(barHeight // 2) y:height.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   251
		    ] ifFalse:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   252
			self fillRectangleX:hx y:0 width:barHeight height:height
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   253
		    ]
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   254
		].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   255
		self clipByChildren.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   256
		^ self
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   257
	    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   258
	    handle := handle + 1
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   259
	].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   260
	movedHandle := nil
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   261
    ] ifFalse:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   262
	super buttonPress:button x:bx y:by
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   263
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   264
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   265
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   266
buttonMotion:button x:bx y:by
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   267
    "mouse-button was moved while pressed;
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   268
     clear prev handleBar and draw handle bar at new position" 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   269
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   270
    |xpos limitTop limitBot|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   271
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   272
    movedHandle isNil ifTrue: [^ self].          "should not happen"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   273
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   274
    "speedup - if there is already another movement, 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   275
     ignore thisone ... "
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   276
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   277
    device synchronizeOutput.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   278
    self buttonMotionEventPending ifTrue:[^ self].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   279
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   280
    xpos := bx - start.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   281
    limitTop := barHeight // 2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   282
    limitBot := self width - barHeight.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   283
    movedHandle > 1 ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   284
	limitTop := (subViews at:movedHandle) origin x + (barHeight // 2)
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   285
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   286
    movedHandle < (subViews size - 1) ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   287
	limitBot := (subViews at:(movedHandle + 2)) origin x - barHeight
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   288
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   289
    limitBot := limitBot - barHeight.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   290
    (xpos < limitTop) ifTrue:[ "check against view limits"
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   291
	xpos := limitTop
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   292
    ] ifFalse:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   293
	(xpos > limitBot) ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   294
	    xpos := limitBot
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   295
	]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   296
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   297
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   298
    self noClipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   299
    self xoring:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   300
	self fillRectangleX:prev y:0 width:barHeight height:height.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   301
	self fillRectangleX:xpos y:0 width:barHeight height:height
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   302
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   303
    self clipByChildren.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   304
    prev := xpos
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   305
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   306
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   307
buttonRelease:button x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   308
    "end bar-move"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   309
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   310
    |aboveView belowView aboveIndex belowIndex newX|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   311
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 23
diff changeset
   312
    ((button == 1) or:[button == #select]) ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   313
	movedHandle isNil ifTrue:[^ self].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   314
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   315
	"undo the last xor"
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   316
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   317
	self noClipByChildren.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   318
	self xoring:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   319
	    self fillRectangleX:prev y:0 width:barHeight height:height
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   320
	].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   321
	self clipByChildren.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   322
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   323
	"compute the new relative heights"
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   324
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   325
	aboveIndex := movedHandle.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   326
	belowIndex := movedHandle + 1.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   327
	aboveView := subViews at:aboveIndex.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   328
	belowView := subViews at:belowIndex.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   329
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   330
	newX := (prev + start / width) asFloat .
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   331
	aboveView relativeCorner:newX @ aboveView relativeCorner y.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   332
	belowView relativeOrigin:newX @ belowView relativeOrigin y.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   333
	self resizeSubviewsFrom:aboveIndex to:belowIndex.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   334
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   335
	movedHandle := nil.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   336
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   337
	"and redraw handles"
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   338
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   339
	self redrawHandlesFrom:aboveIndex to:belowIndex
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   340
    ] ifFalse:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   341
	super buttonRelease:button x:x y:y
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   342
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   343
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   344
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   345
!VariableHorizontalPanel methodsFor:'drawing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   346
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   347
drawHandleAtX:hx y:hy
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   348
    |w x m|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   349
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   350
    shadowForm notNil ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   351
	w := shadowForm height
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   352
    ] ifFalse:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   353
	w := barHeight - 4
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   354
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   355
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   356
    self paint:viewBackground.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   357
    self fillRectangleX:hx y:margin 
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   358
		  width:barHeight
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   359
		 height:(height - margin - margin).
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   360
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   361
    (handleStyle ~~ #normal and:[handleStyle ~~ #mswindows]) ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   362
	 m := (barHeight - w) // 2.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   363
	 shadowForm isNil ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   364
	    x := hx + (barHeight // 2).
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   365
	    separatingLine ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   366
		self paint:shadowColor.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   367
		self displayLineFromX:x y:margin toX:x y:(height - margin).
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   368
		x := x + 1.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   369
		self paint:lightColor.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   370
		self displayLineFromX:x y:margin toX:x y:(height - margin).
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   371
	    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   372
	    self paint:viewBackground.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   373
	    self fillRectangleX:hx y:(hy - barWidth) 
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   374
			  width:w 
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   375
			 height:(barWidth + barWidth).
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   376
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   377
	    x := hx.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   378
	    handleStyle == #st80 ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   379
		x := x - 1.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   380
	    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   381
	    self drawEdgesForX:(x + m)
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   382
			     y:(hy - barWidth)
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   383
			 width:w 
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   384
			height:(barWidth + barWidth)
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   385
			 level:2
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   386
	] ifFalse:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   387
	    x := hx.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   388
	    self drawHandleFormAtX:(x + m) y:hy
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   389
	].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   390
	handleStyle == #st80 ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   391
	    x := hx - 1.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   392
	    self paint:lightColor.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   393
	    self displayLineFromX:x y:margin toX:x y:(height - margin).
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   394
	    self displayLineFromX:hx y:0 toX:(hx + barHeight - 1) y:0.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   395
	    x := hx + barHeight - 2.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   396
	    self paint:shadowColor.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   397
	    self displayLineFromX:x y:margin toX:x y:(height - margin).
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   398
		"uncomment the -1 if you dont like the notch at the bottom end"
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   399
		"                   VVV"
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   400
	    self displayLineFromX:hx" "-1" " y:height-1 toX:(hx + barHeight - 1) y:height-1.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   401
	].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   402
    ] ifFalse:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   403
	x := hx + barHeight - 2.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   404
	self paint:handleColor.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   405
	separatingLine ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   406
	    self displayLineFromX:hx y:0 toX:hx y:height.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   407
	    self displayLineFromX:x y:0 toX:x y:height.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   408
	].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   409
	self fillRectangleX:hx y:hy width:barHeight height:barHeight
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   410
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   411
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   412
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   413
redrawHandlesFrom:start to:stop
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   414
    "redraw some handles"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   415
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   416
    subViews notNil ifTrue:[
59
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   417
	self handleOriginsFrom:start to:stop do:[:hPoint |
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   418
	    self drawHandleAtX:(hPoint x) y:(hPoint y)
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   419
	].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   420
	movedHandle notNil ifTrue:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   421
	    self noClipByChildren.
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   422
	    self xoring:[
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   423
		self fillRectangleX:prev y:0 width:barHeight height:height
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   424
	    ].
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   425
	    self clipByChildren
450ce95a72a4 *** empty log message ***
claus
parents: 38
diff changeset
   426
	]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   427
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   428
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   429
! !