All Downloads are FREE. Search and download functionalities are using the official Maven repository.

tools.tracesviewer.PercentLayout Maven / Gradle / Ivy

There is a newer version: 1.3.0-91
Show newest version
package tools.tracesviewer;

import java.awt.*;
import java.util.*;

/**
 * Lays out components within a Container such that each component takes a fixed percentage of the size.
 *
 * Each Component added to the Container must have a Constraint object that specifies what proportion
 * of the container it will fill. The Component will be stretched to fill exactly that percentage.
 *
 * @see Constraint
 */
public class PercentLayout implements LayoutManager2 {
    public void addLayoutComponent(Component component, Object constraint) {
        if (constraint instanceof PercentLayoutConstraint) {
            hash.put(component, constraint);
        } else {
            throw new IllegalArgumentException("Invalid constraint");

        }
    }
    public void addLayoutComponent(String constraint, Component comp) {
        throw new IllegalArgumentException("Invalid constraint");
    }
    public void removeLayoutComponent(Component component) {
        hash.remove(component);
    }

    public Dimension preferredLayoutSize(Container p1) {
        int prefx = 0;
        int prefy = 0;

        Enumeration keys = hash.keys();
        while (keys.hasMoreElements()) {
            Component comp = (Component) keys.nextElement();
            PercentLayoutConstraint constraint =
                (PercentLayoutConstraint) hash.get(comp);
            Dimension pref = comp.getPreferredSize();
            prefx += pref.width * 100 / constraint.width;
            prefy += pref.height * 100 / constraint.height;
        }
        int n = hash.size();
        return new Dimension(prefx / n, prefy / n);
    }
    public Dimension minimumLayoutSize(Container p1) {
        int minx = 0;
        int miny = 0;

        Enumeration keys = hash.keys();
        while (keys.hasMoreElements()) {
            Component comp = (Component) keys.nextElement();
            PercentLayoutConstraint constraint =
                (PercentLayoutConstraint) hash.get(comp);
            Dimension min = comp.getMinimumSize();
            int mx = (int) (min.width * 100 / constraint.width);
            int my = (int) (min.height * 100 / constraint.height);
            if (mx > minx)
                minx = mx;
            if (my > miny)
                miny = my;
        }
        return new Dimension(minx, miny);
    }
    public Dimension maximumLayoutSize(Container p1) {
        int maxx = Integer.MAX_VALUE;
        int maxy = Integer.MAX_VALUE;

        Enumeration keys = hash.keys();
        while (keys.hasMoreElements()) {
            Component comp = (Component) keys.nextElement();
            PercentLayoutConstraint constraint =
                (PercentLayoutConstraint) hash.get(comp);
            Dimension max = comp.getMaximumSize();
            int mx =
                max.width == Integer.MAX_VALUE
                    ? max.width
                    : (int) (max.width * 100 / constraint.width);
            int my =
                max.height == Integer.MAX_VALUE
                    ? max.height
                    : (int) (max.height * 100 / constraint.height);
            if (mx < maxx)
                maxx = mx;
            if (my < maxy)
                maxy = my;
        }
        return new Dimension(maxx, maxy);
    }
    public void layoutContainer(Container p1) {
        Dimension size = p1.getSize();
        Enumeration keys = hash.keys();
        while (keys.hasMoreElements()) {
            Component comp = (Component) keys.nextElement();
            PercentLayoutConstraint constraint =
                (PercentLayoutConstraint) hash.get(comp);
            int x = (int) (size.width * constraint.x / 100);
            int y = (int) (size.height * constraint.y / 100);
            int width = (int) (size.width * constraint.width / 100);
            int height = (int) (size.height * constraint.height / 100);
            comp.setBounds(x, y, width, height);
        }
    }
    public void invalidateLayout(Container p1) {
    }
    public float getLayoutAlignmentY(Container p1) {
        return 0.5f;
    }
    public float getLayoutAlignmentX(Container p1) {
        return 0.5f;
    }

    private Hashtable hash = new Hashtable();

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy