GridBagLayoutView.st
author Claus Gittinger <cg@exept.de>
Wed, 08 Nov 2000 10:17:18 +0100
changeset 1877 3b415fa4710f
parent 1519 eeb8243a99af
child 2840 93e2b635838d
permissions -rw-r--r--
only access originChanged, extentChanged and cornerChanged via accessor methods.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
790
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
     1
"
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
     2
 COPYRIGHT (c) 1998 by Andreas Vogel / eXept Software AG
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
     3
              All Rights Reserved
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
     4
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
     5
 This software is furnished under a license and may be used
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
     6
 only in accordance with the terms of that license and with the
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
     8
 be provided or otherwise made available to, or used by, any
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
     9
 other person.  No title to or ownership of the software is
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
    10
 hereby transferred.
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
    11
"
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
    12
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
    13
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
    14
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
    15
1877
3b415fa4710f only access originChanged, extentChanged and cornerChanged
Claus Gittinger <cg@exept.de>
parents: 1519
diff changeset
    16
"{ Package: 'stx:libwidg2' }"
3b415fa4710f only access originChanged, extentChanged and cornerChanged
Claus Gittinger <cg@exept.de>
parents: 1519
diff changeset
    17
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
PanelView subclass:#GridBagLayoutView
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	instanceVariableNames:'columnWidths rowHeights columnWeights rowWeights layoutInfo'
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	classVariableNames:''
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
	poolDictionaries:''
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
	category:'Views-Layout'
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
!GridBagLayoutView class methodsFor:'documentation'!
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
790
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
    27
copyright
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
    28
"
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
    29
 COPYRIGHT (c) 1998 by Andreas Vogel / eXept Software AG
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
    30
              All Rights Reserved
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
    31
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
    32
 This software is furnished under a license and may be used
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
    33
 only in accordance with the terms of that license and with the
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
    34
 inclusion of the above copyright notice.   This software may not
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
    35
 be provided or otherwise made available to, or used by, any
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
    36
 other person.  No title to or ownership of the software is
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
    37
 hereby transferred.
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
    38
"
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
    39
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
    40
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
    41
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
    42
