/*
 * Created on Nov 17, 2006
 *
 */
package com.meapsoft.visualizer;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.geom.AffineTransform;

import javax.swing.JPanel;

/**
 * @author douglas
 */
public class DrawingPanel extends JPanel// implements ActionListener
{
	Renderer renderer;
    
    private double h_zoom = 1.0;
    private double v_zoom = 1.0;
	private Dimension preferred;
    private Dimension minimum;

	public DrawingPanel(Renderer renderer)
	{
        setPreferredSize(new Dimension(800, 600));

		this.renderer = renderer;

        this.preferred = super.getPreferredSize();
        this.minimum = super.getMinimumSize();
	}

	void SetRenderer(Renderer renderer)
	{
		this.renderer = renderer;
		//System.out.println("using: " + this.visualizer.name);
		repaint();
	}

 	public void paintComponent(Graphics g)
    {
   		renderer.draw(g, getWidth(), getHeight());
 	}

	public void paint(Graphics g) 
    {
        Graphics2D g2 = (Graphics2D)g;
        AffineTransform oldTransform = g2.getTransform();
        AffineTransform transform = 
            AffineTransform.getScaleInstance(h_zoom, v_zoom);
        g2.setTransform(transform);
        super.paint(g);
        g2.setTransform(oldTransform);
    }

    public Dimension getPreferredSize() 
    {
        return new Dimension((int)(preferred.width * h_zoom), 
                             (int)(preferred.height * v_zoom));
    }

    public Dimension getMinimumSize() 
    {
        return new Dimension((int)(minimum.width * h_zoom), 
                             (int)(minimum.height * v_zoom));
    }

    public void setHorizontalZoom(double zoom)
    {
        h_zoom = zoom;

        // so JScrollPane gets notified of the new size:
        setPreferredSize(getPreferredSize());
        revalidate();
        repaint();
    }

    public double getHorizontalZoom()
    {
        return h_zoom;
    }

    public void setVerticalZoom(double zoom)
    {
        v_zoom = zoom;

        // so JScrollPane gets notified of the new size:
        setPreferredSize(getPreferredSize());
        revalidate();
        repaint();
    }
	
    public double getVerticalZoom()
    {
        return v_zoom;
    }


    /**
     * Transform a point's coordinates so it takes this panel's
     * zoom state into account.
     */
    public void transformPoint(Point p)
    {
        p.setLocation(p.getX()/h_zoom, p.getY()/v_zoom);
    }
    
/*
	public void actionPerformed(ActionEvent arg0)
	{
		renderer.updateParameters(arg0);
		repaint();
	}
*/
}
