package org.lucci.madhoc.gui.aircraft;
import java.awt.Dimension;
import java.util.ConcurrentModificationException;

import org.lucci.up.Graphics2DPlotter;
import org.lucci.up.InteractiveSwingPlotter;
import org.lucci.up.system.Space;

public class AirCraftViewPlotter extends InteractiveSwingPlotter
{
    public AirCraftViewPlotter(final AircraftView view)
    {
        setGraphics2DPlotter(new Graphics2DPlotter()
                {
                    public void updateFigureRightBeforePainting()
                    {
                        try
                        {
                            setFigure(view.createNetworkFigure(view.getMonitor().getNetwork()));
                        }
                        catch (ConcurrentModificationException ex)
                        {
                            System.err.println("The connection graph showed in the aircraft view might have non-represented links (only for this iteration).");
                        }
                    }
                });

        Space space = getGraphics2DPlotter().getSpace();

        space.getXDimension().setBorder(0.05);
        space.getYDimension().setBorder(0.05);
        space.getXDimension().setBounds(0, view.getMonitor().getNetwork().getNetworkEnvironment().getGrid().getEdgeLenght());
        space.getYDimension().setBounds(0, view.getMonitor().getNetwork().getNetworkEnvironment().getGrid().getEdgeLenght());

        space.getXDimension().getLegend().setVisible(false);
        space.getYDimension().getLegend().setVisible(false);

        space.getXDimension().getLowerBoundAxis().setVisible(false);
        space.getXDimension().getOriginAxis().setVisible(false);
        space.getYDimension().getLowerBoundAxis().setVisible(false);
        space.getYDimension().getOriginAxis().setVisible(false);
        space.getLegend().setVisible(false);

        space.getXDimension().getUpperBoundAxis().getLine().getArrow().setVisible(false);
        setImageBufferedUsed(true);
    }

    /*
     * Force the display area to be a square.
     */
    public Dimension getPreferredSize()
    {
        Dimension dimension = (Dimension) getParent().getSize().clone();

        if (dimension.height < dimension.width)
        {
            dimension.width = dimension.height;
        }
        else
        {
            dimension.height = dimension.width;
        }

        return dimension;
    }
}