/* GNU GENERAL PUBLIC LICENSE Copyright (C) 2006 The Lobo Project This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either verion 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Contact info: lobochief@users.sourceforge.net */ package org.lobobrowser.primary.gui; import java.awt.Component; import java.awt.Container; import java.awt.Dialog; import java.awt.Dimension; import java.awt.Frame; import javax.swing.Box; import javax.swing.JComponent; import javax.swing.border.EtchedBorder; import javax.swing.border.TitledBorder; public class SwingTasks { private static final String NESTED_ENABLING = "$nested.enabling"; public static void setNestedEnabled(final JComponent component, final boolean enabled) { final Boolean nestedEnabling = (Boolean) component.getClientProperty(NESTED_ENABLING); if ((nestedEnabling == null) || (nestedEnabling.booleanValue() != enabled)) { component.putClientProperty(NESTED_ENABLING, enabled); final Container parent = component.getParent(); if ((parent == null) || !enabled || parent.isEnabled()) { setEnabledRecursive(component, enabled); } } } private static void setEnabledRecursive(final JComponent component, final boolean enabled) { component.setEnabled(enabled); final int count = component.getComponentCount(); for (int i = 0; i < count; i++) { final Component child = component.getComponent(i); if (child instanceof JComponent) { final JComponent jchild = (JComponent) child; if (enabled) { final Boolean nestedEnabling = (Boolean) jchild.getClientProperty(NESTED_ENABLING); if ((nestedEnabling == null) || nestedEnabling.booleanValue()) { setEnabledRecursive(jchild, true); } } else { setEnabledRecursive(jchild, false); } } } } public static Component createVerticalFill() { final Dimension min = new Dimension(0, 0); final Dimension pref = new Dimension(0, Short.MAX_VALUE); final Dimension max = pref; return new Box.Filler(min, pref, max); } public static Component createHorizontalFill() { final Dimension min = new Dimension(0, 0); final Dimension pref = new Dimension(Short.MAX_VALUE, 0); final Dimension max = pref; return new Box.Filler(min, pref, max); } public static Frame getFrame(final Component component) { Container ancestor = component.getParent(); while ((ancestor != null) && !(ancestor instanceof Frame)) { ancestor = ancestor.getParent(); } return (Frame) ancestor; } public static Dialog getDialog(final Component component) { Container ancestor = component.getParent(); while ((ancestor != null) && !(ancestor instanceof Dialog)) { ancestor = ancestor.getParent(); } return (Dialog) ancestor; } public static Box createGroupBox(final int orientation, final String title) { final Box box = new Box(orientation); box.setBorder(new TitledBorder(new EtchedBorder(), title)); return box; } }