001package net.sf.logdistiller.gui;
002
003/*
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017import java.awt.Component;
018import java.awt.Container;
019import java.awt.Dimension;
020import java.awt.LayoutManager2;
021import java.util.HashMap;
022import java.util.Map;
023
024import com.jgoodies.forms.layout.CellConstraints;
025import com.jgoodies.forms.layout.FormLayout;
026
027/**
028 * This class is a simplified version of FormLayoutMaker's equivalent class, in a dream to avoid need for Java 1.4 at
029 * runtime.
030 */
031public class SimpleContainerLayout
032    implements LayoutManager2
033{
034    private final Map<String, CellConstraints> componentConstraints = new HashMap<String, CellConstraints>();
035
036    private final Map<Component, String> componentsToNames = new HashMap<Component, String>();
037
038    private final FormLayout formLayout;
039
040    private final String name;
041
042    public SimpleContainerLayout( String name, String columnSpecs, String rowSpecs )
043    {
044        this.name = name;
045        formLayout = new FormLayout( columnSpecs, rowSpecs );
046    }
047
048    public String getName()
049    {
050        return this.name;
051    }
052
053    public void addCellConstraints( String name, CellConstraints constraints )
054    {
055        componentConstraints.put( name, constraints );
056    }
057
058    // interface for LayoutManager2
059    public void addLayoutComponent( String name, Component comp )
060    {
061        throw new RuntimeException(
062                                    "This method should not be called.  Call addLayoutComponent(Component, Object) instead" );
063    }
064
065    public float getLayoutAlignmentX( Container target )
066    {
067        return formLayout.getLayoutAlignmentX( target );
068    }
069
070    public float getLayoutAlignmentY( Container target )
071    {
072        return formLayout.getLayoutAlignmentY( target );
073    }
074
075    public void invalidateLayout( Container target )
076    {
077        formLayout.invalidateLayout( target );
078    }
079
080    public void layoutContainer( Container parent )
081    {
082        formLayout.layoutContainer( parent );
083    }
084
085    public Dimension maximumLayoutSize( Container target )
086    {
087        return formLayout.maximumLayoutSize( target );
088    }
089
090    public Dimension minimumLayoutSize( Container parent )
091    {
092        return formLayout.minimumLayoutSize( parent );
093    }
094
095    public Dimension preferredLayoutSize( Container parent )
096    {
097        return formLayout.preferredLayoutSize( parent );
098    }
099
100    public void removeLayoutComponent( Component comp )
101    {
102        String componentName = componentsToNames.get( comp );
103        componentsToNames.remove( comp );
104        componentConstraints.remove( componentName );
105        formLayout.removeLayoutComponent( comp );
106    }
107
108    public void addLayoutComponent( Component comp, Object constraints )
109    {
110        String componentName = (String) constraints;
111        CellConstraints cellConstraints = (CellConstraints) componentConstraints.get( componentName );
112        if ( cellConstraints == null )
113        {
114            System.err.println( "Warning: " + componentName + " was added without constraints" );
115            cellConstraints = new CellConstraints();
116            componentConstraints.put( componentName, cellConstraints );
117            comp.setVisible( false );
118        }
119        componentsToNames.put( comp, componentName );
120        formLayout.addLayoutComponent( comp, cellConstraints );
121    }
122}