!
da146a1929ae added copyright
Claus Gittinger <cg@exept.de>
parents: 721
diff changeset
    43
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
documentation
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
GridBagLayout is a flexible layout manager that aligns components vertically and horizontally,
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
without requiring that the components be the same size. Each GridBagLayout uses a dynamic rectangular 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
grid of cells, with each component occupying one or more cells (called its display area).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
Each component managed by a GridBagLayout is associated with a GridBagConstraints instance that 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
specifies how the component is laid out within its display area. How a GridBagLayout places a set of 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
components depends on each component's GridBagConstraints and minimum size, as well as the preferred 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
size of the components' container.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
To use a GridBagLayout effectively, you must customize one or more of its components' GridBagConstraints.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
You customize a GridBagConstraints object by setting one or more of its instance variables:
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
    gridX
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
    gridY
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
		Specifies the cell at the upper left of the component's display area, where the 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
		upper-left-most cell has address gridX=0, gridY=0. Use #RELATIVE (the default value)
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
		to specify that the component be just placed just to the right of (for gridX)
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
		or just below (for gridY) the component that was added to the container just before 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
		this component was added.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
    gridWidth
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
    gridHeight
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
		Specifies the number of cells in a row (for gridWidth) or column (for gridHeight)
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
		in the component's display area. The default value is 1. Use #REMAINDER to specify
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
		that the component be the last one in its row (for gridWidth) or column (for gridHeight).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
		Use #RELATIVE to specify that the component be the next to last one in its row 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
		(for gridWidth) or column (for gridHeight).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
    fill
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
		Used when the component's display area is larger than the component's requested size
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
		to determine whether (and how) to resize the component.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
		Valid values are
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
		    #NONE
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
			(the default),
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
		    #HORIZONTAL
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
			(make the component wide enough to fill its display area
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
			horizontally, but don't change its height),
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
		    #VERTICAL
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
			(make the component tall enough to fill its display area
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
			vertically, but don't change its width), and
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
		    #BOTH       
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
			(make the component fill its display area entirely).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
    ipadX
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
    ipadY
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
		Specifies the internal padding: how much to add to the minimum size of the component.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
		The width of the component will be at least its minimum width plus ipadX*2 pixels
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
		(since the padding applies to both sides of the component). Similarly, the height of 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
		the component will be at least the minimum height plus ipadY*2 pixels.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
    insets
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
		Specifies the external padding of the component -- the minimum amount of space between 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
		the component and the edges of its display area.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
    anchor
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
		Used when the component is smaller than its display area to determine where (within the area) 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
		to place the component.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
		Valid values are
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
			#CENTER (the default),
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
			#NORTH,
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
			#NORTHEAST,
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
			#EAST,
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
			#SOUTHEAST,
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
			#SOUTH,
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
			#SOUTHWEST,
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
			#WEST, 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
			#NORTHWEST.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
    weightX
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
    weightY
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
		Used to determine how to distribute space; this is important for specifying resizing 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
		behavior. Unless you specify a weight for at least one component in a row (weightX)
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
		and column (weightY), all the components clump together in the center of their container.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
		This is because when the weight is zero (the default), the GridBagLayout puts any extra 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
		space between its grid of cells and the edges of the container.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
    [see also:]
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
	GridBagConstraints
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
	GridBagLayoutInfo
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
	Insets
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
    [author:]
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
	Andreas Vogel
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
!
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
examples
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
    This example is taken from the java source and should produce the same layout. Check the file
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
    Grid*.gif in the java distribution.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
									[exBegin]
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
	| v p c |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
	c := #(
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
	    #( fill: #BOTH weightX: 1.0 )                         
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
	    #( fill: #BOTH weightX: 1.0 )                         
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
	    #( fill: #BOTH weightX: 1.0 )                         
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
	    #( fill: #BOTH weightX: 1.0 gridWidth: #REMAINDER ) 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
	    #( fill: #BOTH gridWidth: #REMAINDER )                
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
	    #( fill: #BOTH gridWidth: #RELATIVE )                 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
	    #( fill: #BOTH gridWidth: #REMAINDER )                
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
	    #( fill: #BOTH weightY: 1.0 gridHeight: 2 )
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
	    #( fill: #BOTH gridWidth: #REMAINDER )                
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
	    #( fill: #BOTH gridWidth: #REMAINDER )                
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
	).           
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
	v := StandardSystemView new. v label:'GridBagLayoutView: Example 1'.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
	p := GridBagLayoutView in:v. p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
	1 to: c size do:[ :i | | b |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
	    b := Button label:('Button ',(i displayString)) in:p. 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
	    b objectAttributeAt:#GridBagConstraints put:((#(GridBagConstraints) , (c at:i)) decodeAsLiteralArray). 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
	].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
	v extent:(p preferredExtent). v open.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
									[exEnd]
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
									[exBegin]
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
	| v p c |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
	c := #(
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
	    #( insets: #(Insets 2 2 2 2) fill: #BOTH weightX: 1.0 )                         
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
	    #( insets: #(Insets 2 2 2 2) fill: #BOTH weightX: 1.0 )                         
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
	    #( insets: #(Insets 2 2 2 2) fill: #BOTH weightX: 1.0 )                         
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
	    #( insets: #(Insets 2 2 2 2) fill: #BOTH weightX: 1.0 gridWidth: #REMAINDER ) 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
	    #( insets: #(Insets 2 2 2 2) fill: #BOTH gridWidth: #REMAINDER )                
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
	    #( insets: #(Insets 2 2 2 2) fill: #BOTH gridWidth: #RELATIVE )                 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
	    #( insets: #(Insets 2 2 2 2) fill: #BOTH gridWidth: #REMAINDER )                
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
	    #( insets: #(Insets 2 2 2 2) fill: #BOTH weightY: 1.0 gridHeight: 2 )
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
	    #( insets: #(Insets 2 2 2 2) fill: #BOTH gridWidth: #REMAINDER )                
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
	    #( insets: #(Insets 2 2 2 2) fill: #BOTH gridWidth: #REMAINDER )                
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
	).           
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
	v := StandardSystemView new. v label:'GridBagLayoutView: Example 2'.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
	p := GridBagLayoutView in:v. p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
	1 to: c size do:[ :i | | b |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
	    b := Button label:('Button ',(i displayString)) in:p. 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
	    b objectAttributeAt:#GridBagConstraints put:((#(GridBagConstraints) , (c at:i)) decodeAsLiteralArray). 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
	].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
	v extent:(p preferredExtent). v open.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
									[exEnd]
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
! !
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
!GridBagLayoutView class methodsFor:'instance creation'!
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
new
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   192
    "Create a new instance of my class and do explizit initialization of it."
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   194
    ^ super new initialize
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   195
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   196
    "Created: / 19.1.1998 / 13:53:11 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
    "Modified: / 1.2.1998 / 13:02:59 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
! !
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   200
!GridBagLayoutView methodsFor:'layout'!
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
setChildPositions
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
    "(re)compute position of every child whenever childs are added or my size has changed"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
    self arrangeGrid.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
    "Modified: / 1.2.1998 / 12:52:22 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
