1
4
5 import org.aswing.*;
6 import org.aswing.geom.*;
7
8
14 class org.aswing.SoftBoxLayout extends EmptyLayout{
15
16
19 public static var X_AXIS:Number = 0;
20
21
24 public static var Y_AXIS:Number = 1;
25
26
27 private var axis:Number;
28 private var gap:Number;
29
30
39 public function SoftBoxLayout(axis:Number, gap:Number){
40 this.axis = (axis == undefined ? X_AXIS : axis);
41 this.gap = (gap == undefined ? 0 : gap);
42 }
43
44
47 public function preferredLayoutSize(target:Container):Dimension{
48 var count:Number = target.getComponentCount();
49 var insets:Insets = target.getInsets();
50 var width:Number = 0;
51 var height:Number = 0;
52 var wTotal:Number = 0;
53 var hTotal:Number = 0;
54 for(var i:Number=0; i<count; i++){
55 var c:Component = target.getComponent(i);
56 if(c.isVisible()){
57 var size:Dimension = c.getPreferredSize();
58 width = Math.max(width, size.width);
59 height = Math.max(height, size.height);
60 var g:Number = i > 0 ? gap : 0;
61 wTotal += (size.width + g);
62 hTotal += (size.height + g);
63 }
64 }
65 if(axis == Y_AXIS){
66 height = hTotal;
67 }else{
68 width = wTotal;
69 }
70
71 var dim:Dimension = new Dimension(width, height);
72 return insets.roundsSize(dim);
73 }
74
75
78 public function minimumLayoutSize(target:Container):Dimension{
79 var count:Number = target.getComponentCount();
80 var insets:Insets = target.getInsets();
81 var width:Number = 0;
82 var height:Number = 0;
83 var wTotal:Number = 0;
84 var hTotal:Number = 0;
85 for(var i:Number=0; i<count; i++){
86 var c:Component = target.getComponent(i);
87 if(c.isVisible()){
88 var size:Dimension = c.getMinimumSize();
89 width = Math.max(width, size.width);
90 height = Math.max(height, size.height);
91 var g:Number = i > 0 ? gap : 0;
92 wTotal += (size.width + g);
93 hTotal += (size.height + g);
94 }
95 }
96 if(axis == Y_AXIS){
97 height = hTotal;
98 }else{
99 width = wTotal;
100 }
101 var dim:Dimension = new Dimension(width, height);
102 return insets.roundsSize(dim);
103 }
104
105
108 public function maximumLayoutSize(target:Container):Dimension{
109 var count:Number = target.getComponentCount();
110 var insets:Insets = target.getInsets();
111 var width:Number = 0;
112 var height:Number = 0;
113 var wTotal:Number = 0;
114 var hTotal:Number = 0;
115 for(var i:Number=0; i<count; i++){
116 var c:Component = target.getComponent(i);
117 if(c.isVisible()){
118 var size:Dimension = c.getMaximumSize();
119 width = Math.max(width, size.width);
120 height = Math.max(height, size.height);
121 var g:Number = i > 0 ? gap : 0;
122 wTotal += (size.width + g);
123 hTotal += (size.height + g);
124 }
125 }
126 if(axis == Y_AXIS){
127 height = hTotal;
128 }else{
129 width = wTotal;
130 }
131 var dim:Dimension = new Dimension(width, height);
132 return insets.roundsSize(dim);
133 }
134
135
138 public function layoutContainer(target:Container):Void{
139 var count:Number = target.getComponentCount();
140 var size:Dimension = target.getSize();
141 var insets:Insets = target.getInsets();
142 var rd:Rectangle = insets.getInsideBounds(size.getBounds());
143 var ch:Number = rd.height;
144 var cw:Number = rd.width;
145 var x:Number = rd.x;
146 var y:Number = rd.y;
147 for(var i:Number=0; i<count; i++){
148 var c:Component = target.getComponent(i);
149 if(c.isVisible()){
150 var ps:Dimension = c.getPreferredSize();
151 if(axis == Y_AXIS){
152 c.setBounds(x, y, cw, ps.height);
153 y += (ps.height + gap);
154 }else{
155 c.setBounds(x, y, ps.width, ch);
156 x += (ps.width + gap);
157 }
158 }
159 }
160 }
161
162
165 public function getLayoutAlignmentX(target:Container):Number{
166 return 0.5;
167 }
168
169
172 public function getLayoutAlignmentY(target:Container):Number{
173 return 0.5;
174 }
175 }
176