import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.ImageIcon;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

/**
 * SubToolBox contains special features for certain differnet tools. Such as 
 * setting the line width, setting the radius of the spray, choosing a brush,
 * selecting whether you want to draw a normal, outline or filled shape.
 */
public class SubToolBox extends JPanel
{
	private JButton current;
	
	/** Creates a default SubToolBox. **/
	public SubToolBox()
	{
		// sets the default stuff and then starts off the choose panel method
		setSize(40,66);
		setLayout(null);
		setVisible(true);
		choosePanel();
	}
	
	/** Handles a switch in the toolbox panel with the corresponding tool. **/
	public void choosePanel()
	{
		// removes the current panel and adds the one corresponding to the selected tool.
		removeAll();
		int tbs = ToolBox.toolSelected;
		if(tbs == ToolBox.RECTANGLE || tbs == ToolBox.OVAL || tbs == ToolBox.ROUNDRECTANGLE)
			shapePanel();
		else if(tbs == ToolBox.LINE)
			linePanel();
		else if(tbs == ToolBox.SPRAY)
			sprayPanel();
		else if(tbs == ToolBox.BRUSH)
			brushPanel();
		else if(tbs == ToolBox.DRAG)
			dragPanel();
		else if(tbs == ToolBox.RANDOMDRAW)
			randomPanel();
		repaint();
	}
	
	/** Allows user to select settings for drawing random lines. **/
	public void randomPanel()
	{
		JTextField field = new JTextField();
		JButton submit = new JButton();
		field.setBounds(25,0,40,22);
		submit.setBounds(25,22,40,22);
		add(field);
		add(submit);
		submit.addActionListener(new JRandom(field));
	}
	
	/** Allows the user to set the thickness of a line. **/
	public void linePanel()
	{
		// creates a textbox and a button to submit the size of the line
		JTextField field = new JTextField();
		JButton submit = new JButton();
		field.setBounds(25,0,40,22);
		submit.setBounds(25,22,40,22);
		add(field);
		add(submit);
		submit.addActionListener(new JTextListener(field));
	}
	
	/** Allows the user to set the size of the spray. **/
	public void sprayPanel()
	{
		// creates a field to set the size of the spray
		JTextField field = new JTextField();
		JButton submit = new JButton();
		field.setBounds(25,0,40,22);
		submit.setBounds(25,22,40,22);
		add(field);
		add(submit);
		submit.addActionListener(new JSprayListener(field));
	}
	
	/** Allows the user to select the item to drag. **/	
	public void dragPanel()
	{
		JButton rect = new JButton(new ImageIcon("Images//box.gif"));
		JButton oval = new JButton(new ImageIcon("Images//oval.gif"));
		rect.setSelectedIcon(new ImageIcon("Images//boxPressed.gif"));
		oval.setSelectedIcon(new ImageIcon("Images//ovalPressed.gif"));
		rect.setBounds(25,0,40,22);
		oval.setBounds(25,22,40,22);
		add(rect);
		add(oval);
		rect.addActionListener(new RectListener(rect));
		oval.addActionListener(new OvalListener(oval));
		JButton line = new JButton(new ImageIcon("Images//line.gif"));
		line.setSelectedIcon(new ImageIcon("Images//linePressed.gif"));
		line.setBounds(25,44,40,22);
		add(line);
		line.addActionListener(new LineListener(line));
		setCurrent(line);
		DrawingCanvas.extraOperations = DrawingCanvas.LINE;
	}
	
	/** Allows the user to select a style of brush. **/
	public void brushPanel()
	{
		// loads up the images when its pressed and when its not and sets 
		// its location and adds it to the screen.
		JButton rect = new JButton(new ImageIcon("Images//box.gif"));
		JButton oval = new JButton(new ImageIcon("Images//oval.gif"));
		rect.setSelectedIcon(new ImageIcon("Images//boxPressed.gif"));
		oval.setSelectedIcon(new ImageIcon("Images//ovalPressed.gif"));
		rect.setBounds(25,0,40,22);
		oval.setBounds(25,22,40,22);
		add(rect);
		add(oval);
		rect.addActionListener(new RectListener(rect));
		oval.addActionListener(new OvalListener(oval));
		setCurrent(rect);
		DrawingCanvas.extraOperations = DrawingCanvas.RECT;
	}
	
