package org.buzztroll.mud;

import java.lang.*;
import java.awt.*;
import java.net.*;
import java.io.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;


public class
ColorPanel
    extends JPanel
    implements ChangeListener
{
    protected JSlider               redSlider;
    protected JSlider               greenSlider;
    protected JSlider               blueSlider;

    protected JLabel                redLabel;
    protected JLabel                greenLabel;
    protected JLabel                blueLabel;

    protected JPanel                displayC;

    public
    ColorPanel()
    {
        super();

        JPanel                      tempP;
        JPanel                      tempP2;

        tempP = new JPanel();
        tempP.setLayout(new GridLayout(1, 3, 5, 5));

        redLabel = new JLabel("255");
        greenLabel = new JLabel("255");
        blueLabel = new JLabel("255");
        
        redSlider = new JSlider(JSlider.VERTICAL, 0, 255, 255);
        greenSlider = new JSlider(JSlider.VERTICAL, 0, 255, 255);
        blueSlider = new JSlider(JSlider.VERTICAL, 0, 255, 255);

        tempP2 = new JPanel();
        tempP2.setLayout(new BorderLayout());
        tempP2.add("North", new JLabel("red"));
        tempP2.add("Center", redSlider);
        tempP2.add("South", redLabel);
        tempP.add(tempP2);

        tempP2 = new JPanel();
        tempP2.setLayout(new BorderLayout());
        tempP2.add("North", new JLabel("green"));
        tempP2.add("Center", greenSlider);
        tempP2.add("South", greenLabel);
        tempP.add(tempP2);

        tempP2 = new JPanel();
        tempP2.setLayout(new BorderLayout());
        tempP2.add("North", new JLabel("blue"));
        tempP2.add("Center", blueSlider);
        tempP2.add("South", blueLabel);
        tempP.add(tempP2);

        displayC = new JPanel();
        displayC.setBorder(new EtchedBorder(EtchedBorder.RAISED));

        this.setLayout(new BorderLayout());
        this.add("Center", tempP);
        this.add("South", displayC);

        redSlider.addChangeListener(this);
        greenSlider.addChangeListener(this);
        blueSlider.addChangeListener(this);
    }

    public int
    getRed()
    {
        return this.redSlider.getValue();
    }

    public int
    getGreen()
    {
        return this.greenSlider.getValue();
    }

    public int
    getBlue()
    {
        return this.blueSlider.getValue();
    }

    public Color
    getColor()
    {
        return new Color(this.getRed(), this.getGreen(), this.getBlue());
    }

    public void
    addChangeListener(
        ChangeListener                      cl)
    {
        this.redSlider.addChangeListener(cl);
        this.greenSlider.addChangeListener(cl);
        this.blueSlider.addChangeListener(cl);
    }

    public void 
    stateChanged(
        ChangeEvent                         e)
    {
        JSlider                             js;
        String                              s;

        if(this.redSlider == e.getSource())
        {
            s = new Integer(this.redSlider.getValue()).toString();
            s = s.concat("   ").substring(0, 3);
            this.redLabel.setText(s);
        }
        else if(this.greenSlider == e.getSource())
        {
            s = new Integer(this.greenSlider.getValue()).toString();
            s = s.concat("   ").substring(0, 3);
            this.greenLabel.setText(s);
        }
        else if(this.blueSlider == e.getSource())
        {
            s = new Integer(this.blueSlider.getValue()).toString();
            s = s.concat("   ").substring(0, 3);
            this.blueLabel.setText(s);
        }

        Color c = new Color(this.redSlider.getValue(), 
                        this.greenSlider.getValue(), 
                        this.blueSlider.getValue());

        displayC.setBackground(c);
    }
}