GridBagLayoutView.st
author Claus Gittinger <cg@exept.de>
Tue, 02 Aug 2005 15:14:45 +0200
changeset 2840 93e2b635838d
parent 1877 3b415fa4710f
child 2955 57c6b1a672dd
permissions -rw-r--r--
proper #initialize
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
2840
93e2b635838d proper #initialize
Claus Gittinger <cg@exept.de>
parents: 1877
diff changeset
   194
    ^ self basicNew initialize
721
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
2840
93e2b635838d proper #initialize
Claus Gittinger <cg@exept.de>
parents: 1877
diff changeset
   200
!GridBagLayoutView methodsFor:'initialization'!
93e2b635838d proper #initialize
Claus Gittinger <cg@exept.de>
parents: 1877
diff changeset
   201
93e2b635838d proper #initialize
Claus Gittinger <cg@exept.de>
parents: 1877
diff changeset
   202
initialize
93e2b635838d proper #initialize
Claus Gittinger <cg@exept.de>
parents: 1877
diff changeset
   203
    "Initialize the instance. Mainly set our instance variables to required values."
93e2b635838d proper #initialize
Claus Gittinger <cg@exept.de>
parents: 1877
diff changeset
   204
93e2b635838d proper #initialize
Claus Gittinger <cg@exept.de>
parents: 1877
diff changeset
   205
    super initialize.
93e2b635838d proper #initialize
Claus Gittinger <cg@exept.de>
parents: 1877
diff changeset
   206
93e2b635838d proper #initialize
Claus Gittinger <cg@exept.de>
parents: 1877
diff changeset
   207
    columnWidths  := IdentityDictionaryWithDefault newWithDefaultValue:0.
93e2b635838d proper #initialize
Claus Gittinger <cg@exept.de>
parents: 1877
diff changeset
   208
    rowHeights    := IdentityDictionaryWithDefault newWithDefaultValue:0.
93e2b635838d proper #initialize
Claus Gittinger <cg@exept.de>
parents: 1877
diff changeset
   209
93e2b635838d proper #initialize
Claus Gittinger <cg@exept.de>
parents: 1877
diff changeset
   210
    columnWeights := IdentityDictionaryWithDefault newWithDefaultValue:0.0.
93e2b635838d proper #initialize
Claus Gittinger <cg@exept.de>
parents: 1877
diff changeset
   211
    rowWeights    := IdentityDictionaryWithDefault newWithDefaultValue:0.0.
93e2b635838d proper #initialize
Claus Gittinger <cg@exept.de>
parents: 1877
diff changeset
   212
93e2b635838d proper #initialize
Claus Gittinger <cg@exept.de>
parents: 1877
diff changeset
   213
    layoutInfo    := nil.
93e2b635838d proper #initialize
Claus Gittinger <cg@exept.de>
parents: 1877
diff changeset
   214
93e2b635838d proper #initialize
Claus Gittinger <cg@exept.de>
parents: 1877
diff changeset
   215
    "Created: / 19.1.1998 / 13:53:59 / av"
93e2b635838d proper #initialize
Claus Gittinger <cg@exept.de>
parents: 1877
diff changeset
   216
    "Modified: / 1.2.1998 / 12:57:05 / av"
93e2b635838d proper #initialize
Claus Gittinger <cg@exept.de>
parents: 1877
diff changeset
   217
! !
93e2b635838d proper #initialize
Claus Gittinger <cg@exept.de>
parents: 1877
diff changeset
   218
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
!GridBagLayoutView methodsFor:'layout'!
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
setChildPositions
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
    "(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
   223
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
    self arrangeGrid.
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
    "Modified: / 1.2.1998 / 12:52:22 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
