1   /*
2    * $Id: VerticalLayout.java,v 1.3 2005/10/10 18:01:47 rbair Exp $
3    *
4    * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
5    * Santa Clara, California 95054, U.S.A. All rights reserved.
6    *
7    * This library is free software; you can redistribute it and/or
8    * modify it under the terms of the GNU Lesser General Public
9    * License as published by the Free Software Foundation; either
10   * version 2.1 of the License, or (at your option) any later version.
11   *
12   * This library is distributed in the hope that it will be useful,
13   * but WITHOUT ANY WARRANTY; without even the implied warranty of
14   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15   * Lesser General Public License for more details.
16   *
17   * You should have received a copy of the GNU Lesser General Public
18   * License along with this library; if not, write to the Free Software
19   * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20   */
21  package org.jdesktop.swingx;
22  
23  import java.awt.Component;
24  import java.awt.Container;
25  import java.awt.Dimension;
26  import java.awt.Insets;
27  import java.awt.LayoutManager;
28  
29  /**
30   * Organizes components in a vertical layout.
31   *
32   * @author fred
33   */
34  public class VerticalLayout implements LayoutManager {
35  
36    private int gap = 0;
37  
38    public VerticalLayout() { }
39  
40    public VerticalLayout(int gap) {
41      this.gap = gap;
42    }
43  
44    public int getGap() {
45      return gap;
46    }
47  
48    public void setGap(int gap) {
49      this.gap = gap;
50    }
51  
52    public void addLayoutComponent(String name, Component c) { }
53  
54    public void layoutContainer(Container parent) {
55      Insets insets = parent.getInsets();
56      Dimension size = parent.getSize();
57      int width = size.width - insets.left - insets.right;
58      int height = insets.top;
59  
60      for (int i = 0, c = parent.getComponentCount(); i < c; i++) {
61        Component m = parent.getComponent(i);
62        if (m.isVisible()) {
63          m.setBounds(insets.left, height, width, m.getPreferredSize().height);
64          height += m.getSize().height + gap;
65        }
66      }
67    }
68  
69    public Dimension minimumLayoutSize(Container parent) {
70      return preferredLayoutSize(parent);
71    }
72  
73    public Dimension preferredLayoutSize(Container parent) {
74      Insets insets = parent.getInsets();
75      Dimension pref = new Dimension(0, 0);
76  
77      for (int i = 0, c = parent.getComponentCount(); i < c; i++) {
78        Component m = parent.getComponent(i);
79        if (m.isVisible()) {
80          Dimension componentPreferredSize =
81            parent.getComponent(i).getPreferredSize();
82          pref.height += componentPreferredSize.height + gap;
83          pref.width = Math.max(pref.width, componentPreferredSize.width);
84        }
85      }
86  
87      pref.width += insets.left + insets.right;
88      pref.height += insets.top + insets.bottom;
89  
90      return pref;
91    }
92  
93    public void removeLayoutComponent(Component c) { }
94  
95  }