001    /*
002     * $Id: VerticalLayout.java,v 1.3 2005/10/10 18:01:47 rbair Exp $
003     *
004     * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
005     * Santa Clara, California 95054, U.S.A. All rights reserved.
006     *
007     * This library is free software; you can redistribute it and/or
008     * modify it under the terms of the GNU Lesser General Public
009     * License as published by the Free Software Foundation; either
010     * version 2.1 of the License, or (at your option) any later version.
011     * 
012     * This library is distributed in the hope that it will be useful,
013     * but WITHOUT ANY WARRANTY; without even the implied warranty of
014     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
015     * Lesser General Public License for more details.
016     * 
017     * You should have received a copy of the GNU Lesser General Public
018     * License along with this library; if not, write to the Free Software
019     * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
020     */
021    package org.jdesktop.swingx;
022    
023    import java.awt.Component;
024    import java.awt.Container;
025    import java.awt.Dimension;
026    import java.awt.Insets;
027    import java.awt.LayoutManager;
028    import java.awt.LayoutManager2;
029    import javax.swing.JPanel;
030    
031    /**
032     * Organizes components in a vertical layout.
033     * 
034     * @author fred
035     */
036    public class VerticalLayout
037        implements LayoutManager2
038    {
039        private float alignX = Component.LEFT_ALIGNMENT;
040        private float alignY = Component.TOP_ALIGNMENT;
041        
042        private int gap = 0;
043    
044        public VerticalLayout() {
045        }
046    
047        public VerticalLayout(int gap) {
048            this.gap = gap;
049        }
050    
051        public int getGap() {
052            return gap;
053        }
054    
055        public void setGap(int gap) {
056            this.gap = gap;
057        }
058    
059        public void removeLayoutComponent(Component c) {
060        }
061    
062        public void addLayoutComponent(Component comp, Object constraints) {
063        }
064        public void addLayoutComponent(String name, Component comp) {
065        }
066    
067        public void layoutContainer(Container parent) {
068            Insets insets = parent.getInsets();
069            Dimension size = parent.getSize();
070            int width = size.width - insets.left - insets.right;
071            int height = insets.top;
072            for (int i = 0, c = parent.getComponentCount(); i < c; i++ ) {
073                Component m = parent.getComponent(i);
074                if (m.isVisible()) {
075                    m.setBounds(insets.left, height, width,
076                        m.getPreferredSize().height);
077                    height += m.getSize().height + gap;
078                }
079            }
080        }
081    
082        public Dimension preferredLayoutSize(Container parent) {
083            Insets insets = parent.getInsets();
084            Dimension pref = new Dimension(0, 0);
085            for (int i = 0, c = parent.getComponentCount(); i < c; i++ ) {
086                Component m = parent.getComponent(i);
087                if (m.isVisible()) {
088                    Dimension componentPreferredSize = parent.getComponent(i)
089                        .getPreferredSize();
090                    pref.height += componentPreferredSize.height + gap;
091                    pref.width = Math.max(pref.width, componentPreferredSize.width);
092                }
093            }
094            pref.width += insets.left + insets.right;
095            pref.height += insets.top + insets.bottom;
096            return pref;
097        }
098    
099        public Dimension minimumLayoutSize(Container parent) {
100            return preferredLayoutSize(parent);
101        }
102    
103        public Dimension maximumLayoutSize(Container target) {
104            return preferredLayoutSize(target);
105        }
106    
107        public float getLayoutAlignmentX(Container target) {
108            return target.getAlignmentX();
109        }
110    
111        public float getLayoutAlignmentY(Container target) {
112            return target.getAlignmentY();
113        }
114    
115        public void invalidateLayout(Container target) {
116        }
117    
118    }