[Japi-cvs] SF.net SVN: japi: [227] libs
Status: Beta
Brought to you by:
christianhujer
From: <chr...@us...> - 2006-11-26 23:16:18
|
Revision: 227 http://svn.sourceforge.net/japi/?rev=227&view=rev Author: christianhujer Date: 2006-11-26 15:16:13 -0800 (Sun, 26 Nov 2006) Log Message: ----------- Added ColumnLayout to extlib. Modified Paths: -------------- libs/swing-prefs/trunk/libs-swing-prefs.iml Added Paths: ----------- libs/swing-extlib/trunk/src/net/ libs/swing-extlib/trunk/src/net/sf/ libs/swing-extlib/trunk/src/net/sf/japi/ libs/swing-extlib/trunk/src/net/sf/japi/swing/ libs/swing-extlib/trunk/src/net/sf/japi/swing/ColumnLayout.java Added: libs/swing-extlib/trunk/src/net/sf/japi/swing/ColumnLayout.java =================================================================== --- libs/swing-extlib/trunk/src/net/sf/japi/swing/ColumnLayout.java (rev 0) +++ libs/swing-extlib/trunk/src/net/sf/japi/swing/ColumnLayout.java 2006-11-26 23:16:13 UTC (rev 227) @@ -0,0 +1,149 @@ +package net.sf.japi.swing; + +import java.awt.LayoutManager; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Container; +import java.awt.Insets; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.NotNull; + +/** Layout similar to FlowLayout, but using columns (vertical layout) instead of rows (horizontal layout). + * @author <a href="mailto:ch...@ri...">Christian Hujer</a> + */ +@SuppressWarnings({"NonPrivateFieldAccessedInSynchronizedContext", "FieldAccessedSynchronizedAndUnsynchronized"}) +public class ColumnLayout implements LayoutManager { + + /** Horizontal Gap. */ + private int hgap = 4; + + /** Vertical Gap. */ + private int vgap = 4; + + /** Create a ColumnLayout with default gaps (4, 4). */ + public ColumnLayout() { + } + + /** Create a ColumnLayout with defined gaps. + * @param hgap horizontal gap + * @param vgap vertical gap + */ + public ColumnLayout(final int hgap, final int vgap) { + this.hgap = hgap; + this.vgap = vgap; + } + + /** Returns horizontal Gap. + * @return horizontal Gap. + */ + public int getHgap() { + return hgap; + } + + /** Sets horizontal Gap. + * @param hgap horizontal Gap. + */ + public void setHgap(final int hgap) { + this.hgap = hgap; + } + + /** Returns vertical Gap. + * @return vertical Gap. + */ + public int getVgap() { + return vgap; + } + + /** Sets vertical Gap. + * @param vgap vertical Gap. + */ + public void setVgap(final int vgap) { + this.vgap = vgap; + } + + /** {@inheritDoc} */ + public void addLayoutComponent(@Nullable final String name, @Nullable final Component comp) { + // Superfluous + } + + /** {@inheritDoc} */ + public void removeLayoutComponent(@Nullable final Component comp) { + // Superfluous + } + + /** {@inheritDoc} */ + @NotNull + public Dimension preferredLayoutSize(@NotNull final Container parent) { + synchronized (parent.getTreeLock()) { + final Dimension preferredLayoutSize = new Dimension(); + final int nmembers = parent.getComponentCount(); + for (int i = 0; i < nmembers; i++) { + final Component comp = parent.getComponent(i); + if (comp.isVisible()) { + final Dimension dim = comp.getPreferredSize(); + preferredLayoutSize.width = Math.max(preferredLayoutSize.width, dim.width); + if (i > 0) { + preferredLayoutSize.height += vgap; + } + preferredLayoutSize.height += dim.height; + } + } + final Insets insets = parent.getInsets(); + preferredLayoutSize.width += insets.left + insets.right + (hgap << 1); + preferredLayoutSize.height += insets.top + insets.bottom + (vgap << 1); + return preferredLayoutSize; + } + } + + /** {@inheritDoc} */ + @NotNull public Dimension minimumLayoutSize(@NotNull final Container parent) { + synchronized (parent.getTreeLock()) { + final Dimension minimumLayoutSize = new Dimension(); + final int nmembers = parent.getComponentCount(); + for (int i = 0; i < nmembers; i++) { + final Component comp = parent.getComponent(i); + if (comp.isVisible()) { + final Dimension dim = comp.getMinimumSize(); + minimumLayoutSize.width = Math.max(minimumLayoutSize.width, dim.width); + if (i > 0) { + minimumLayoutSize.height += vgap; + } + minimumLayoutSize.height += dim.height; + } + } + final Insets insets = parent.getInsets(); + minimumLayoutSize.width += insets.left + insets.right + (hgap << 1); + minimumLayoutSize.height += insets.top + insets.bottom + (vgap << 1); + return minimumLayoutSize; + } + } + + /** {@inheritDoc} */ + public void layoutContainer(@NotNull final Container parent) { + synchronized (parent.getTreeLock()) { + final Insets insets = parent.getInsets(); + final int nmembers = parent.getComponentCount(); + final int maxheight = parent.getHeight() - (insets.left + insets.right + (vgap << 1)); + int maxwidth = 0; + int y = 0; + int x = insets.left + hgap; + for (int i = 0; i < nmembers; i++) { + final Component comp = parent.getComponent(i); + if (comp.isVisible()) { + final Dimension dim = comp.getPreferredSize(); + comp.setSize(dim); + if (y + vgap + comp.getHeight() > maxheight) { + y = 0; + x += maxwidth + hgap; + maxwidth = 0; + } + maxwidth = comp.getWidth() > maxwidth ? comp.getWidth() : maxwidth; + y += vgap; + comp.setLocation(x, y); + y += comp.getHeight(); + } + } + } + } + +} // class ColumnLayout Property changes on: libs/swing-extlib/trunk/src/net/sf/japi/swing/ColumnLayout.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + LF Modified: libs/swing-prefs/trunk/libs-swing-prefs.iml =================================================================== --- libs/swing-prefs/trunk/libs-swing-prefs.iml 2006-11-26 23:11:32 UTC (rev 226) +++ libs/swing-prefs/trunk/libs-swing-prefs.iml 2006-11-26 23:16:13 UTC (rev 227) @@ -9,6 +9,7 @@ <orderEntry type="inheritedJdk" /> <orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="module" module-name="libs-swing-action" /> + <orderEntry type="module" module-name="libs-swing-extlib" /> <orderEntryProperties /> </component> <component name="copyright"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |