package jdraw.std;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

import jdraw.framework.*;


public class ToolButton extends JButton 
					implements MouseListener, MouseMotionListener {
					
	private Icon icon;
	private DrawEditor editor;
	private DrawTool  tool;
	private int state;	// incremented by enter/down
						// released by exit/up
	private boolean selected;
	
	private int width;
	private int height;

	public ToolButton(String text, Icon icon, final DrawTool tool, final DrawEditor editor){
		this.tool   = tool;
		this.editor = editor;
		this.icon = icon;
		this.width  = icon.getIconWidth();
		this.height = icon.getIconHeight();
		
		addMouseListener(this);
		addMouseMotionListener(this);
		
		setPreferredSize(new Dimension(width, height));
		setMinimumSize(new Dimension(width, height));
		setMaximumSize(new Dimension(width, height));
		
		setToolTipText(text);
		
	}
		
	public void paint(Graphics g){
		if(!selected){
			icon.paintIcon(this, g, 0, 0);
			if(state>0){
				int w = icon.getIconWidth()-1;
				int h = icon.getIconHeight()-1;
				g.setColor(state==1?Color.white:Color.gray);
				g.drawLine(0, 0, w, 0);
				g.drawLine(0, 0, 0, h);
				g.setColor(state==2?Color.white:Color.gray);
				g.drawLine(0, h, w, h);
				g.drawLine(w, 0, w, h);
			}
		}
		else { // selected
			if(state==2)
				icon.paintIcon(this, g, 1, 1);
			else
				icon.paintIcon(this, g, 0, 0);
				
			int w = icon.getIconWidth()-1;
			int h = icon.getIconHeight()-1;
			g.setColor(Color.gray);
			g.drawLine(0, 0, w, 0);
			g.drawLine(0, 0, 0, h);
			g.setColor(Color.white);
			g.drawLine(0, h, w, h);
			g.drawLine(w, 0, w, h);
		}
	}
	
	public void mouseClicked(MouseEvent e){}
	public void mouseEntered(MouseEvent e){
		state++;
		repaint();
	}
	public void mouseExited(MouseEvent e){
		state--;
		repaint();
	}
	public void mousePressed(MouseEvent e){
		state++;
		repaint();
	}
	public void mouseReleased(MouseEvent e){
		state--;
		repaint();
	}
	
	public void mouseDragged(MouseEvent e){}
	public void mouseMoved(MouseEvent e){}
	
	public void checkState(){
		selected = 
			//tool.getClass().equals(editor.getView().getTool().getClass());
			tool.equals(editor.getView().getTool());
	}
}

