Mercurial > illumos > onarm
view usr/src/cmd/cmd-inet/usr.sadm/dhcpmgr/com/sun/dhcpmgr/ui/ButtonLayout.java @ 0:c9caec207d52 b86
Initial porting based on b86
author | Koji Uno <koji.uno@sun.com> |
---|---|
date | Tue, 02 Jun 2009 18:56:50 +0900 |
parents | |
children | 1a15d5aaf794 |
line wrap: on
line source
/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * ident "@(#)ButtonLayout.java 1.4 05/06/08 SMI" * * Copyright (c) 1996-1999 by Sun Microsystems, Inc. * All rights reserved. */ package com.sun.dhcpmgr.ui; import java.awt.*; /** * <CODE>ButtonLayout</CODE> is used to layout buttons in a * <CODE>Panel</CODE>. It will arrange buttons left to right * until no more buttons fit on the same line. Each line is * centered. All buttons are set to an equal size.<P> * * While <CODE>ButtonLayout</CODE> was designed for <CODE>Buttons</CODE>, * any component can be added to the layout. All components are * set to an equal size.<P> * */ public class ButtonLayout implements LayoutManager { ALIGNMENT align; int hgap; int vgap; /** * Constructs a new <CODE>ButtonLayout</CODE> with a centered alignment. */ public ButtonLayout() { this(ALIGNMENT.CENTER, 5, 5); } /** * Constructs a new <CODE>ButtonLayout</CODE> with the specified alignment. * @param <VAR>align</VAR> The alignment value. * @see ALIGNMENT */ public ButtonLayout(ALIGNMENT align) { this(align, 5, 5); } /** * Constructs a new <CODE>ButtonLayout</CODE> with the specified * alignment and gap values. * @param <VAR>align</VAR> The alignment value. * @param <VAR>hgap</VAR> The horizontal gap variable. * @param <VAR>vgap</VAR> The vertical gap variable. * @see ALIGNMENT */ public ButtonLayout(ALIGNMENT align, int hgap, int vgap) { this.align = align; this.hgap = hgap; this.vgap = vgap; } /** * Adds the specified component to the layout. This is not *used by this class. * @param <VAR>name</VAR> The name of the component. * @param <VAR>comp</VAR> The component to be added. */ public void addLayoutComponent(String name, Component comp) { } /** * Removes the specified component from the layout. This * is not used by this class. * @param <VAR>comp</VAR> The component to remove. */ public void removeLayoutComponent(Component comp) { } /** * Returns the preferred dimensions for this layout given * the components in the specified target container. * @param <VAR>target</VAR> The component that needs to be laid out. * @see java.awt.Container * @see #minimumLayoutSize */ public Dimension preferredLayoutSize(Container target) { Dimension dim = new Dimension(0, 0); int nmembers = target.getComponentCount(); for (int i = 0; i < nmembers; i++) { Component m = target.getComponent(i); if (m.isVisible()) { Dimension d = m.getPreferredSize(); dim.height = Math.max(dim.height, d.height); dim.width = Math.max(dim.width, d.width); } } dim.width = (dim.width*nmembers) + (hgap*nmembers-1); Insets insets = target.getInsets(); dim.width += insets.left + insets.right + hgap*2; dim.height += insets.top + insets.bottom + vgap*2; return dim; } /** * Returns the minimum dimensions needed to layout the components * contained in the specified target container. * @param <VAR>target</VAR> The component that needs to be laid out * @see #preferredLayoutSize */ public Dimension minimumLayoutSize(Container target) { Dimension dim = new Dimension(0, 0); int nmembers = target.getComponentCount(); for (int i = 0; i < nmembers; i++) { Component m = target.getComponent(i); if (m.isVisible()) { Dimension d = m.getMinimumSize(); dim.height = Math.max(dim.height, d.height); dim.width = Math.max(dim.width, d.width); } } dim.width = (dim.width*nmembers) + (hgap*nmembers-1); Insets insets = target.getInsets(); dim.width += insets.left + insets.right + hgap*2; dim.height += insets.top + insets.bottom + vgap*2; return dim; } /** * Centers the elements in the specified row, if there is any slack. * @param <VAR>target</VAR> The component which needs to be moved. * @param <VAR>x</VAR> The x coordinate. * @param <VAR>y</VAR> The y coordinate. * @param <VAR>width</VAR> The width dimensions. * @param <VAR>height</VAR> The height dimensions. * @param <VAR>rowStart</VAR> Index of the first component in the row. * @param <VAR>rowEnd</VAR> Index of the last component in the row. */ private void moveComponents(Container target, int x, int y, int width, int height, int rowStart, int rowEnd) { Dimension dim; if (align == ALIGNMENT.LEFT) { // do nothing } else if (align == ALIGNMENT.CENTER) { x += width / 2; } else if (align == ALIGNMENT.RIGHT) { x += width; } for (int i = rowStart; i < rowEnd; i++) { Component m = target.getComponent(i); if (m.isVisible()) { dim = m.getSize(); m.setLocation(x, y + (height - dim.height) / 2); x += hgap + dim.width; } } } /** * Lays out the container. This method will actually reshape the * components in the target in order to satisfy the constraints of * the <CODE>BorderLayout</CODE> object. * @param <VAR>target</VAR> The specified component being laid out. * @see java.awt.Container */ public void layoutContainer(Container target) { Insets insets = target.getInsets(); Dimension tdim = target.getSize(); int maxwidth = tdim.width - (insets.left + insets.right + hgap*2); int nmembers = target.getComponentCount(); int x = 0, y = insets.top + vgap; int rowh = 0, start = 0; Dimension dim = new Dimension(0, 0); for (int i = 0; i < nmembers; i++) { Component m = target.getComponent(i); if (m.isVisible()) { Dimension d = m.getMinimumSize(); dim.width = Math.max(dim.width, d.width); } } for (int i = 0; i < nmembers; i++) { Component m = target.getComponent(i); if (m.isVisible()) { Dimension d = m.getPreferredSize(); m.setSize(dim.width, d.height); if ((x == 0) || ((x + dim.width) <= maxwidth)) { if (x > 0) { x += hgap; } x += dim.width; rowh = Math.max(rowh, d.height); } else { moveComponents(target, insets.left + hgap, y, maxwidth - x, rowh, start, i); x = dim.width; y += vgap + rowh; rowh = d.height; start = i; } } } moveComponents(target, insets.left + hgap, y, maxwidth - x, rowh, start, nmembers); } /** * Returns the <CODE>String</CODE> representation of this * <CODE>ButtonLayout</CODE>'s values. */ public String toString() { String str = ""; if (align == ALIGNMENT.LEFT) { str = ",align=left"; } else if (align == ALIGNMENT.RIGHT) { str = ",align=right"; } else if (align == ALIGNMENT.CENTER) { str = ",align=center"; } return getClass().getName() + "[hgap=" + hgap + ",vgap=" + vgap + str + "]"; } }