////////////////////////////////////////
// 49104 øv.6 opg.1: 1998-10-21
//
// FarveTest, sammenligning af farver

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class ColorTest extends Applet implements ActionListener, AdjustmentListener
{
	// Konstanter
	final String SET_COLOR  = "Sæt Farve";
	final String NEW_TEST   = "Ny Test";
	final String COMPARE    = "Sammenlign";
	final String RED        = "Rød";
	final String GREEN      = "Grøn";
	final String BLUE       = "Blå";
	final String RESULT     = "Resultat: ";
	final int MAX_INTENSITY = 255;
	final int MIN_INTENSITY = 0;

	// Interne felter til at holde resultat-værdi og nuværende værdi af farver
	private int Red       =0;
	private int Green     =0;
	private int Blue      =0;
	private int userRed   =0;
	private int userGreen =0;
	private int userBlue  =0;

	// Komponenter til brugerinterface
	private Button bNewColor = new Button(NEW_TEST);
	private Button bCompare  = new Button(COMPARE);
	private Label lResult    = new Label();
	private Scrollbar sRed   = new Scrollbar(Scrollbar.HORIZONTAL,  0,64 ,MIN_INTENSITY,MAX_INTENSITY+64); // Det ser ud til at der er fejl i JDK's dokumentation!
	private Scrollbar sGreen = new Scrollbar(Scrollbar.HORIZONTAL,0,64,MIN_INTENSITY,MAX_INTENSITY+64);
	private Scrollbar sBlue  = new Scrollbar(Scrollbar.HORIZONTAL, 0,64	,MIN_INTENSITY,MAX_INTENSITY+64);


	public ColorTest()
	{
	}


	public String getAppletInfo()
	{
		return "Name: ColorTest\r\n" +
		       "Author: Mikael and Rune\r\n" +
		       "Created with Hard Work!";
	}


	public void init()
	{
		// Opsæt applets størrelse
   	resize(420, 240);
   	
		// Klargør ActionListener og størrelse på knapper
		bNewColor.addActionListener(this);
		bCompare.addActionListener(this);
		bNewColor.setBounds(180,100,70,20);
		bCompare.setBounds(270, 100,80,20);

		// Klargør AdjustmentListener og størrelse på scrollbars (opdateringer af scrollbar)
		sRed.addAdjustmentListener(this);
		sGreen.addAdjustmentListener(this);
		sBlue.addAdjustmentListener(this);
		setLayout(null);
		sRed.setBounds(200,10,100,16);
		sGreen.setBounds(200,40,100,16);
		sBlue.setBounds(200,70,100,16);

		// Generer resultat Label
		lResult = new Label();
		lResult.setBounds(180,130,280,20);

		// Tilføj knapper til applet's vindue
		add(bNewColor);
		add(bCompare);
		add(sRed);
		add(sGreen);
		add(sBlue);
		add(lResult);

		// Lav tilfældig farve
		SetRandomColors();
	}


	// Tegn de to farvede bokse
	public void paint(Graphics g)
	{
		// Det ville nok have været en bedre løsning at bruge 4 panels
		// lagt på et GridLayout (2x2), men dette virker!
		g.setColor(new Color(userRed, userGreen, userBlue));
		g.fillRect(0,0,160,120);
		g.setColor(new Color(Red, Green, Blue));
		g.fillRect(0,120,160,240);
	}


	// Lav en tilfældig farve
	protected void SetRandomColors()
	{
		Red = (int) (Math.random()*MAX_INTENSITY);
		Green = (int) (Math.random()*MAX_INTENSITY);
		Blue = (int) (Math.random()*MAX_INTENSITY);
	}


	// En knap trykkes
	public void actionPerformed(ActionEvent e)
	{
		if (e.getSource()==bNewColor) OnNewColorClick();
		if (e.getSource()==bCompare) OnCompareClick();
	}


	// NewColor knappen blev trykket - sæt ny farve og gentegn billede
	public void OnNewColorClick()
	{
		SetRandomColors();
		repaint();
	}


	// Compare knappen blev trykket - sammenlign farver og udskriv resultat
	public void OnCompareClick()
	{
		lResult.setText(RESULT+"  "+RED+": "+(userRed-Red)+"  "+GREEN+": "+(userGreen-Green)+"  "+BLUE+": "+(userBlue-Blue));
	}


	// En eller anden Scrollbar blev rykket - opdater user* felter og gentegn
	public void adjustmentValueChanged(AdjustmentEvent e)
	{
		if (e.getSource()==sRed) 
		{
			userRed=e.getValue();
		} else
		if (e.getSource()==sGreen) 
		{
			userGreen=e.getValue();
		} else
		if (e.getSource()==sBlue) 
		{
			userBlue=e.getValue();
		}	
		repaint();
	}


	public void start()
	{
	}
	public void stop()
	{
	}
	public void destroy()
	{
	}

}
