package mb2;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class Mandelbrot extends JFrame {
	
	
	private MandelbrotCanvas canvas;

	private xMenu exampleMenu = new xMenu("Examples") {
		java.util.Vector rememberedExamples = new java.util.Vector();
		public void create() {
			addSubmenu("Built-In Examples", new String[] { 
					"Example 1", "Example 2", "Example 3", "Example 4",
					"Example 5", "Example 6", "Example 7", "Example 8",
					"Example 9", "Example 10", "Example 11", "Example 12",
					"Example 13", "Example 14", "Example 15", "Example 16",
					"Example 17", "Example 18", "Example 19", "Example 20"
				});
			addSeparator();
			add("Remember Current Example");
		}
		public void doCommand(int commandNum) {
			if (commandNum == 3) {
				Example example = new Example(canvas);
				rememberedExamples.addElement(example);
				add("Remembered Example " + rememberedExamples.size());
			}
			else if (commandNum > 3)
				canvas.install((Example)rememberedExamples.elementAt(commandNum-4));
		}
		public void doSubmenuCommand(int menu, int command) {
			switch (command) {
			case 1:
				canvas.install(new Example(-1.2623031086727636, -1.2623031083919118, 0.38359354964064757, 0.3835935498512864, 2, 2, 6, 0, true));
				break;
			case 2:
				canvas.install(new Example(-1.6744096756044493,-1.6744096717769306,4.716419197284976E-5,4.7167062611931696E-5,1,1,9,1,false));
				break;
			case 3:
				canvas.install(new Example(-0.7515104166666667, -0.7384895833333335, -0.1179174885797342, -0.1081518635797342, 8, 1, 6, 0, false));
				break;
			case 4:
				canvas.install(new Example(-0.7499091084798178, -0.7498073832194011, -0.01512001519187344, -0.01504372124656094, 1, 1, 6, 0, false));
				break;
			case 5:
				canvas.install(new Example(0.2860151227315265, 0.2860183016459146, 0.01153630275662951, 0.01153868694242053, 1, 1, 6, 0, false));
				break;
			case 6:
				canvas.install(new Example(0.28601560167064516, 0.2860156017191516, 0.01153748597592363, 0.01153748601230342, 1, 1, 6, 0, false));
				break;
			case 7:
				canvas.install(new Example(-1.3947314267481365, -1.394731382851799, 0.004504196998884557, 0.004504229921137647, 3, 1, 4, 0, false));
				break;
			case 8:
				canvas.install(new Example(-1.9409828792443582,-1.9409828789406118,6.481238065002669E-4,6.481240343100379E-4,1,1,9,144,false));
				break;
			case 9:
				canvas.install(new Example(-1.6730348358495644, -1.6730348356555387, 0.00611388336272725, 0.006113883508246402, 1, 1, 3, 0, false));
				break;
			case 10:
				canvas.install(new Example(0.32642717997233067, 0.3265289052327473, -0.05451000956418885, -0.05443371561887635, 2, 3, 7, 0, true));
				break;
			case 11:
				canvas.install(new Example(-1.4021907088881804, -1.4021907086941547, 7.378685846386933E-4, 7.378687301578456E-4, 1, 1, 5, 0, false));
				break;
			case 12:
				canvas.install(new Example(-1.0416723413703342, -1.0416723165350656, 0.3366316369357815, 0.336631655562233, 1, 1, 3, 248, true));
				break;
			case 13:
				canvas.install(new Example(-1.041672334826009, -1.0416723348229773, 0.33663164211039953, 0.33663164211267327, 1, 1, 10, 0, true));
				break;
			case 14:
				canvas.install(new Example(-1.263043835957845, -1.263018404642741, 0.04471644908688135, 0.04473552257320947, 1, 1, 2, 0, true));
				break;
			case 15:
				canvas.install(new Example(-1.2572854146671792, -1.2572854084583622, 0.038280500524232035, 0.03828050518084491, 1, 1, 9, 147, true));
				break;
			case 16: 
				canvas.install( new Example(0.25989953896993, 0.25989963831106766, 0.001612579325834812, 0.0016126583831640782, 1, 1, 4, 50, false) );
				break;
			case 17: 
				canvas.install( new Example(-0.3731076707689312,-0.37310663057550525,0.6481845448352237,0.6481853249802931,1,1,6,136,true) );
				break;
			case 18: 
				canvas.install( new Example(-1.275545173217428,-1.2755451670625497,0.18858615131552137,0.18858615593168024,1,1,4,1,false) );
				break;
			case 19: 
				canvas.install( new Example(-1.3937272129058824,-1.3937272129019853,0.10998468217258962,0.10998468217551245,1,1,6,1,false) );
				break;
			case 20: 
				canvas.install( new Example(0.3547193109712576,0.35474099268422055,0.09540200249324848,0.09541826377797069,1,1,7,1,true) );
				break;
			}
		}
	};
	
	public Mandelbrot(String title) {
		super(title);
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		canvas = new MandelbrotCanvas(512,384);
		JMenuBar mBar = canvas.createMenus(false,false);
		mBar.add(exampleMenu);
		setJMenuBar(mBar);
		getContentPane().setLayout(new BorderLayout(5,5));
		getContentPane().add(canvas,BorderLayout.CENTER);
		JPanel bottom = new JPanel();
		bottom.add(new JLabel("Mouse Action: "));
		getContentPane().add(bottom,BorderLayout.SOUTH);
		ButtonGroup gr = new ButtonGroup();
		final JRadioButton zoomButton = new JRadioButton("Zoom In/Out", true);
		final JRadioButton orbitButton = new JRadioButton("Select Orbit");
		gr.add(zoomButton);
		gr.add(orbitButton);
		bottom.add(zoomButton);
		bottom.add(orbitButton);
		ActionListener listener = new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				if (zoomButton.isSelected())
					canvas.setDoOrbits(false);
				else
					canvas.setDoOrbits(true);
			}
		};
		zoomButton.addActionListener(listener);
		orbitButton.addActionListener(listener);
		pack();
	}
	
	public MandelbrotCanvas getCanvas() {
		return canvas;
	}
	
}
