/*
	A basic extension of the java.applet.Applet class
 */

import java.awt.*;
import java.applet.*;

public class ColorChooser extends Applet
{
	public void init()
	{
		// This code is automatically generated by Visual Cafe when you add
		// components to the visual environment. It instantiates and initializes
		// the components. To modify the code, only use code syntax that matches
		// what Visual Cafe can generate, or Visual Cafe may be unable to back
		// parse your Java file into its visual environment.
		//{{INIT_CONTROLS
		setLayout(null);
		setBackground(java.awt.Color.black);
		setForeground(java.awt.Color.white);
		setFont(new Font("SansSerif", Font.PLAIN, 12));
		setSize(426,287);
		setVisible(false);
		add(redScroll);
		redScroll.setBounds(216,12,144,24);
		redLabel.setText("Red");
		redLabel.setAlignment(java.awt.Label.CENTER);
		add(redLabel);
		redLabel.setForeground(java.awt.Color.red);
		redLabel.setFont(new Font("SansSerif", Font.BOLD, 12));
		redLabel.setBounds(216,36,204,24);
		redText.setText("0");
		add(redText);
		redText.setBackground(java.awt.Color.white);
		redText.setForeground(java.awt.Color.red);
		redText.setBounds(372,12,48,24);
		add(greenScroll);
		greenScroll.setBounds(216,72,144,24);
		greenText.setText("0");
		add(greenText);
		greenText.setBackground(java.awt.Color.white);
		greenText.setForeground(java.awt.Color.green);
		greenText.setBounds(372,72,48,24);
		greenLabel.setText("Green");
		greenLabel.setAlignment(java.awt.Label.CENTER);
		add(greenLabel);
		greenLabel.setForeground(java.awt.Color.green);
		greenLabel.setFont(new Font("SansSerif", Font.BOLD, 12));
		greenLabel.setBounds(216,96,204,24);
		add(blueScroll);
		blueScroll.setBounds(216,132,144,24);
		blueText.setText("0");
		add(blueText);
		blueText.setBackground(java.awt.Color.white);
		blueText.setForeground(java.awt.Color.blue);
		blueText.setBounds(372,132,48,24);
		blueLabel.setText("Blue");
		blueLabel.setAlignment(java.awt.Label.CENTER);
		add(blueLabel);
		blueLabel.setForeground(java.awt.Color.blue);
		blueLabel.setFont(new Font("SansSerif", Font.BOLD, 12));
		blueLabel.setBounds(216,156,204,24);
		redTrue.setEditable(false);
		add(redTrue);
		redTrue.setBackground(java.awt.Color.white);
		redTrue.setForeground(java.awt.Color.red);
		redTrue.setBounds(216,204,48,24);
		redTrue.setVisible(false);
		greenTrue.setEditable(false);
		add(greenTrue);
		greenTrue.setBackground(java.awt.Color.white);
		greenTrue.setForeground(java.awt.Color.green);
		greenTrue.setBounds(294,204,48,24);
		greenTrue.setVisible(false);
		blueTrue.setEditable(false);
		add(blueTrue);
		blueTrue.setBackground(java.awt.Color.white);
		blueTrue.setForeground(java.awt.Color.blue);
		blueTrue.setBounds(372,204,48,24);
		blueTrue.setVisible(false);
		redTLabel.setText("Red");
		redTLabel.setAlignment(java.awt.Label.CENTER);
		add(redTLabel);
		redTLabel.setForeground(java.awt.Color.red);
		redTLabel.setFont(new Font("SansSerif", Font.BOLD, 12));
		redTLabel.setBounds(216,228,48,24);
		redTLabel.setVisible(false);
		greenTLabel.setText("Green");
		greenTLabel.setAlignment(java.awt.Label.CENTER);
		add(greenTLabel);
		greenTLabel.setForeground(java.awt.Color.green);
		greenTLabel.setFont(new Font("SansSerif", Font.BOLD, 12));
		greenTLabel.setBounds(294,228,48,24);
		greenTLabel.setVisible(false);
		blueTLabel.setText("Blue");
		blueTLabel.setAlignment(java.awt.Label.CENTER);
		add(blueTLabel);
		blueTLabel.setForeground(java.awt.Color.blue);
		blueTLabel.setFont(new Font("SansSerif", Font.BOLD, 12));
		blueTLabel.setBounds(372,228,48,24);
		blueTLabel.setVisible(false);
		button.setLabel("Show Color");
		add(button);
		button.setBackground(java.awt.Color.lightGray);
		button.setBounds(276,252,84,24);
		//}}
		
		// Fix for some browsers' nasty Java implementation.
		blueScroll.setValue(260);
		if ( blueScroll.getValue() == 260 )
		{
		    redScroll.setMaximum(255);
		    greenScroll.setMaximum(255);
		    blueScroll.setMaximum(255);
		}
		blueScroll.setValue(0);
		
		canvas.setBounds(50, 0, 150, 287);
		add(canvas);
		
		match.setColor((int)(Math.random() * 256),
		               (int)(Math.random() * 256),
		               (int)(Math.random() * 256));
		match.setBounds(0, 0, 50, 287);
		add(match);
		
		redTrue.setText(Integer.toString(match.getRed()));
		greenTrue.setText(Integer.toString(match.getGreen()));
		blueTrue.setText(Integer.toString(match.getBlue()));
	
		//{{REGISTER_LISTENERS
		SymAdjustment lSymAdjustment = new SymAdjustment();
		blueScroll.addAdjustmentListener(lSymAdjustment);
		greenScroll.addAdjustmentListener(lSymAdjustment);
		redScroll.addAdjustmentListener(lSymAdjustment);
		SymText lSymText = new SymText();
		greenText.addTextListener(lSymText);
		blueText.addTextListener(lSymText);
		redText.addTextListener(lSymText);
		SymFocus aSymFocus = new SymFocus();
		redText.addFocusListener(aSymFocus);
		greenText.addFocusListener(aSymFocus);
		blueText.addFocusListener(aSymFocus);
		SymAction lSymAction = new SymAction();
		button.addActionListener(lSymAction);
		//}}
	}
	