! !
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
!GridBagLayoutView methodsFor:'private'!
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
adjustForGravity:c in:r
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   214
    | diffx diffy add |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
    r setLeft: ((r left)   + (c insets left)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
    r width:   ((r width)  - ((c insets left) + (c insets right))).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
    r setTop:  ((r top)    + (c insets top)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
    r height:  ((r height) - ((c insets top) + (c insets bottom))).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   220
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
    diffx := 0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
    (((c fill) ~~ #HORIZONTAL and:[(c fill) ~~ #BOTH]) and:[(r width) > (add := (c minWidth) + (c ipadX))]) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   223
	diffx := (r width) - add.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
	r width:add.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
    diffy := 0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
    (((c fill) ~~ #VERTICAL and:[(c fill) ~~ #BOTH]) and:[(r height) > (add := (c minHeight) + (c ipadY))]) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   229
	diffy := (r height) - add.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
	r height:add.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   233
    ((c anchor) == #CENTER) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
	r setLeft:((r left) + (diffx / 2)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   235
	r setTop:((r top) + (diffy / 2)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   236
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
    ((c anchor) == #NORTH) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
	r setLeft:((r left) + (diffx / 2)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
    ((c anchor) == #NORTHEAST) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
	r setLeft:((r left) + diffx).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
    ((c anchor) == #EAST) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244
	r setLeft:((r left) + diffx).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
	r setTop:((r top) + (diffy / 2)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   246
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
    ((c anchor) == #SOUTHEAST) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   248
	r setLeft:((r left) + diffx).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   249
	r setTop:((r top) + diffy).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   250
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   251
    ((c anchor) == #SOUTH) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   252
	r setLeft:((r left) + (diffx / 2)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   253
	r setTop:((r top) + diffy).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   255
    ((c anchor) == #SOUTHWEST) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   256
	r setTop:((r top) + diffy).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   257
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   258
    ((c anchor) == #WEST) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   259
	r setTop:((r top) + (diffy / 2)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   260
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   261
    ((c anchor) == #NORTHWEST) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   262
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   263
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   264
    r setLeft: ((r left)   asInteger).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   265
    r setTop:  ((r top)    asInteger).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   266
    r width:   ((r width)  asInteger).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   267
    r height:  ((r height) asInteger).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   268
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   269
    ^ r
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   270
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   271
    "Modified: / 22.1.1998 / 09:50:01 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   272
!
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   273
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   274
arrangeGrid
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   275
    " Lay out the grid."
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   276
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   277
    | insets subViews info ext d r c diffw diffh weight |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   278
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   279
    insets := Insets new.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   280
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   281
    "/ If the parent has no slaves anymore, then don't do anything
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   282
    "/ at all:  just leave the parent's size as-is.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   283
    (((subViews := self subViews) size) == 0) ifTrue:[^ self].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   284
1877
3b415fa4710f only access originChanged, extentChanged and cornerChanged
Claus Gittinger <cg@exept.de>
parents: 1519
diff changeset
   285
    self extentChangedFlag ifTrue:[
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   286
        ext    := self computeExtent.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   287
        width  := ext x.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   288
        height := ext y.
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   289
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   290
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
    "/ Pass #1: scan all the slaves to figure out the total amount
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
    "/ of space needed.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
    
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   294
    info := self getLayoutInfo:#PREFERRED_SIZE.    
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   295
    d := self getMinSize:info.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   296
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   297
    ((width < (d width)) or:[(height < (d height))]) ifTrue:[
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   298
        info := self getLayoutInfo:#MINIMUM_SIZE.    
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   299
        d := self getMinSize:info.
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   300
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
    layoutInfo := info.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   303
    r := Rectangle origin:0@0 extent:((d width) @ (d height)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
    "/ If the current dimensions of the window don't match the desired
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
    "/ dimensions, then adjust the minWidth and minHeight arrays
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   307
    "/ according to the weights.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   309
    diffw := width - (r width).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
    (diffw ~~ 0) ifTrue:[
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   311
        weight := 0.0.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   312
        0 to:((info width) - 1) do:[ :i |
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   313
            weight := weight + ((info weightX) at:(i + 1)).
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   314
        ].
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   315
        (weight > 0.0) ifTrue:[
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   316
            0 to:((info width) - 1) do:[ :i |    
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   317
                | dx |
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   318
                dx := ((diffw * ((info weightX) at:(i + 1))) / weight) asInteger.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   319
                (info minWidth) at:(i + 1) put:(((info minWidth) at:(i + 1)) + dx).
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   320
                r width:((r width) + dx).
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   321
                (((info minWidth) at:(i + 1)) < 0) ifTrue:[
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   322
                    r width:((r width) - ((info minWidth) at:(i + 1))).
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   323
                    (info minWidth) at:(i + 1) put:0.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   324
                ].
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   325
            ].
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   326
        ].
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   327
        diffw := width - (r width).
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   328
    ] ifFalse:[
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   329
        diffw := 0.
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   330
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   331
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   332
    diffh := height - (r height).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   333
    (diffh ~~ 0) ifTrue:[
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   334
        weight := 0.0.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   335
        0 to:((info height) - 1) do:[ :i |
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   336
            weight := weight + ((info weightY) at:(i + 1)).
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   337
        ].
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   338
        (weight > 0.0) ifTrue:[
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   339
            0 to:((info height) - 1) do:[ :i |    
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   340
                | dy |
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   341
                dy := ((diffh * ((info weightY) at:(i + 1))) / weight) asInteger.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   342
                (info minHeight) at:(i + 1) put:(((info minHeight) at:(i + 1)) + dy).
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   343
                r height:((r height) + dy).
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   344
                (((info minHeight) at:(i + 1)) < 0) ifTrue:[
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   345
                    r height:((r height) - ((info minHeight) at:(i + 1))).
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   346
                    (info minHeight) at:(i + 1) put:0.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   347
                ].
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   348
            ].
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   349
        ].
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   350
        diffh := height - (r height).
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   351
    ] ifFalse:[
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   352
        diffh := 0.
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   353
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   354
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   355
    "/ Now do the actual layout of the slaves using the layout information
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   356
    "/ that has been collected.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   357
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   358
    info startX:(((diffw / 2) + (insets left)) asInteger).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   359
    info startY:(((diffh / 2) + (insets top)) asInteger).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   360
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   361
    subViews do:[ :child |
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   362
        |rW rH|
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   363
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   364
        c := self constraints:child.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   365
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   366
        r setLeft:(info startX).
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   367
        0 to:((c tempX) - 1) do:[ :i | r setLeft:((r left) + ((info minWidth) at:(i + 1))). ].
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   368
        
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   369
        r setTop:(info startY).
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   370
        0 to:((c tempY) - 1) do:[ :i | r setTop:((r top) + ((info minHeight) at:(i + 1))). ].
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   371
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   372
        r width:0.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   373
        (c tempX) to:((c tempX) + (c tempWidth) - 1) do:[ :i |
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   374
            r width:((r width) + ((info minWidth) at:(i + 1))).
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   375
        ].
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   376
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   377
        r height:0.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   378
        (c tempY) to:((c tempY) + (c tempHeight) - 1) do:[ :i |
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   379
            r height:((r height) + ((info minHeight) at:(i + 1))).
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   380
        ].
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   381
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   382
        self adjustForGravity:c in:r.
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   383
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   384
        "/ If the window is too small to be interesting then
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   385
        "/ unmap it.  Otherwise configure it and then make sure
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   386
        "/ its mapped.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   387
        rW := r width.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   388
        rH := r height.
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   389
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   390
        ((rW <= 0) or:[rH <= 0]) ifTrue:[
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   391
            child origin:(0@0) ; width:0 height:0.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   392
        ] ifFalse:[
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   393
            child origin:((r left) @ (r top)).
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   394
            child width:rW.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   395
            child height:rH.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   396
        ].
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   397
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   398
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   399
    "Modified: / 1.2.1998 / 12:53:37 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   400
!
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   401
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   402
constraints:anObject 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   403
    " Get the GridBag constraints for an object. As a fallback create new constraints for objects
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   404
      which don't have any constraints yet."
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   405
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   406
    | c |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   407
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   408
    c := anObject objectAttributeAt:#GridBagConstraints.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   409
    c isNil ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   410
	anObject objectAttributeAt:#GridBagConstraints put:(c := GridBagConstraints new)
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   411
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   412
    ^ c.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   413
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   414
    "Created: / 21.1.1998 / 00:24:34 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   415
    "Modified: / 1.2.1998 / 12:55:23 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   416
!
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   417
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   418
getLayoutInfo:which
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   419
    "return a good extent, one that makes subviews fit"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   420
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   421
    | 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   422
	MAX_INT_VAL subViews 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   423
	r i k px py pixelsDiff weightDiff weight nextSize c 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   424
	curX curY curWidth curHeight curRow curCol xMax yMax
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   425
    |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   426
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   427
    MAX_INT_VAL := 9999999999.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   428
    subViews := (self subViews).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   429
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   430
    r := GridBagLayoutInfo new.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   431
    r width:0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   432
    r height:0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   433
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   434
    xMax := IdentityDictionaryWithDefault newWithDefaultValue:0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   435
    yMax := IdentityDictionaryWithDefault newWithDefaultValue:0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   436
    curRow := curCol := -1.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   437
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   438
    "/ Pass #1
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   439
    "/
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   440
    "/ Figure out the dimensions of the layout grid (use a value of 1 for
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   441
    "/ zero or negative widths and heights).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   442
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   443
    subViews do:[ :child |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   444
	c := self constraints:child.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   445
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   446
	curX := c gridX.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   447
	curY := c gridY.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   448
	((curWidth  := c gridWidth)  <= 0) ifTrue:[ curWidth  := 1. ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   449
	((curHeight := c gridHeight) <= 0) ifTrue:[ curHeight := 1. ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   450
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   451
	"/ If x or y is negative, then use relative positioning:
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   452
	((curX < 0) and:[ curY < 0 ]) 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   453
	    ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   454
		(curRow >= 0) 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   455
		    ifTrue: [ curY := curRow. ]
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   456
		    ifFalse:[ (curCol >= 0) ifTrue:[ curX := curCol. ] ifFalse: [ curY := 0. ]].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   457
	    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   458
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   459
	(curX < 0) 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   460
	    ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   461
		px := 0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   462
		curY to:(curY + curHeight - 1) do: [ :i |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   463
		    px := px max:(xMax at:(i + 1)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   464
		].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   465
		((curX := px - curX - 1) < 0) ifTrue:[ curX := 0. ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   466
	    ]
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   467
	    ifFalse:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   468
		(curY < 0) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   469
		    py := 0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   470
		    curX to: (curX + curWidth - 1) do: [ :i |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   471
			py := py max: (yMax at:(i + 1)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   472
		    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   473
		    ((curY := py - curY - 1) < 0) ifTrue:[ curY := 0. ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   474
		].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   475
	    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   476
        
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   477
	"/ Adjust the grid width and height
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   478
	px := curX + curWidth.  [ (r width)  < px ] whileTrue:[ r width:((r width) + 1). ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   479
	py := curY + curHeight. [ (r height) < py ] whileTrue:[ r height:((r height) + 1). ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   480
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   481
	"/ Adjust the xMax and yMax arrays
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   482
	curX to:(curX + curWidth  - 1) do:[ :i | yMax at:(i + 1) put:py. ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   483
	curY to:(curY + curHeight - 1) do:[ :i | xMax at:(i + 1) put:px. ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   484
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   485
	c minWidth:(child preferredExtent x).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   486
	c minHeight:(child preferredExtent y).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   487
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   488
	"/ Zero width and height must mean that this is the last item (or
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   489
	"/ else something is wrong). 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   490
	(((c gridHeight) == 0) and:[ (c gridWidth) == 0 ]) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   491
	    curRow := curCol := -1.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   492
	].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   493
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   494
	"/ Zero width starts a new row
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   495
	(((c gridHeight) == 0) and:[ curRow < 0 ]) 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   496
	    ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   497
		curCol := curX + curWidth.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   498
	    ]
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   499
	    ifFalse:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   500
		((c gridWidth) == 0 and:[ curCol < 0 ]) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   501
		    curRow := curY + curHeight.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   502
		].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   503
	    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   504
    ].    
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   505
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   506
    "/
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   507
    "/ Apply minimum row/column dimensions
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   508
    "/
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   509
    ((r width)  < (columnWidths size)) ifTrue:[ r width:(columnWidths size). ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   510
    ((r height) < (rowHeights size))   ifTrue:[ r height:(rowHeights size). ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   511
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   512
    "/
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   513
    "/ Pass #2
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   514
    "/
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   515
    "/ Negative values for gridX are filled in with the current x value.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   516
    "/ Negative values for gridY are filled in with the current y value.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   517
    "/ Negative or zero values for gridWidth and gridHeight end the current
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   518
    "/ row or column, respectively.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   519
    "/
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   520
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   521
    curRow := curCol := -1.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   522
    xMax := IdentityDictionaryWithDefault newWithDefaultValue:0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   523
    yMax := IdentityDictionaryWithDefault newWithDefaultValue:0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   524
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   525
    subViews do:[ :child |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   526
	c := self constraints:child.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   527
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   528
	curX      := c gridX.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   529
	curY      := c gridY.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   530
	curWidth  := c gridWidth.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   531
	curHeight := c gridHeight.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   532
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   533
	"/ If x or y is negative, then use relative positioning:
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   534
	((curX < 0) and:[ curY < 0 ]) 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   535
	    ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   536
		(curRow >= 0) 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   537
		    ifTrue: [ curY := curRow. ]
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   538
		    ifFalse:[ (curCol >= 0) 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   539
			ifTrue:  [ curX := curCol. ]
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   540
			ifFalse: [ curY := 0. ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   541
		    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   542
	    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   543
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   544
	(curX < 0) 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   545
	    ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   546
		(curHeight <= 0) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   547
		    curHeight := curHeight + (r height) - curY.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   548
		    (curHeight < 1) ifTrue:[ curHeight := 1. ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   549
		].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   550
		px := 0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   551
		curY to:(curY + curHeight - 1) do: [ :i | px := px max:(xMax at:(i + 1)). ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   552
		((curX := px - curX - 1) < 0) ifTrue:[ curX := 0. ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   553
	    ]
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   554
	    ifFalse:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   555
		(curY < 0) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   556
		    (curWidth <= 0) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   557
			curWidth := curWidth + (r width) - curX.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   558
			(curWidth < 1) ifTrue:[ curWidth := 1. ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   559
		    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   560
		    py := 0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   561
		    curX to:(curX + curWidth - 1) do: [ :i | py := py max:(yMax at:(i + 1)). ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   562
		    ((curY := py - curY - 1) < 0) ifTrue:[ curY := 0. ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   563
		].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   564
	    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   565
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   566
	(curWidth <= 0) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   567
	    curWidth := curWidth + (r width) - curX.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   568
	    (curWidth < 1) ifTrue:[ curWidth := 1. ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   569
	].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   570
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   571
	(curHeight <= 0) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   572
	    curHeight := curHeight + (r height) - curY.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   573
	    (curHeight < 1) ifTrue:[ curHeight := 1. ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   574
	].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   575
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   576
	px := curX + curWidth.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   577
	py := curY + curHeight.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   578
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   579
	"/ Adjust the xMax and yMax arrays
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   580
	curX to: (curX + curWidth  - 1) do:[ :i | yMax at:(i + 1) put:py. ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   581
	curY to: (curY + curHeight - 1) do:[ :i | xMax at:(i + 1) put:px. ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   582
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   583
	"/ Zero width and height must mean that this is the last item (or
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   584
	"/ else something is wrong). 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   585
	((c gridHeight) == 0 and:[ (c gridWidth) == 0 ]) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   586
	    curRow := curCol := -1.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   587
	].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   588
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   589
	"/ Zero width starts a new row
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   590
	((c gridHeight) == 0 and:[ curRow < 0 ]) 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   591
	    ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   592
		curCol := curX + curWidth.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   593
	    ]
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   594
	    ifFalse:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   595
		((c gridWidth) == 0 and:[ curCol < 0 ]) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   596
		    curRow := curY + curHeight.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   597
		].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   598
	    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   599
        
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   600
	"/ Assign the new values to the gridbag slave */
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   601
	c tempX:curX.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   602
	c tempY:curY.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   603
	c tempWidth:curWidth.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   604
	c tempHeight:curHeight.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   605
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   606
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   607
    "/
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   608
    "/ Apply minimum row/column dimensions and weights
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   609
    "/
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   610
    r minWidth:  (columnWidths copy). 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   611
    r minHeight: (rowHeights copy). 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   612
    r weightX:   (columnWeights copy). 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   613
    r weightY:   (rowWeights copy).  
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   614
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   615
    "/
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   616
    "/ Pass #3
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   617
    "/
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   618
    "/ Distribute the minimun widths and weights:
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   619
    "/
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   620
    nextSize := MAX_INT_VAL.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   621
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   622
    i := 1. [ i ~~ MAX_INT_VAL ] whileTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   623
	subViews do:[ :child |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   624
	    c := self constraints:child.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   625
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   626
	    ((c tempWidth) == i) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   627
		px := (c tempX) + (c tempWidth).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   628
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   629
		"/
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   630
		"/ Figure out if we should use this slaves weight.  If the weight
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   631
		"/ is less than the total weight spanned by the width of the cell,
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   632
		"/ then discard the weight.  Otherwise split the difference
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   633
		"/ according to the existing weights.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   634
		"/
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   635
		weightDiff := (c weightX) asFloat.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   636
		(c tempX) to:(px - 1) do:[ :k | weightDiff := weightDiff - ((r weightX) at:(k + 1)) ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   637
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   638
		(weightDiff > 0.0) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   639
		    weight := 0.0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   640
		    (c tempX) to:(px - 1) do:[ :k | weight := weight + ((r weightX) at:(k + 1)). ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   641
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   642
		    k := c tempX.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   643
		    [ (weight > 0.0) and:[k < px] ] whileTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   644
			| wt dx |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   645
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   646
			wt := ((r weightX) at:(k + 1)) asFloat.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   647
			dx := (wt * weightDiff) / weight.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   648
			wt at:(k + 1) put:(wt + dx).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   649
			weightDiff := weightDiff - dx.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   650
			weight := weight - wt.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   651
		    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   652
		    (r weightX) at:(px - 1 + 1) put:(((r weightX) at:(px - 1 + 1)) + weightDiff).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   653
		].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   654
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   655
		"/ Calculate the minWidth array values.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   656
		"/ First, figure out how wide the current slave needs to be.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   657
		"/ Then, see if it will fit within the current minWidth values.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   658
		"/ If it will not fit, add the difference according to the
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   659
		"/ weightX array.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   660
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   661
		pixelsDiff := (c minWidth) + (c ipadX) + (c insets left) + (c insets right).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   662
		(c tempX) to:(px - 1) do:[ :k | 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   663
		    pixelsDiff := pixelsDiff - ((r minWidth) at:(k + 1)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   664
		].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   665
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   666
		(pixelsDiff > 0) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   667
		    weight := 0.0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   668
		    (c tempX) to:(px - 1) do:[ :k | weight := weight + ((r weightX) at:(k + 1)). ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   669
		    k := c tempX.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   670
		    [ (weight > 0.0) and:[k < px] ] whileTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   671
			| wt dx |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   672
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   673
			wt := ((r weightX) at:(k + 1)) asFloat.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   674
			dx := ((wt * pixelsDiff) / weight) asInteger.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   675
			(r minWidth) at:(k + 1) put:(((r minWidth) at:(k + 1)) + dx).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   676
			pixelsDiff := pixelsDiff - dx.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   677
			weight := weight - wt.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   678
		    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   679
		    (r minWidth) at:(px - 1 + 1) put:(((r minWidth) at:(px - 1 + 1)) + pixelsDiff).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   680
		].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   681
	    ] ifFalse:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   682
		(((c tempWidth) > i) and:[ (c tempWidth) < nextSize ]) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   683
		    nextSize := c tempWidth.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   684
		].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   685
	    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   686
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   687
	    "///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   688
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   689
	    ((c tempHeight) == i) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   690
		py := (c tempY) + (c tempHeight).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   691
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   692
		"/
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   693
		"/ Figure out if we should use this slaves weight.  If the weight
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   694
		"/ is less than the total weight spanned by the width of the cell,
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   695
		"/ then discard the weight.  Otherwise split the difference
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   696
		"/ according to the existing weights.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   697
		"/
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   698
		weightDiff := (c weightY) asFloat.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   699
		(c tempY) to:(py - 1) do:[ :k | weightDiff := weightDiff - ((r weightY) at:(k + 1)) ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   700
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   701
		(weightDiff > 0.0) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   702
		    weight := 0.0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   703
		    (c tempY) to:(py - 1) do:[ :k | weight := weight + ((r weightY) at:(k + 1)). ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   704
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   705
		    k := c tempY.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   706
		    [ (weight > 0.0) and:[k < py] ] whileTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   707
			| wt dy |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   708
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   709
			wt := ((r weightY) at:(k + 1)) asFloat.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   710
			dy := (wt * weightDiff) / weight.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   711
			wt at:(k + 1) put:(wt + dy).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   712
			weightDiff := weightDiff - dy.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   713
			weight := weight - wt.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   714
		    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   715
		    (r weightY) at:(py - 1 + 1) put:(((r weightY) at:(py - 1 + 1)) + weightDiff).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   716
		].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   717
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   718
		"/ Calculate the minWidth array values.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   719
		"/ First, figure out how wide the current slave needs to be.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   720
		"/ Then, see if it will fit within the current minWidth values.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   721
		"/ If it will not fit, add the difference according to the
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   722
		"/ weightX array.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   723
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   724
		pixelsDiff := (c minHeight) + (c ipadY) + (c insets top) + (c insets bottom).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   725
		(c tempY) to:(py - 1) do:[ :k | 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   726
		    pixelsDiff := pixelsDiff - ((r minHeight) at:(k + 1)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   727
		].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   728
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   729
		(pixelsDiff > 0) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   730
		    weight := 0.0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   731
		    (c tempY) to:(py - 1) do:[ :k | 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   732
			weight := weight + ((r weightY) at:(k + 1)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   733
		    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   734
		    k := c tempY.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   735
		    [ (weight > 0.0) and:[k < py] ] whileTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   736
			| wt dy |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   737
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   738
			wt := ((r weightY) at:(k + 1)) asFloat.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   739
			dy := ((wt * pixelsDiff) / weight) asInteger.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   740
			(r minHeight) at:(k + 1) put:(((r minHeight) at:(k + 1)) + dy).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   741
			pixelsDiff := pixelsDiff - dy.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   742
			weight := weight - wt.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   743
		    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   744
		    (r minHeight) at:(py - 1 + 1) put:(((r minHeight) at:(py - 1 + 1)) + pixelsDiff).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   745
		].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   746
	    ] ifFalse:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   747
		(((c tempHeight) > i) and:[ (c tempHeight) < nextSize ]) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   748
		    nextSize := c tempHeight.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   749
		].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   750
	    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   751
	].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   752
	i := nextSize.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   753
	nextSize := MAX_INT_VAL.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   754
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   755
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   756
    ^ r
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   757
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   758
    "Modified: / 29.3.1997 / 11:06:45 / cg"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   759
    "Created: / 19.1.1998 / 17:24:26 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   760
    "Modified: / 21.1.1998 / 18:40:38 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   761
!
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   762
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   763
getMinSize:info
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   764
    "Figure out the minimum size of the master based on the information from getLayoutInfo. The
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   765
     result will be returned as a rectangle with width and height set to the minimum size."
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   766
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   767
    | d insets t |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   768
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   769
    insets := Insets new.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   770
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   771
    d := Rectangle origin:0@0 extent:0@0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   772
    
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   773
    t := 0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   774
    1 to:(info width) do:[ :i | t := t + ((info minWidth) at:i). ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   775
    d width:(t + (insets left) + (insets right)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   776
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   777
    t := 0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   778
    1 to:(info height) do:[ :i | t := t + ((info minHeight) at:i). ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   779
    d height:(t + (insets top) + (insets bottom)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   780
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   781
    ^ d
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   782
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   783
    "Modified: / 1.2.1998 / 12:59:00 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   784
!
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   785
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   786
initialize
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   787
    "Initialize the instance. Mainly set our instance variables to required values."
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   788
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   789
    super initialize.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   790
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   791
    columnWidths  := IdentityDictionaryWithDefault newWithDefaultValue:0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   792
    rowHeights    := IdentityDictionaryWithDefault newWithDefaultValue:0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   793
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   794
    columnWeights := IdentityDictionaryWithDefault newWithDefaultValue:0.0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   795
    rowWeights    := IdentityDictionaryWithDefault newWithDefaultValue:0.0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   796
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   797
    layoutInfo    := nil.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   798
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   799
    "Created: / 19.1.1998 / 13:53:59 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   800
    "Modified: / 1.2.1998 / 12:57:05 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   801
!
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   802
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   803
minimumLayoutSize
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   804
    "Return our minimum layout size. The width and height of the returned rectangle gives the minimum
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   805
     layout size."
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   806
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   807
    | info |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   808
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   809
    info := self getLayoutInfo:#MINIMUM_SIZE.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   810
    ^ self getMinSize:info
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   811
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   812
    "Created: / 19.1.1998 / 17:25:01 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   813
    "Modified: / 1.2.1998 / 12:59:38 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   814
!
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   815
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   816
preferredLayoutSize
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   817
    "Return our preffered layout size. The width and height of the returned rectangle gives the
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   818
    preferred layout size."
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   819
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   820
    | info |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   821
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   822
    info := self getLayoutInfo:#PREFFERED_SIZE.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   823
    ^ self getMinSize:info
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   824
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   825
    "Created: / 19.1.1998 / 17:23:37 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   826
    "Modified: / 1.2.1998 / 13:00:04 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   827
! !
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   828
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   829
!GridBagLayoutView methodsFor:'queries'!
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   830
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   831
preferredExtent
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   832
    "Return a good extent, one that makes subviews fit. Return the the preferred extent as a point
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   833
    where x and y represents the width and height of the extent."
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   834
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   835
    | d |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   836
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   837
    "/ If I have an explicit preferredExtent ..
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   838
    preferredExtent notNil ifTrue:[ ^ preferredExtent ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   839
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   840
    (self subViews) isNil ifTrue:[ ^ super preferredExtent. ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   841
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   842
    d := self preferredLayoutSize.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   843
    ^ (d width) @ (d height).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   844
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   845
    "Created: / 17.1.1998 / 00:11:46 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   846
    "Modified: / 1.2.1998 / 13:01:46 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   847
! !
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   848
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   849
!GridBagLayoutView class methodsFor:'documentation'!
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   850
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   851
version
1877
3b415fa4710f only access originChanged, extentChanged and cornerChanged
Claus Gittinger <cg@exept.de>
parents: 1519
diff changeset
   852
    ^ '$Header: /cvs/stx/stx/libwidg2/GridBagLayoutView.st,v 1.4 2000-11-08 09:17:18 cg Exp $'
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   853
! !