import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.Vector;

/**
 * Title:        WaterMixApplet
 * Description:  Mixing water with Fuzzy Logic
 * Copyright:    Copyright (c) 2001
 * @author S. Robl <stefan@qdev.de>, A. Heinze <mail@aheinze.de>
 * @version 1.0
 */

public class panTemperature extends JPanel 
{
  private myDebug debug = new myDebug(7);
  private Vector vecTemp = new Vector(1,1);
  private double targetTemp=0;

  private Color colBack=new Color(255,255,255);
  private Color colFont=new Color(0,0,0);
  private Color colTemp=new Color(0,0,200);
  private Color colTargetTemp=new Color(0,0,0);

  public panTemperature() 
  {
    try 
    {
      jbInit();
    }
    catch(Exception ex) 
    {
      ex.printStackTrace();
    }
  }

  public void reset() 
  {
    vecTemp.clear();
  }

  public void addTemperature(double value) 
  {
    vecTemp.addElement(new Double(value));
  }

  public void setTargetTemperature(double value) 
  {
    targetTemp=value;
  }

  void jbInit() throws Exception 
  {
    this.setLayout(null);
  }

  private String format(double value) 
  {
    return new Double(((int)(value*10))/10.0).toString();
  }

  /**
  * draws the temperature-chart
  * @param miccount current number of microbes
  */
  public void paint(Graphics g) 
  {
    debug.Write("panTemp.paint(..)",0);
    
    if (g==null) 
      return;

    this.setForeground(Color.black);
    g.drawRect(0,0,this.getWidth()-1,this.getHeight()-1);

    g.setColor(colBack);
    g.fillRect(1, 1, this.getWidth()-2, this.getHeight()-2);

    // search for the biggest value
    double max=0, min=200;
    
    if (vecTemp.size()==0)
      return;
    
    for (int i=0;i<vecTemp.size();i++) 
    {
      double val=((Double)vecTemp.elementAt(i)).doubleValue();
      if(val>max) max=val;
      if(val<min) min=val;
    }

    if (targetTemp<min) min=targetTemp;
    if (targetTemp>max) max=targetTemp;
    min=min-(min*0.1);
    max=max*1.1;
    double delta=max-min;

    debug.Write("panTemperature  min, max:" +format(min) + " " + format(max),6);

    g.setColor(colFont);
    g.setFont(new Font("Arial",0,10));

    g.drawString(format(max),5,15);
    g.drawString(format(min),5,this.getHeight()-5);
    String str="Temperature";
    g.drawString(str,(this.getWidth()-g.getFontMetrics().stringWidth(str)-5),10);

    int steps=this.getWidth()/25;
    double height=this.getHeight();

    g.setColor(colTargetTemp);
    int h=(int)(height-((targetTemp-min)/delta)*height);
    g.drawLine(0,h,this.getWidth(),h);

    g.setColor(colTemp);
    if (vecTemp.size()>0) 
    {
      for (int i=1;i<vecTemp.size();i++)
      {
        double y1=height-(((((Double)vecTemp.elementAt(i-1)).doubleValue())-min)/delta)*height;
        double y2=height-(((((Double)vecTemp.elementAt(i)).doubleValue())-min)/delta)*height;
        g.drawLine((i-1)*steps,(int)y1,i*steps,(int)y2);
      }
    }
  }
}