	//{{DECLARE_CONTROLS
	java.awt.Scrollbar redScroll = new java.awt.Scrollbar(Scrollbar.HORIZONTAL,0,10,0,265);
	java.awt.Label redLabel = new java.awt.Label();
	java.awt.TextField redText = new java.awt.TextField();
	java.awt.Scrollbar greenScroll = new java.awt.Scrollbar(Scrollbar.HORIZONTAL,0,10,0,265);
	java.awt.TextField greenText = new java.awt.TextField();
	java.awt.Label greenLabel = new java.awt.Label();
	java.awt.Scrollbar blueScroll = new java.awt.Scrollbar(Scrollbar.HORIZONTAL,0,10,0,265);
	java.awt.TextField blueText = new java.awt.TextField();
	java.awt.Label blueLabel = new java.awt.Label();
	java.awt.TextField redTrue = new java.awt.TextField();
	java.awt.TextField greenTrue = new java.awt.TextField();
	java.awt.TextField blueTrue = new java.awt.TextField();
	java.awt.Label redTLabel = new java.awt.Label();
	java.awt.Label greenTLabel = new java.awt.Label();
	java.awt.Label blueTLabel = new java.awt.Label();
	java.awt.Button button = new java.awt.Button();
	//}}
	
	ShadeComponent canvas = new ShadeComponent(0, 0, 0);
	ShadeComponent match = new ShadeComponent(0, 0, 0);
	
	public void update(Graphics g)
	{
	    paint(g);
	}

	class SymAdjustment implements java.awt.event.AdjustmentListener
	{
		public void adjustmentValueChanged(java.awt.event.AdjustmentEvent event)
		{
			Object object = event.getSource();
			if (object == blueScroll)
				doAdjustmentValueChanged(blueText, blueScroll);
			else if (object == greenScroll)
				doAdjustmentValueChanged(greenText, greenScroll);
			else if (object == redScroll)
				doAdjustmentValueChanged(redText, redScroll);
		}
	}

