/*
* Copyright (c) 1998, 2001, Oracle and/or its affiliates. All rights reserved.
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
package javax.swing.colorchooser;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import javax.swing.text.*;
import java.io.
Serializable;
/**
* A better GridLayout class
*
* @author Steve Wilson
*/
class
SmartGridLayout implements
LayoutManager,
Serializable {
int
rows = 2;
int
columns = 2;
int
xGap = 2;
int
yGap = 2;
int
componentCount = 0;
Component[][]
layoutGrid;
public
SmartGridLayout(int
numColumns, int
numRows) {
rows =
numRows;
columns =
numColumns;
layoutGrid = new
Component[
numColumns][
numRows];
}
public void
layoutContainer(
Container c) {
buildLayoutGrid(
c);
int[]
rowHeights = new int[
rows];
int[]
columnWidths = new int[
columns];
for (int
row = 0;
row <
rows;
row++) {
rowHeights[
row] =
computeRowHeight(
row);
}
for (int
column = 0;
column <
columns;
column++) {
columnWidths[
column] =
computeColumnWidth(
column);
}
Insets insets =
c.
getInsets();
if (
c.
getComponentOrientation().
isLeftToRight()) {
int
horizLoc =
insets.
left;
for (int
column = 0;
column <
columns;
column++) {
int
vertLoc =
insets.
top;
for (int
row = 0;
row <
rows;
row++) {
Component current =
layoutGrid[
column][
row];
current.
setBounds(
horizLoc,
vertLoc,
columnWidths[
column],
rowHeights[
row]);
// System.out.println(current.getBounds());
vertLoc += (
rowHeights[
row] +
yGap);
}
horizLoc += (
columnWidths[
column] +
xGap );
}
} else {
int
horizLoc =
c.
getWidth() -
insets.
right;
for (int
column = 0;
column <
columns;
column++) {
int
vertLoc =
insets.
top;
horizLoc -=
columnWidths[
column];
for (int
row = 0;
row <
rows;
row++) {
Component current =
layoutGrid[
column][
row];
current.
setBounds(
horizLoc,
vertLoc,
columnWidths[
column],
rowHeights[
row]);
// System.out.println(current.getBounds());
vertLoc += (
rowHeights[
row] +
yGap);
}
horizLoc -=
xGap;
}
}
}
public
Dimension minimumLayoutSize(
Container c) {
buildLayoutGrid(
c);
Insets insets =
c.
getInsets();
int
height = 0;
int
width = 0;
for (int
row = 0;
row <
rows;
row++) {
height +=
computeRowHeight(
row);
}
for (int
column = 0;
column <
columns;
column++) {
width +=
computeColumnWidth(
column);
}
height += (
yGap * (
rows - 1)) +
insets.
top +
insets.
bottom;
width += (
xGap * (
columns - 1)) +
insets.
right +
insets.
left;
return new
Dimension(
width,
height);
}
public
Dimension preferredLayoutSize(
Container c) {
return
minimumLayoutSize(
c);
}
public void
addLayoutComponent(
String s,
Component c) {}
public void
removeLayoutComponent(
Component c) {}
private void
buildLayoutGrid(
Container c) {
Component[]
children =
c.
getComponents();
for (int
componentCount = 0;
componentCount <
children.length;
componentCount++) {
// System.out.println("Children: " +componentCount);
int
row = 0;
int
column = 0;
if (
componentCount != 0) {
column =
componentCount %
columns;
row = (
componentCount -
column) /
columns;
}
// System.out.println("inserting into: "+ column + " " + row);
layoutGrid[
column][
row] =
children[
componentCount];
}
}
private int
computeColumnWidth(int
columnNum) {
int
maxWidth = 1;
for (int
row = 0;
row <
rows;
row++) {
int
width =
layoutGrid[
columnNum][
row].
getPreferredSize().
width;
if (
width >
maxWidth) {
maxWidth =
width;
}
}
return
maxWidth;
}
private int
computeRowHeight(int
rowNum) {
int
maxHeight = 1;
for (int
column = 0;
column <
columns;
column++) {
int
height =
layoutGrid[
column][
rowNum].
getPreferredSize().
height;
if (
height >
maxHeight) {
maxHeight =
height;
}
}
return
maxHeight;
}
}