JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / site / j2s / java / awt / FlowLayout.js
1 Clazz.declarePackage ("java.awt");\r
2 Clazz.load (["java.awt.LayoutManager"], "java.awt.FlowLayout", ["java.awt.Dimension"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.align = 0;\r
5 this.newAlign = 0;\r
6 this.hgap = 0;\r
7 this.vgap = 0;\r
8 this.alignOnBaseline = false;\r
9 Clazz.instantialize (this, arguments);\r
10 }, java.awt, "FlowLayout", null, [java.awt.LayoutManager, java.io.Serializable]);\r
11 Clazz.makeConstructor (c$, \r
12 function () {\r
13 this.construct (1, 5, 5);\r
14 });\r
15 Clazz.makeConstructor (c$, \r
16 function (align) {\r
17 this.construct (align, 5, 5);\r
18 }, "~N");\r
19 Clazz.makeConstructor (c$, \r
20 function (align, hgap, vgap) {\r
21 this.hgap = hgap;\r
22 this.vgap = vgap;\r
23 this.setAlignment (align);\r
24 }, "~N,~N,~N");\r
25 Clazz.defineMethod (c$, "getAlignment", \r
26 function () {\r
27 return this.newAlign;\r
28 });\r
29 Clazz.defineMethod (c$, "setAlignment", \r
30 function (align) {\r
31 this.newAlign = align;\r
32 switch (align) {\r
33 case 3:\r
34 this.align = 0;\r
35 break;\r
36 case 4:\r
37 this.align = 2;\r
38 break;\r
39 default:\r
40 this.align = align;\r
41 break;\r
42 }\r
43 }, "~N");\r
44 Clazz.defineMethod (c$, "getHgap", \r
45 function () {\r
46 return this.hgap;\r
47 });\r
48 Clazz.defineMethod (c$, "setHgap", \r
49 function (hgap) {\r
50 this.hgap = hgap;\r
51 }, "~N");\r
52 Clazz.defineMethod (c$, "getVgap", \r
53 function () {\r
54 return this.vgap;\r
55 });\r
56 Clazz.defineMethod (c$, "setVgap", \r
57 function (vgap) {\r
58 this.vgap = vgap;\r
59 }, "~N");\r
60 Clazz.defineMethod (c$, "setAlignOnBaseline", \r
61 function (alignOnBaseline) {\r
62 this.alignOnBaseline = alignOnBaseline;\r
63 }, "~B");\r
64 Clazz.defineMethod (c$, "getAlignOnBaseline", \r
65 function () {\r
66 return this.alignOnBaseline;\r
67 });\r
68 Clazz.overrideMethod (c$, "addLayoutComponent", \r
69 function (name, comp) {\r
70 }, "~S,java.awt.Component");\r
71 Clazz.overrideMethod (c$, "removeLayoutComponent", \r
72 function (comp) {\r
73 }, "java.awt.Component");\r
74 Clazz.overrideMethod (c$, "preferredLayoutSize", \r
75 function (target) {\r
76 {\r
77 var dim =  new java.awt.Dimension (0, 0);\r
78 var nmembers = target.getComponentCount ();\r
79 var firstVisibleComponent = true;\r
80 var useBaseline = this.getAlignOnBaseline ();\r
81 var maxAscent = 0;\r
82 var maxDescent = 0;\r
83 for (var i = 0; i < nmembers; i++) {\r
84 var m = target.getComponent (i);\r
85 if (m.isVisible ()) {\r
86 var d = m.getPreferredSize ();\r
87 dim.height = Math.max (dim.height, d.height);\r
88 if (firstVisibleComponent) {\r
89 firstVisibleComponent = false;\r
90 } else {\r
91 dim.width += this.hgap;\r
92 }dim.width += d.width;\r
93 if (useBaseline) {\r
94 var baseline = m.getBaseline (d.width, d.height);\r
95 if (baseline >= 0) {\r
96 maxAscent = Math.max (maxAscent, baseline);\r
97 maxDescent = Math.max (maxDescent, d.height - baseline);\r
98 }}}}\r
99 if (useBaseline) {\r
100 dim.height = Math.max (maxAscent + maxDescent, dim.height);\r
101 }var insets = target.getInsets ();\r
102 dim.width += insets.left + insets.right + this.hgap * 2;\r
103 dim.height += insets.top + insets.bottom + this.vgap * 2;\r
104 return dim;\r
105 }}, "java.awt.Container");\r
106 Clazz.overrideMethod (c$, "minimumLayoutSize", \r
107 function (target) {\r
108 {\r
109 var useBaseline = this.getAlignOnBaseline ();\r
110 var dim =  new java.awt.Dimension (0, 0);\r
111 var nmembers = target.getComponentCount ();\r
112 var maxAscent = 0;\r
113 var maxDescent = 0;\r
114 var firstVisibleComponent = true;\r
115 for (var i = 0; i < nmembers; i++) {\r
116 var m = target.getComponent (i);\r
117 if (m.visible) {\r
118 var d = m.getMinimumSize ();\r
119 dim.height = Math.max (dim.height, d.height);\r
120 if (firstVisibleComponent) {\r
121 firstVisibleComponent = false;\r
122 } else {\r
123 dim.width += this.hgap;\r
124 }dim.width += d.width;\r
125 if (useBaseline) {\r
126 var baseline = m.getBaseline (d.width, d.height);\r
127 if (baseline >= 0) {\r
128 maxAscent = Math.max (maxAscent, baseline);\r
129 maxDescent = Math.max (maxDescent, dim.height - baseline);\r
130 }}}}\r
131 if (useBaseline) {\r
132 dim.height = Math.max (maxAscent + maxDescent, dim.height);\r
133 }var insets = target.getInsets ();\r
134 dim.width += insets.left + insets.right + this.hgap * 2;\r
135 dim.height += insets.top + insets.bottom + this.vgap * 2;\r
136 return dim;\r
137 }}, "java.awt.Container");\r
138 Clazz.defineMethod (c$, "moveComponents", \r
139  function (target, x, y, width, height, rowStart, rowEnd, ltr, useBaseline, ascent, descent) {\r
140 switch (this.newAlign) {\r
141 case 0:\r
142 x += ltr ? 0 : width;\r
143 break;\r
144 case 1:\r
145 x += Clazz.doubleToInt (width / 2);\r
146 break;\r
147 case 2:\r
148 x += ltr ? width : 0;\r
149 break;\r
150 case 3:\r
151 break;\r
152 case 4:\r
153 x += width;\r
154 break;\r
155 }\r
156 var maxAscent = 0;\r
157 var nonbaselineHeight = 0;\r
158 var baselineOffset = 0;\r
159 if (useBaseline) {\r
160 var maxDescent = 0;\r
161 for (var i = rowStart; i < rowEnd; i++) {\r
162 var m = target.getComponent (i);\r
163 if (m.visible) {\r
164 if (ascent[i] >= 0) {\r
165 maxAscent = Math.max (maxAscent, ascent[i]);\r
166 maxDescent = Math.max (maxDescent, descent[i]);\r
167 } else {\r
168 nonbaselineHeight = Math.max (m.getHeight (), nonbaselineHeight);\r
169 }}}\r
170 height = Math.max (maxAscent + maxDescent, nonbaselineHeight);\r
171 baselineOffset = Clazz.doubleToInt ((height - maxAscent - maxDescent) / 2);\r
172 }for (var i = rowStart; i < rowEnd; i++) {\r
173 var m = target.getComponent (i);\r
174 if (m.isVisible ()) {\r
175 var cy;\r
176 if (useBaseline && ascent[i] >= 0) {\r
177 cy = y + baselineOffset + maxAscent - ascent[i];\r
178 } else {\r
179 cy = y + Clazz.doubleToInt ((height - m.height) / 2);\r
180 }if (ltr) {\r
181 m.setLocation (x, cy);\r
182 } else {\r
183 m.setLocation (target.width - x - m.width, cy);\r
184 }x += m.width + this.hgap;\r
185 }}\r
186 return height;\r
187 }, "java.awt.Container,~N,~N,~N,~N,~N,~N,~B,~B,~A,~A");\r
188 Clazz.overrideMethod (c$, "layoutContainer", \r
189 function (target) {\r
190 System.out.println ("FlowLayout laying out " + target);\r
191 {\r
192 var insets = target.getInsets ();\r
193 var maxwidth = target.width - (insets.left + insets.right + this.hgap * 2);\r
194 var nmembers = target.getComponentCount ();\r
195 var x = 0;\r
196 var y = insets.top + this.vgap;\r
197 var rowh = 0;\r
198 var start = 0;\r
199 var ltr = target.getComponentOrientation ().isLeftToRight ();\r
200 var useBaseline = this.getAlignOnBaseline ();\r
201 var ascent = null;\r
202 var descent = null;\r
203 if (useBaseline) {\r
204 ascent =  Clazz.newIntArray (nmembers, 0);\r
205 descent =  Clazz.newIntArray (nmembers, 0);\r
206 }for (var i = 0; i < nmembers; i++) {\r
207 var m = target.getComponent (i);\r
208 if (m.isVisible ()) {\r
209 var d = m.getPreferredSize ();\r
210 m.setSize (d.width, d.height);\r
211 if (useBaseline) {\r
212 var baseline = m.getBaseline (d.width, d.height);\r
213 if (baseline >= 0) {\r
214 ascent[i] = baseline;\r
215 descent[i] = d.height - baseline;\r
216 } else {\r
217 ascent[i] = -1;\r
218 }}if ((x == 0) || ((x + d.width) <= maxwidth)) {\r
219 if (x > 0) {\r
220 x += this.hgap;\r
221 }x += d.width;\r
222 rowh = Math.max (rowh, d.height);\r
223 } else {\r
224 rowh = this.moveComponents (target, insets.left + this.hgap, y, maxwidth - x, rowh, start, i, ltr, useBaseline, ascent, descent);\r
225 x = d.width;\r
226 y += this.vgap + rowh;\r
227 rowh = d.height;\r
228 start = i;\r
229 }}}\r
230 this.moveComponents (target, insets.left + this.hgap, y, maxwidth - x, rowh, start, nmembers, ltr, useBaseline, ascent, descent);\r
231 }}, "java.awt.Container");\r
232 Clazz.overrideMethod (c$, "toString", \r
233 function () {\r
234 var str = "";\r
235 switch (this.align) {\r
236 case 0:\r
237 str = ",align=left";\r
238 break;\r
239 case 1:\r
240 str = ",align=center";\r
241 break;\r
242 case 2:\r
243 str = ",align=right";\r
244 break;\r
245 case 3:\r
246 str = ",align=leading";\r
247 break;\r
248 case 4:\r
249 str = ",align=trailing";\r
250 break;\r
251 }\r
252 return this.getClass ().getName () + "[hgap=" + this.hgap + ",vgap=" + this.vgap + str + "]";\r
253 });\r
254 Clazz.defineStatics (c$,\r
255 "LEFT", 0,\r
256 "CENTER", 1,\r
257 "RIGHT", 2,\r
258 "LEADING", 3,\r
259 "TRAILING", 4);\r
260 });\r