	void doAdjustmentValueChanged(java.awt.TextField tfield,
	                              java.awt.Scrollbar scroll)
	{
		tfield.setText(Integer.toString(scroll.getValue()));
		canvas.setColor(redScroll.getValue(), greenScroll.getValue(), blueScroll.getValue());
	}

	class SymText implements java.awt.event.TextListener
	{
		public void textValueChanged(java.awt.event.TextEvent event)
		{
			Object object = event.getSource();
			if (object == greenText)
				doTextValueChanged(greenText, greenScroll);
			else if (object == blueText)
				doTextValueChanged(blueText, blueScroll);
			else if (object == redText)
				doTextValueChanged(redText, redScroll);
		}
	}

	void doTextValueChanged(java.awt.TextField tfield,
	                        java.awt.Scrollbar scroll)
	{
	    int i;

	    try {
	        i = Integer.parseInt(tfield.getText());
	    } catch (Exception e) {
	        return;
	    }
	    
        if ( i < 0 )
            i = 0;
        else if ( i > 255 )
            i = 255;

        scroll.setValue(i);
		canvas.setColor(redScroll.getValue(),
		                greenScroll.getValue(),
		                blueScroll.getValue());
	}

	class SymFocus extends java.awt.event.FocusAdapter
	{
		public void focusGained(java.awt.event.FocusEvent event)
		{
			Object object = event.getSource();
			if (object == redText)
				doFocusGained(redText);
			else if (object == greenText)
				doFocusGained(greenText);
			else if (object == blueText)
				doFocusGained(blueText);
		}

		public void focusLost(java.awt.event.FocusEvent event)
		{
			Object object = event.getSource();
			if (object == redText)
				doFocusLost(redText, redScroll);
			else if (object == greenText)
				doFocusLost(greenText, greenScroll);
			else if (object == blueText)
				doFocusLost(blueText, blueScroll);
		}
	}

	void doFocusLost(java.awt.TextField tfield,
	                 java.awt.Scrollbar scroll)
	{
	    int i;

	    try {
	        i = Integer.parseInt(tfield.getText());
	    } catch (Exception e) {
	        tfield.setText(Integer.toString(scroll.getValue()));
	        return;
	    }

        if ( i < 0 )
            i = 0;
        else if ( i > 255 )
            i = 255;

	    tfield.setText(Integer.toString(i));
	}

	void doFocusGained(java.awt.TextField tfield)
	{
	    tfield.selectAll();
	}

	class SymAction implements java.awt.event.ActionListener
	{
		public void actionPerformed(java.awt.event.ActionEvent event)
		{
			Object object = event.getSource();
			if (object == button)
				button_ActionPerformed(event);
		}
	}

	void button_ActionPerformed(java.awt.event.ActionEvent event)
	{
	    if ( redTrue.isVisible() )
	    {
	        redTrue.setVisible(false);
    	    greenTrue.setVisible(false);
	        blueTrue.setVisible(false);
	        redTLabel.setVisible(false);
    	    greenTLabel.setVisible(false);
	        blueTLabel.setVisible(false);
	        button.setLabel("Show Color");
	        
    		match.setColor((int)(Math.random() * 256),
		                   (int)(Math.random() * 256),
	    	               (int)(Math.random() * 256));
		
    		redTrue.setText(Integer.toString(match.getRed()));
	    	greenTrue.setText(Integer.toString(match.getGreen()));
		    blueTrue.setText(Integer.toString(match.getBlue()));
	    }
	    else
	    {
	        redTrue.setVisible(true);
    	    greenTrue.setVisible(true);
	        blueTrue.setVisible(true);
	        redTLabel.setVisible(true);
    	    greenTLabel.setVisible(true);
	        blueTLabel.setVisible(true);
	        button.setLabel("New Color");
	    }
	}
}
