/*
 * GUIUtil.java
 *
 * Created on September 11, 2007, 10:54 PM
 *
 */
package edu.oregonstate.cartography.gui;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.Frame;
import javax.swing.JComponent;

/**
 *
 * @author Bernhard Jenny, Institute of Cartography, ETH Zurich
 */
public class GUIUtil {

    public static Frame getOwnerFrame(Component component) {
        while ((component != null) && !(component instanceof Frame)) {
            component = component.getParent();
        }
        return ((Frame) component);
    }

    /**
     * Returns the front most Frame. If possible, the Frame that currently has
     * the focus and is visible is returned.
     * @return The frontmost Frame or null if no Frame can be found.
     */
    public static Frame getFrontMostFrame() {

        // search visible window which is focused
        Frame[] frames = Frame.getFrames();
        for (int i = 0; i < frames.length; i++) {
            Frame frame = frames[i];
            if (frame != null && frame.isVisible() && frame.isFocused()) {
                return frame;
            }
        }

        // search visible window
        frames = Frame.getFrames();
        for (int i = 0; i < frames.length; i++) {
            Frame frame = frames[i];
            if (frame != null && frame.isVisible()) {
                return frame;
            }
        }

        // search window
        frames = Frame.getFrames();
        for (int i = 0; i < frames.length; i++) {
            Frame frame = frames[i];
            if (frame != null) {
                return frame;
            }
        }

        return null;
    }

    /**
     * Returns the preferred dimensions of a component, using the current height
     * and a custom width.
     * @param component The component providing the preferred height.
     * @param width The preferred width.
     * @return The preferred dimension.
     */
    public static Dimension getPreferredSize(JComponent component, int width) {
        Dimension dim = component.getPreferredSize();
        return new Dimension(width, dim.height);
    }
    public static void setPreferredWidth(JComponent component, int width) {
        component.setPreferredSize(getPreferredSize(component, width));
    }

    public static void setMinimumWidth(JComponent component, int minWidth) {
        Dimension dim = component.getMinimumSize();
        dim = new Dimension(minWidth, dim.height);
        component.setMinimumSize(dim);
    }
}