package com.AsamiOffice.jaba2.awt; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.Insets; /** * LayoutManagerHelper * * @since Apr. 9, 1998 * @version Apr. 25, 1998 * @author ASAMI, Tomoharu (tasami@ibm.net) */ public class LayoutManagerHelper { public Dimension size; public Insets insets; public int nComps; public Component[] comps; public Dimension[] maxs; public Dimension[] mins; public Dimension[] prefs; public Dimension maxMax; public Dimension minMax; public Dimension totalMaxs; public Dimension maxMin; public Dimension minMin; public Dimension totalMins; public Dimension maxPref; public Dimension minPref; public Dimension totalPrefs; protected Container container_; protected Component[] comps_ = null; public LayoutManagerHelper(Container container) { container_ = container; } public LayoutManagerHelper(Container container, Component[] comps) { container_ = container; comps_ = comps; } public void setup() { size = container_.getSize(); insets = container_.getInsets(); if (comps_ != null) { comps = comps_; } else { comps = selectVisibleComponents(container_.getComponents()); } nComps = comps.length; maxs = makeMaximumSizeList(comps); mins = makeMinimumSizeList(comps); prefs = makePreferredSizeList(comps); maxMax = calcMaximumSize(maxs); minMax = calcMinimumSize(maxs); totalMaxs = calcTotalSize(maxs); maxMin = calcMaximumSize(mins); minMin = calcMinimumSize(mins); totalMins = calcTotalSize(mins); maxPref = calcMaximumSize(prefs); minPref = calcMinimumSize(prefs); totalPrefs = calcTotalSize(prefs); } public static Component[] selectVisibleComponents(Component[] comps) { int nTotal = comps.length; int nVisible = 0; Component[] result = new Component[nTotal]; for (int i = 0;i < nTotal;i++) { Component comp = comps[i]; if (comp.isVisible()) { result[nVisible++] = comp; } } if (nVisible == nTotal) { return (result); } else { Component[] newResult = new Component[nVisible]; System.arraycopy(result, 0, newResult, 0, nVisible); return (newResult); } } public static Dimension[] makeMaximumSizeList(Component[] comps) { Dimension[] sizes = new Dimension[comps.length]; for (int i = 0;i < comps.length;i++) { sizes[i] = comps[i].getMaximumSize(); } return (sizes); } public static Dimension[] makeMinimumSizeList(Component[] comps) { Dimension[] sizes = new Dimension[comps.length]; for (int i = 0;i < comps.length;i++) { sizes[i] = comps[i].getMinimumSize(); } return (sizes); } public static Dimension[] makePreferredSizeList(Component[] comps) { Dimension[] sizes = new Dimension[comps.length]; for (int i = 0;i < comps.length;i++) { sizes[i] = comps[i].getPreferredSize(); } return (sizes); } public static Dimension calcMaximumSize(Dimension[] dims) { Dimension max = new Dimension(0, 0); for (int i = 0;i < dims.length;i++) { max.width = Math.max(max.width, dims[i].width); max.height = Math.max(max.height, dims[i].height); } return (max); } public static Dimension calcMinimumSize(Dimension[] dims) { Dimension min = new Dimension(0, 0); for (int i = 0;i < dims.length;i++) { min.width = Math.min(min.width, dims[i].width); min.height = Math.min(min.height, dims[i].height); } return (min); } public static Dimension calcTotalSize(Dimension[] dims) { Dimension total = new Dimension(0, 0); for (int i = 0;i < dims.length;i++) { total.width += dims[i].width; total.height += dims[i].height; } return (total); } }