package SesameGUI;

import java.awt.Graphics2D;
import java.awt.*;
import java.awt.geom.*;
import java.text.NumberFormat;
import java.awt.font.FontRenderContext;

public class HorizontalScale extends Scale
	{
	public HorizontalScale(SpectrumView view)
		{
		super(view);
		}

	public void draw(Graphics2D g)
		{
		g.setPaint(Color.gray);

		DoubleWrapper iter     = new DoubleWrapper();
		DoubleWrapper paneStep = new DoubleWrapper();
		DoubleWrapper xOrigin  = new DoubleWrapper();

		iter.value = getLowerVisibleBound();
		paneStep.value = getStep();
		xOrigin.value = getView().getScaleY().getOrigin() * (-1.0);

		real2Pane(paneStep);
    getView().getScaleY().real2Pane(xOrigin);

		//xOrigin.value = getView().getBottomMargin() + ((getView().getTopMargin() - getView().getBottomMargin()) / 2);
    xOrigin.value = getView().getBottomMargin() + xOrigin.value;

		//g.draw(new Line2D.Double(getView().getLeftMargin(), xOrigin.value, getView().getRightMargin(), xOrigin.value));

		// draw tickers
		int i;
		double offset;

		offset = getView().getWidth() / 5.0;

		for (i = 1; i <= 4; i++)
			{
            if (isShowGrid())
				{
                g.draw(new Line2D.Double(i * offset, getView().getBottomMargin(), i * offset, getView().getTopMargin()));
				}
            else
	            {
				g.draw(new Line2D.Double(i * offset, getView().getBottomMargin(), i * offset, getView().getBottomMargin() + 5));
				g.draw(new Line2D.Double(i * offset, getView().getTopMargin(), i * offset, getView().getTopMargin() - 5));
	            }
			}

		g.setPaint(Color.black);
		}

	public void pane2Real(DoubleWrapper paneCoord)
		{
		setFactor(getLength() / (getView().getRightMargin() - getView().getLeftMargin()));
		paneCoord.value = (paneCoord.value * getFactor()) + getLowerVisibleBound();
		}

	public void real2PaneAbsolute(DoubleWrapper realCoord)
		{
		setFactor(getLength() / (getView().getRightMargin() - getView().getLeftMargin()));
		realCoord.value /= getFactor();
		}

	public void real2Pane(DoubleWrapper realCoord)
		{
		real2PaneAbsolute(realCoord);
		realCoord.value += getView().getLeftMargin();
		}

	public double getOrigin()
		{
		double ret = 0.0;

		ret = (getFactor() * getLowerVisibleBound());

		return ret;
		}

	public double getLength()
		{
		return getUpperVisibleBound() - getLowerVisibleBound();
		}

  public int getRealLength ()
    {
    return getView().getRightMargin() - getView().getLeftMargin();
    }
  }