! !
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   229
!GridBagLayoutView methodsFor:'private'!
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
adjustForGravity:c in:r
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
    | diffx diffy add |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   235
    r setLeft: ((r left)   + (c insets left)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   236
    r width:   ((r width)  - ((c insets left) + (c insets right))).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
    r setTop:  ((r top)    + (c insets top)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
    r height:  ((r height) - ((c insets top) + (c insets bottom))).
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
    diffx := 0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
    (((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
   242
	diffx := (r width) - add.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
	r width:add.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   246
    diffy := 0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
    (((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
   248
	diffy := (r height) - add.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   249
	r height:add.
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
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   252
    ((c anchor) == #CENTER) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   253
	r setLeft:((r left) + (diffx / 2)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
	r setTop:((r top) + (diffy / 2)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   255
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   256
    ((c anchor) == #NORTH) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   257
	r setLeft:((r left) + (diffx / 2)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   258
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   259
    ((c anchor) == #NORTHEAST) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   260
	r setLeft:((r left) + diffx).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   261
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   262
    ((c anchor) == #EAST) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   263
	r setLeft:((r left) + diffx).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   264
	r setTop:((r top) + (diffy / 2)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   265
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   266
    ((c anchor) == #SOUTHEAST) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   267
	r setLeft:((r left) + diffx).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   268
	r setTop:((r top) + diffy).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   269
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   270
    ((c anchor) == #SOUTH) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   271
	r setLeft:((r left) + (diffx / 2)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   272
	r setTop:((r top) + diffy).
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
    ((c anchor) == #SOUTHWEST) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   275
	r setTop:((r top) + diffy).
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
    ((c anchor) == #WEST) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   278
	r setTop:((r top) + (diffy / 2)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   279
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   280
    ((c anchor) == #NORTHWEST) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   281
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   282
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   283
    r setLeft: ((r left)   asInteger).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   284
    r setTop:  ((r top)    asInteger).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   285
    r width:   ((r width)  asInteger).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   286
    r height:  ((r height) asInteger).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   287
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   288
    ^ r
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
    "Modified: / 22.1.1998 / 09:50:01 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
!
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
arrangeGrid
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   294
    " Lay out the grid."
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   295
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   296
    | insets subViews info ext d r c diffw diffh weight |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   297
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   298
    insets := Insets new.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   299
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   300
    "/ If the parent has no slaves anymore, then don't do anything
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
    "/ at all:  just leave the parent's size as-is.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
    (((subViews := self subViews) size) == 0) ifTrue:[^ self].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   303
1877
3b415fa4710f only access originChanged, extentChanged and cornerChanged
Claus Gittinger <cg@exept.de>
parents: 1519
diff changeset
   304
    self extentChangedFlag ifTrue:[
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   305
        ext    := self computeExtent.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   306
        width  := ext x.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   307
        height := ext y.
721
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
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
    "/ Pass #1: scan all the slaves to figure out the total amount
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
    "/ of space needed.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   312
    
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   313
    info := self getLayoutInfo:#PREFERRED_SIZE.    
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   314
    d := self getMinSize:info.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   315
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   316
    ((width < (d width)) or:[(height < (d height))]) ifTrue:[
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   317
        info := self getLayoutInfo:#MINIMUM_SIZE.    
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   318
        d := self getMinSize:info.
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   319
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   320
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   321
    layoutInfo := info.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   322
    r := Rectangle origin:0@0 extent:((d width) @ (d height)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   323
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   324
    "/ If the current dimensions of the window don't match the desired
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   325
    "/ dimensions, then adjust the minWidth and minHeight arrays
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   326
    "/ according to the weights.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   327
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   328
    diffw := width - (r width).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   329
    (diffw ~~ 0) ifTrue:[
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   330
        weight := 0.0.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   331
        0 to:((info width) - 1) do:[ :i |
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   332
            weight := weight + ((info weightX) at:(i + 1)).
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   333
        ].
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   334
        (weight > 0.0) ifTrue:[
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   335
            0 to:((info width) - 1) do:[ :i |    
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   336
                | dx |
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   337
                dx := ((diffw * ((info weightX) at:(i + 1))) / weight) asInteger.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   338
                (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
   339
                r width:((r width) + dx).
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   340
                (((info minWidth) at:(i + 1)) < 0) ifTrue:[
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   341
                    r width:((r width) - ((info minWidth) at:(i + 1))).
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   342
                    (info minWidth) at:(i + 1) put:0.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   343
                ].
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   344
            ].
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   345
        ].
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   346
        diffw := width - (r width).
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   347
    ] ifFalse:[
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   348
        diffw := 0.
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   349
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   350
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   351
    diffh := height - (r height).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   352
    (diffh ~~ 0) ifTrue:[
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   353
        weight := 0.0.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   354
        0 to:((info height) - 1) do:[ :i |
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   355
            weight := weight + ((info weightY) at:(i + 1)).
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   356
        ].
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   357
        (weight > 0.0) ifTrue:[
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   358
            0 to:((info height) - 1) do:[ :i |    
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   359
                | dy |
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   360
                dy := ((diffh * ((info weightY) at:(i + 1))) / weight) asInteger.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   361
                (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
   362
                r height:((r height) + dy).
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   363
                (((info minHeight) at:(i + 1)) < 0) ifTrue:[
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   364
                    r height:((r height) - ((info minHeight) at:(i + 1))).
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   365
                    (info minHeight) at:(i + 1) put:0.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   366
                ].
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   367
            ].
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   368
        ].
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   369
        diffh := height - (r height).
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   370
    ] ifFalse:[
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   371
        diffh := 0.
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   372
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   373
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   374
    "/ Now do the actual layout of the slaves using the layout information
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   375
    "/ that has been collected.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   376
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   377
    info startX:(((diffw / 2) + (insets left)) asInteger).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   378
    info startY:(((diffh / 2) + (insets top)) asInteger).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   379
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   380
    subViews do:[ :child |
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   381
        |rW rH|
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   382
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   383
        c := self constraints:child.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   384
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   385
        r setLeft:(info startX).
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   386
        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
   387
        
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   388
        r setTop:(info startY).
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   389
        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
   390
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   391
        r width:0.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   392
        (c tempX) to:((c tempX) + (c tempWidth) - 1) do:[ :i |
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   393
            r width:((r width) + ((info minWidth) at:(i + 1))).
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   394
        ].
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   395
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   396
        r height:0.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   397
        (c tempY) to:((c tempY) + (c tempHeight) - 1) do:[ :i |
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   398
            r height:((r height) + ((info minHeight) at:(i + 1))).
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   399
        ].
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   400
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   401
        self adjustForGravity:c in:r.
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   402
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   403
        "/ If the window is too small to be interesting then
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   404
        "/ unmap it.  Otherwise configure it and then make sure
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   405
        "/ its mapped.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   406
        rW := r width.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   407
        rH := r height.
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   408
1519
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   409
        ((rW <= 0) or:[rH <= 0]) ifTrue:[
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   410
            child origin:(0@0) ; width:0 height:0.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   411
        ] ifFalse:[
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   412
            child origin:((r left) @ (r top)).
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   413
            child width:rW.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   414
            child height:rH.
eeb8243a99af checkin from browser
Claus Gittinger <cg@exept.de>
parents: 790
diff changeset
   415
        ].
721
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
    "Modified: / 1.2.1998 / 12:53:37 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   419
!
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
constraints:anObject 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   422
    " 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
   423
      which don't have any constraints yet."
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   424
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   425
    | c |
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
    c := anObject objectAttributeAt:#GridBagConstraints.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   428
    c isNil ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   429
	anObject objectAttributeAt:#GridBagConstraints put:(c := GridBagConstraints new)
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   430
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   431
    ^ c.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   432
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   433
    "Created: / 21.1.1998 / 00:24:34 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   434
    "Modified: / 1.2.1998 / 12:55:23 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   435
!
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   436
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   437
getLayoutInfo:which
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   438
    "return a good extent, one that makes subviews fit"
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
    | 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   441
	MAX_INT_VAL subViews 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   442
	r i k px py pixelsDiff weightDiff weight nextSize c 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   443
	curX curY curWidth curHeight curRow curCol xMax yMax
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   444
    |
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
    MAX_INT_VAL := 9999999999.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   447
    subViews := (self subViews).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   448
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   449
    r := GridBagLayoutInfo new.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   450
    r width:0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   451
    r height:0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   452
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   453
    xMax := IdentityDictionaryWithDefault newWithDefaultValue:0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   454
    yMax := IdentityDictionaryWithDefault newWithDefaultValue:0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   455
    curRow := curCol := -1.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   456
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   457
    "/ Pass #1
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
    "/ 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
   460
    "/ zero or negative widths and heights).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   461
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   462
    subViews do:[ :child |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   463
	c := self constraints:child.
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 := c gridX.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   466
	curY := c gridY.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   467
	((curWidth  := c gridWidth)  <= 0) ifTrue:[ curWidth  := 1. ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   468
	((curHeight := c gridHeight) <= 0) ifTrue:[ curHeight := 1. ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   469
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   470
	"/ If x or y is negative, then use relative positioning:
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   471
	((curX < 0) and:[ curY < 0 ]) 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   472
	    ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   473
		(curRow >= 0) 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   474
		    ifTrue: [ curY := curRow. ]
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   475
		    ifFalse:[ (curCol >= 0) ifTrue:[ curX := curCol. ] ifFalse: [ curY := 0. ]].
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
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   478
	(curX < 0) 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   479
	    ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   480
		px := 0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   481
		curY to:(curY + curHeight - 1) do: [ :i |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   482
		    px := px max:(xMax at:(i + 1)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   483
		].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   484
		((curX := px - curX - 1) < 0) ifTrue:[ curX := 0. ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   485
	    ]
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   486
	    ifFalse:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   487
		(curY < 0) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   488
		    py := 0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   489
		    curX to: (curX + curWidth - 1) do: [ :i |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   490
			py := py max: (yMax at:(i + 1)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   491
		    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   492
		    ((curY := py - curY - 1) < 0) ifTrue:[ curY := 0. ].
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
	    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   495
        
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   496
	"/ Adjust the grid width and height
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   497
	px := curX + curWidth.  [ (r width)  < px ] whileTrue:[ r width:((r width) + 1). ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   498
	py := curY + curHeight. [ (r height) < py ] whileTrue:[ r height:((r height) + 1). ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   499
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   500
	"/ Adjust the xMax and yMax arrays
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   501
	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
   502
	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
   503
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   504
	c minWidth:(child preferredExtent x).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   505
	c minHeight:(child preferredExtent y).
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
	"/ 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
   508
	"/ else something is wrong). 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   509
	(((c gridHeight) == 0) and:[ (c gridWidth) == 0 ]) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   510
	    curRow := curCol := -1.
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
	"/ Zero width starts a new row
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   514
	(((c gridHeight) == 0) and:[ curRow < 0 ]) 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   515
	    ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   516
		curCol := curX + curWidth.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   517
	    ]
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   518
	    ifFalse:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   519
		((c gridWidth) == 0 and:[ curCol < 0 ]) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   520
		    curRow := curY + curHeight.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   521
		].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   522
	    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   523
    ].    
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
    "/
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   526
    "/ Apply minimum row/column dimensions
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
    ((r width)  < (columnWidths size)) ifTrue:[ r width:(columnWidths size). ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   529
    ((r height) < (rowHeights size))   ifTrue:[ r height:(rowHeights size). ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   530
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   531
    "/
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   532
    "/ Pass #2
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   533
    "/
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   534
    "/ Negative values for gridX are filled in with the current x value.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   535
    "/ Negative values for gridY are filled in with the current y value.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   536
    "/ Negative or zero values for gridWidth and gridHeight end the current
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   537
    "/ row or column, respectively.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   538
    "/
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   539
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   540
    curRow := curCol := -1.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   541
    xMax := IdentityDictionaryWithDefault newWithDefaultValue:0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   542
    yMax := IdentityDictionaryWithDefault newWithDefaultValue:0.
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
    subViews do:[ :child |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   545
	c := self constraints:child.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   546
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   547
	curX      := c gridX.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   548
	curY      := c gridY.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   549
	curWidth  := c gridWidth.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   550
	curHeight := c gridHeight.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   551
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   552
	"/ If x or y is negative, then use relative positioning:
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   553
	((curX < 0) and:[ curY < 0 ]) 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   554
	    ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   555
		(curRow >= 0) 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   556
		    ifTrue: [ curY := curRow. ]
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   557
		    ifFalse:[ (curCol >= 0) 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   558
			ifTrue:  [ curX := curCol. ]
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   559
			ifFalse: [ curY := 0. ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   560
		    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   561
	    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   562
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   563
	(curX < 0) 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   564
	    ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   565
		(curHeight <= 0) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   566
		    curHeight := curHeight + (r height) - curY.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   567
		    (curHeight < 1) ifTrue:[ curHeight := 1. ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   568
		].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   569
		px := 0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   570
		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
   571
		((curX := px - curX - 1) < 0) ifTrue:[ curX := 0. ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   572
	    ]
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   573
	    ifFalse:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   574
		(curY < 0) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   575
		    (curWidth <= 0) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   576
			curWidth := curWidth + (r width) - curX.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   577
			(curWidth < 1) ifTrue:[ curWidth := 1. ].
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
		    py := 0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   580
		    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
   581
		    ((curY := py - curY - 1) < 0) ifTrue:[ curY := 0. ].
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
	    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   584
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   585
	(curWidth <= 0) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   586
	    curWidth := curWidth + (r width) - curX.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   587
	    (curWidth < 1) ifTrue:[ curWidth := 1. ].
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
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   590
	(curHeight <= 0) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   591
	    curHeight := curHeight + (r height) - curY.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   592
	    (curHeight < 1) ifTrue:[ curHeight := 1. ].
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
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   595
	px := curX + curWidth.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   596
	py := 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
	"/ Adjust the xMax and yMax arrays
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   599
	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
   600
	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
   601
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   602
	"/ 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
   603
	"/ else something is wrong). 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   604
	((c gridHeight) == 0 and:[ (c gridWidth) == 0 ]) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   605
	    curRow := curCol := -1.
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
	"/ Zero width starts a new row
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   609
	((c gridHeight) == 0 and:[ curRow < 0 ]) 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   610
	    ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   611
		curCol := curX + curWidth.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   612
	    ]
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   613
	    ifFalse:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   614
		((c gridWidth) == 0 and:[ curCol < 0 ]) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   615
		    curRow := curY + curHeight.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   616
		].
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
        
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   619
	"/ Assign the new values to the gridbag slave */
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   620
	c tempX:curX.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   621
	c tempY:curY.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   622
	c tempWidth:curWidth.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   623
	c tempHeight:curHeight.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   624
    ].
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
    "/
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   627
    "/ Apply minimum row/column dimensions and weights
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
    r minWidth:  (columnWidths copy). 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   630
    r minHeight: (rowHeights copy). 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   631
    r weightX:   (columnWeights copy). 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   632
    r weightY:   (rowWeights copy).  
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   633
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
    "/ Pass #3
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   636
    "/
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   637
    "/ Distribute the minimun widths and weights:
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   638
    "/
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   639
    nextSize := MAX_INT_VAL.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   640
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   641
    i := 1. [ i ~~ MAX_INT_VAL ] whileTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   642
	subViews do:[ :child |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   643
	    c := self constraints:child.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   644
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   645
	    ((c tempWidth) == i) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   646
		px := (c tempX) + (c tempWidth).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   647
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   648
		"/
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   649
		"/ Figure out if we should use this slaves weight.  If the weight
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   650
		"/ 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
   651
		"/ then discard the weight.  Otherwise split the difference
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   652
		"/ according to the existing weights.
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
		weightDiff := (c weightX) asFloat.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   655
		(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
   656
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   657
		(weightDiff > 0.0) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   658
		    weight := 0.0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   659
		    (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
   660
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   661
		    k := c tempX.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   662
		    [ (weight > 0.0) and:[k < px] ] whileTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   663
			| wt dx |
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
			wt := ((r weightX) at:(k + 1)) asFloat.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   666
			dx := (wt * weightDiff) / weight.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   667
			wt at:(k + 1) put:(wt + dx).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   668
			weightDiff := weightDiff - dx.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   669
			weight := weight - wt.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   670
		    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   671
		    (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
   672
		].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   673
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   674
		"/ Calculate the minWidth array values.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   675
		"/ First, figure out how wide the current slave needs to be.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   676
		"/ Then, see if it will fit within the current minWidth values.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   677
		"/ If it will not fit, add the difference according to the
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   678
		"/ weightX array.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   679
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   680
		pixelsDiff := (c minWidth) + (c ipadX) + (c insets left) + (c insets right).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   681
		(c tempX) to:(px - 1) do:[ :k | 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   682
		    pixelsDiff := pixelsDiff - ((r minWidth) at:(k + 1)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   683
		].
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
		(pixelsDiff > 0) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   686
		    weight := 0.0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   687
		    (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
   688
		    k := c tempX.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   689
		    [ (weight > 0.0) and:[k < px] ] whileTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   690
			| wt dx |
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
			wt := ((r weightX) at:(k + 1)) asFloat.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   693
			dx := ((wt * pixelsDiff) / weight) asInteger.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   694
			(r minWidth) at:(k + 1) put:(((r minWidth) at:(k + 1)) + dx).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   695
			pixelsDiff := pixelsDiff - dx.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   696
			weight := weight - wt.
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
		    (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
   699
		].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   700
	    ] ifFalse:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   701
		(((c tempWidth) > i) and:[ (c tempWidth) < nextSize ]) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   702
		    nextSize := c tempWidth.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   703
		].
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
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   706
	    "///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   707
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   708
	    ((c tempHeight) == i) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   709
		py := (c tempY) + (c tempHeight).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   710
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   711
		"/
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   712
		"/ Figure out if we should use this slaves weight.  If the weight
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   713
		"/ 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
   714
		"/ then discard the weight.  Otherwise split the difference
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   715
		"/ according to the existing weights.
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
		weightDiff := (c weightY) asFloat.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   718
		(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
   719
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   720
		(weightDiff > 0.0) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   721
		    weight := 0.0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   722
		    (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
   723
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   724
		    k := c tempY.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   725
		    [ (weight > 0.0) and:[k < py] ] whileTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   726
			| wt dy |
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
			wt := ((r weightY) at:(k + 1)) asFloat.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   729
			dy := (wt * weightDiff) / weight.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   730
			wt at:(k + 1) put:(wt + dy).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   731
			weightDiff := weightDiff - dy.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   732
			weight := weight - wt.
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
		    (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
   735
		].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   736
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   737
		"/ Calculate the minWidth array values.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   738
		"/ First, figure out how wide the current slave needs to be.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   739
		"/ Then, see if it will fit within the current minWidth values.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   740
		"/ If it will not fit, add the difference according to the
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   741
		"/ weightX array.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   742
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   743
		pixelsDiff := (c minHeight) + (c ipadY) + (c insets top) + (c insets bottom).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   744
		(c tempY) to:(py - 1) do:[ :k | 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   745
		    pixelsDiff := pixelsDiff - ((r minHeight) at:(k + 1)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   746
		].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   747
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   748
		(pixelsDiff > 0) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   749
		    weight := 0.0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   750
		    (c tempY) to:(py - 1) do:[ :k | 
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   751
			weight := weight + ((r weightY) at:(k + 1)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   752
		    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   753
		    k := c tempY.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   754
		    [ (weight > 0.0) and:[k < py] ] whileTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   755
			| wt dy |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   756
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   757
			wt := ((r weightY) at:(k + 1)) asFloat.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   758
			dy := ((wt * pixelsDiff) / weight) asInteger.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   759
			(r minHeight) at:(k + 1) put:(((r minHeight) at:(k + 1)) + dy).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   760
			pixelsDiff := pixelsDiff - dy.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   761
			weight := weight - wt.
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
		    (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
   764
		].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   765
	    ] ifFalse:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   766
		(((c tempHeight) > i) and:[ (c tempHeight) < nextSize ]) ifTrue:[
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   767
		    nextSize := c tempHeight.
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
	    ].
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
	i := nextSize.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   772
	nextSize := MAX_INT_VAL.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   773
    ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   774
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   775
    ^ r
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
    "Modified: / 29.3.1997 / 11:06:45 / cg"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   778
    "Created: / 19.1.1998 / 17:24:26 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   779
    "Modified: / 21.1.1998 / 18:40:38 / av"
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
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   782
getMinSize:info
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   783
    "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
   784
     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
   785
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   786
    | d insets t |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   787
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   788
    insets := Insets new.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   789
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   790
    d := Rectangle origin:0@0 extent:0@0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   791
    
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   792
    t := 0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   793
    1 to:(info width) do:[ :i | t := t + ((info minWidth) at:i). ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   794
    d width:(t + (insets left) + (insets right)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   795
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   796
    t := 0.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   797
    1 to:(info height) do:[ :i | t := t + ((info minHeight) at:i). ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   798
    d height:(t + (insets top) + (insets bottom)).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   799
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   800
    ^ d
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
    "Modified: / 1.2.1998 / 12:59:00 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   803
!
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   804
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   805
minimumLayoutSize
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   806
    "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
   807
     layout size."
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 |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   810
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   811
    info := self getLayoutInfo:#MINIMUM_SIZE.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   812
    ^ self getMinSize:info
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   813
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   814
    "Created: / 19.1.1998 / 17:25:01 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   815
    "Modified: / 1.2.1998 / 12:59:38 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   816
!
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   817
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   818
preferredLayoutSize
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   819
    "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
   820
    preferred layout size."
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 |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   823
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   824
    info := self getLayoutInfo:#PREFFERED_SIZE.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   825
    ^ self getMinSize:info
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   826
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   827
    "Created: / 19.1.1998 / 17:23:37 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   828
    "Modified: / 1.2.1998 / 13:00:04 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   829
! !
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
!GridBagLayoutView methodsFor:'queries'!
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   832
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   833
preferredExtent
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   834
    "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
   835
    where x and y represents the width and height of the extent."
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
    | d |
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   838
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   839
    "/ If I have an explicit preferredExtent ..
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   840
    preferredExtent notNil ifTrue:[ ^ 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
    (self subViews) isNil ifTrue:[ ^ super preferredExtent. ].
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   843
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   844
    d := self preferredLayoutSize.
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   845
    ^ (d width) @ (d height).
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   846
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   847
    "Created: / 17.1.1998 / 00:11:46 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   848
    "Modified: / 1.2.1998 / 13:01:46 / av"
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   849
! !
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
!GridBagLayoutView class methodsFor:'documentation'!
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   852
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   853
version
2840
93e2b635838d proper #initialize
Claus Gittinger <cg@exept.de>
parents: 1877
diff changeset
   854
    ^ '$Header: /cvs/stx/stx/libwidg2/GridBagLayoutView.st,v 1.5 2005-08-02 13:14:18 cg Exp $'
721
c33e43c9fe66 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   855
! !