History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/sun/tools/jconsole/VariableGridLayout.java (1 of 18352 files). Show all

Unified · Split

java/pkg/sun/tools/jconsole/VariableGridLayout.java+239−0
@@ -0,0 +1,239 @@
1+/*
2+ * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
3+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+ *
5+ * This code is free software; you can redistribute it and/or modify it
6+ * under the terms of the GNU General Public License version 2 only, as
7+ * published by the Free Software Foundation. Oracle designates this
8+ * particular file as subject to the "Classpath" exception as provided
9+ * by Oracle in the LICENSE file that accompanied this code.
10+ *
11+ * This code is distributed in the hope that it will be useful, but WITHOUT
12+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+ * version 2 for more details (a copy is included in the LICENSE file that
15+ * accompanied this code).
16+ *
17+ * You should have received a copy of the GNU General Public License version
18+ * 2 along with this work; if not, write to the Free Software Foundation,
19+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+ *
21+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+ * or visit www.oracle.com if you need additional information or have any
23+ * questions.
24+ */
25+
26+package sun.tools.jconsole;
27+
28+import java.awt.*;
29+import java.util.*;
30+
31+import javax.swing.*;
32+
33+@SuppressWarnings("serial")
34+public class VariableGridLayout extends GridLayout {
35+
36+ private boolean fillRows, fillColumns;
37+
38+ public VariableGridLayout(int rows, int cols,
39+ int hgap, int vgap,
40+ boolean fillRows, boolean fillColumns) {
41+ super(rows, cols, hgap, vgap);
42+
43+ this.fillRows = fillRows;
44+ this.fillColumns = fillColumns;
45+ }
46+
47+ public void setFillRow(JComponent c, boolean b) {
48+ c.putClientProperty("VariableGridLayout.fillRow", b);
49+ }
50+
51+ public void setFillColumn(JComponent c, boolean b) {
52+ c.putClientProperty("VariableGridLayout.fillColumn", b);
53+ }
54+
55+ public boolean getFillRow(JComponent c) {
56+ Boolean b = (Boolean)c.getClientProperty("VariableGridLayout.fillRow");
57+ return (b != null) ? b : fillRows;
58+ }
59+
60+ public boolean getFillColumn(JComponent c) {
61+ Boolean b = (Boolean)c.getClientProperty("VariableGridLayout.fillColumn");
62+ return (b != null) ? b : fillColumns;
63+ }
64+
65+ public void layoutContainer(Container parent) {
66+ Insets insets = parent.getInsets();
67+ int ncomponents = parent.getComponentCount();
68+ int nrows = getRows();
69+ int ncols = getColumns();
70+ int hgap = getHgap();
71+ int vgap = getVgap();
72+
73+ if (nrows > 0) {
74+ ncols = (ncomponents + nrows - 1) / nrows;
75+ } else {
76+ nrows = (ncomponents + ncols - 1) / ncols;
77+ }
78+
79+ // Set heights
80+ int x;
81+ int y;
82+ int nFills = 0;
83+ boolean[] fills = new boolean[nrows];
84+ int lastFillRow = -1;
85+ int nComps = parent.getComponentCount();
86+
87+ y = insets.top;
88+ for (int row = 0; row < nrows; row++) {
89+ // Find largest minimum height for this row
90+ int h = 0;
91+ for (int col = 0; col < ncols; col++) {
92+ if (row * ncols + col < nComps) {
93+ Component c = parent.getComponent(row * ncols + col);
94+ h = Math.max(h, c.getMinimumSize().height);
95+ }
96+ }
97+ // Set heights for this row
98+ x = insets.left;
99+ for (int col = 0; col < ncols; col++) {
100+ if (row * ncols + col < nComps) {
101+ JComponent c = (JComponent)parent.getComponent(row * ncols + col);
102+ int w = c.getWidth();
103+ c.setBounds(x, y, w, h);
104+ x += w + hgap;
105+ if (col == 0 && getFillRow(c)) {
106+ fills[row] = true;
107+ }
108+ }
109+ }
110+ y += h + vgap;
111+ if (fills[row]) {
112+ nFills++;
113+ lastFillRow = row;
114+ }
115+ }
116+
117+ // Fill heights
118+ if (nFills > 0 && y < parent.getHeight()) {
119+ // How much height to add
120+ int hAdd = (parent.getHeight() - y) / nFills;
121+ int hAdded = 0;
122+ for (int row = 0; row < nrows; row++) {
123+ if (fills[row]) {
124+ if (row == lastFillRow) {
125+ // Compensate for rounding error
126+ hAdd = parent.getHeight() - (y+hAdded);
127+ }
128+ for (int col = 0; col < ncols; col++) {
129+ if (row * ncols + col < nComps) {
130+ Component c = parent.getComponent(row * ncols + col);
131+ Rectangle b = c.getBounds();
132+ c.setBounds(b.x, b.y + hAdded, b.width, b.height + hAdd);
133+ }
134+ }
135+ hAdded += hAdd;
136+ }
137+ }
138+ }
139+
140+ // Set widths
141+ nFills = 0;
142+ fills = new boolean[ncols];
143+ int lastFillCol = -1;
144+
145+ x = insets.left;
146+ for (int col = 0; col < ncols; col++) {
147+ // Find largest minimum width for this column
148+ int w = 0;
149+ for (int row = 0; row < nrows; row++) {
150+ if (row * ncols + col < nComps) {
151+ Component c = parent.getComponent(row * ncols + col);
152+ w = Math.max(w, c.getMinimumSize().width);
153+ }
154+ }
155+ // Set widths for this column
156+ y = insets.top;
157+ for (int row = 0; row < nrows; row++) {
158+ if (row * ncols + col < nComps) {
159+ JComponent c = (JComponent)parent.getComponent(row * ncols + col);
160+ int h = c.getHeight();
161+ c.setBounds(x, y, w, h);
162+ y += h + vgap;
163+ if (row == 0 && getFillColumn(c)) {
164+ fills[col] = true;
165+ }
166+ }
167+ }
168+ x += w + hgap;
169+ if (fills[col]) {
170+ nFills++;
171+ lastFillCol = col;
172+ }
173+ }
174+
175+ // Fill widths
176+ if (nFills > 0 && x < parent.getWidth()) {
177+ // How much width to add
178+ int wAdd = (parent.getWidth() - x) / nFills;
179+ int wAdded = 0;
180+ for (int col = 0; col < ncols; col++) {
181+ if (fills[col]) {
182+ if (col == lastFillCol) {
183+ wAdd = parent.getWidth() - (x+wAdded);
184+ }
185+ for (int row = 0; row < nrows; row++) {
186+ if (row * ncols + col < nComps) {
187+ Component c = parent.getComponent(row * ncols + col);
188+ Rectangle b = c.getBounds();
189+ c.setBounds(b.x + wAdded, b.y, b.width + wAdd, b.height);
190+ }
191+ }
192+ wAdded += wAdd;
193+ }
194+ }
195+ }
196+ }
197+
198+ public Dimension preferredLayoutSize(Container parent) {
199+ Insets insets = parent.getInsets();
200+ int ncomponents = parent.getComponentCount();
201+ int nrows = getRows();
202+ int ncols = getColumns();
203+ int hgap = getHgap();
204+ int vgap = getVgap();
205+
206+ if (nrows > 0) {
207+ ncols = (ncomponents + nrows - 1) / nrows;
208+ } else {
209+ nrows = (ncomponents + ncols - 1) / ncols;
210+ }
211+
212+ int nComps = parent.getComponentCount();
213+
214+ int y = insets.top;
215+ for (int row = 0; row < nrows; row++) {
216+ int h = 0;
217+ for (int col = 0; col < ncols; col++) {
218+ if (row * ncols + col < nComps) {
219+ Component c = parent.getComponent(row * ncols + col);
220+ h = Math.max(h, c.getMinimumSize().height);
221+ }
222+ }
223+ y += h + vgap;
224+ }
225+
226+ int x = insets.left;
227+ for (int col = 0; col < ncols; col++) {
228+ int w = 0;
229+ for (int row = 0; row < nrows; row++) {
230+ if (row * ncols + col < nComps) {
231+ Component c = parent.getComponent(row * ncols + col);
232+ w = Math.max(w, c.getMinimumSize().width);
233+ }
234+ }
235+ x += w + hgap;
236+ }
237+ return new Dimension(x, y);
238+ }
239+}