	/** Creates a shapes panel and allows the user to choose the type. **/
	public void shapePanel()
	{
		// loads up the images when its pressed and when its not and sets
		// its location and adds it to the screen.
		JButton normal = new JButton(new ImageIcon("Images//normal.gif"));
		JButton fill = new JButton(new ImageIcon("Images//fill.gif"));
		JButton outline = new JButton(new ImageIcon("Images//outline.gif"));
		normal.setSelectedIcon(new ImageIcon("Images//normalPressed.gif"));
		fill.setSelectedIcon(new ImageIcon("Images//fillPressed.gif"));
		outline.setSelectedIcon(new ImageIcon("Images//outlinePressed.gif"));
		normal.setBounds(25,0,40,22);
		fill.setBounds(25,22,40,22);
		outline.setBounds(25,44,40,22);
		add(normal);
		add(fill);
		add(outline);
		normal.addActionListener(new NormalListener(normal));
		fill.addActionListener(new FillListener(fill));
		outline.addActionListener(new OutlineListener(outline));
		setCurrent(normal);
		DrawingCanvas.extraOperations = DrawingCanvas.NORMAL;
	}
	
	/** Sets the current special selection to the field. **/
	public void setCurrent(JButton b)
	{
		current = b;
		current.setSelected(true);
	}
	/** Rectangle Listener, if button is pressed change field. **/
	public class RectListener implements ActionListener
	{
		private JButton b;
		
		public RectListener(JButton b){this.b=b;}
		
		public void actionPerformed(ActionEvent e)
		{
			current.setSelected(false);
			setCurrent(b);
			DrawingCanvas.extraOperations = DrawingCanvas.RECT;
		}
	}
	/** Oval Listener, if button is pressed change field. **/
	public class OvalListener implements ActionListener
	{
		private JButton b;
		
		public OvalListener(JButton b){this.b=b;}
		
		public void actionPerformed(ActionEvent e)
		{
			current.setSelected(false);
			setCurrent(b);
			DrawingCanvas.extraOperations = DrawingCanvas.OVAL;
		}
	}
	/** Line Listener, if button is pressed change field. **/
	public class LineListener implements ActionListener
	{
		private JButton b;
		
		public LineListener(JButton b){this.b=b;}
		
		public void actionPerformed(ActionEvent e)
		{
			current.setSelected(false);
			setCurrent(b);
			DrawingCanvas.extraOperations = DrawingCanvas.LINE;
		}
	}
	/** Spray Listener, changes size of spray and brush. **/
	public class JSprayListener implements ActionListener
	{
		private JTextField f;
		public JSprayListener(JTextField f){this.f=f;}
		public void actionPerformed(ActionEvent e)
		{
			DrawingCanvas.radius = Math.abs(Integer.parseInt(f.getText()));
		}
	}
	/** Random Listener, changes amount of lines. **/
	public class JRandom implements ActionListener
	{
		private JTextField f;
		public JRandom (JTextField f){this.f=f;}
		public void actionPerformed(ActionEvent e)
		{
			DrawingCanvas.amtLines = Integer.parseInt(f.getText());
		}
	}
	/** Text Listener, changes size of line. **/
	public class JTextListener implements ActionListener
	{
		private JTextField f;
		public JTextListener(JTextField f){this.f=f;}
		public void actionPerformed(ActionEvent e)
		{
			DrawingCanvas.lineWidth = Integer.parseInt(f.getText());
		}
	}
	/** Normal Listener, extra operations is set to normal. **/
	public class NormalListener implements ActionListener
	{
		private JButton b;
		public NormalListener(JButton b){this.b=b;}
		public void actionPerformed(ActionEvent e)
		{
			current.setSelected(false);
			setCurrent(b);
			DrawingCanvas.extraOperations = DrawingCanvas.NORMAL;
		}
	}
	/** Fill Listener, extra operations is set to fill. **/
	public class FillListener implements ActionListener
	{
		private JButton b;
		
		public FillListener(JButton b){this.b=b;}
		
		public void actionPerformed(ActionEvent e)
		{
			current.setSelected(false);
			setCurrent(b);
			DrawingCanvas.extraOperations = DrawingCanvas.FILL;
		}
	}
	/** Outline Listener, extra operations is set to outline. **/
	public class OutlineListener implements ActionListener
	{
		private JButton b;
		
		public OutlineListener(JButton b){this.b=b;}
		
		public void actionPerformed(ActionEvent e)
		{
			current.setSelected(false);
			setCurrent(b);
			DrawingCanvas.extraOperations = DrawingCanvas.OUTLINE;
		}
	}
}