/* * @(#)PaletteLayout.java * * Project: JHotdraw - a GUI framework for technical drawings * http://www.jhotdraw.org * http://jhotdraw.sourceforge.net * Copyright: © by the original author(s) and all contributors * License: Lesser GNU Public License (LGPL) * http://www.opensource.org/licenses/lgpl-license.html */ package CH.ifa.draw.util; import java.awt.*; /** * A custom layout manager for the palette. * * @see PaletteButton * * @version <$CURRENT_VERSION$> */ public class PaletteLayout implements LayoutManager { private int fGap; private Point fBorder; private boolean fVerticalLayout; /** * Initializes the palette layout. * @param gap the gap between palette entries. */ public PaletteLayout(int gap) { this(gap, new Point(0,0), true); } public PaletteLayout(int gap, Point border) { this(gap, border, true); } public PaletteLayout(int gap, Point border, boolean vertical) { fGap = gap; fBorder = border; fVerticalLayout = vertical; } public void addLayoutComponent(String name, Component comp) { } public void removeLayoutComponent(Component comp) { } public Dimension preferredLayoutSize(Container target) { return minimumLayoutSize(target); } 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(); if (fVerticalLayout) { dim.width = Math.max(dim.width, d.width); if (i > 0) { dim.height += fGap; } dim.height += d.height; } else { dim.height = Math.max(dim.height, d.height); if (i > 0) { dim.width += fGap; } dim.width += d.width; } } } Insets insets = target.getInsets(); dim.width += insets.left + insets.right; dim.width += 2 * fBorder.x; dim.height += insets.top + insets.bottom; dim.height += 2 * fBorder.y; return dim; } public void layoutContainer(Container target) { Insets insets = target.getInsets(); int nmembers = target.getComponentCount(); int x = insets.left + fBorder.x; int y = insets.top + fBorder.y; for (int i = 0 ; i < nmembers ; i++) { Component m = target.getComponent(i); if (m.isVisible()) { Dimension d = m.getMinimumSize(); m.setBounds(x, y, d.width, d.height); if (fVerticalLayout) { y += d.height; y += fGap; } else { x += d.width; x += fGap; } } } } }