package ckelling.baukasten;

import java.awt.*;
import java.lang.*;
import java.util.*;
import java.net.URL;

class Pipeline_1_Control extends Frame
{
	public boolean action(Event event, Object arg) {
		if (event.target instanceof MenuItem) {
			String label = (String) arg;
				if (event.target == ueberMI) {
					ueberMI_Action(event);
					return true;
				}
		}
		return super.action(event, arg);
	}

	void ueberMI_Action(Event event) {


		//{{CONNECTION
		// Create and show as modal
		(new AboutRechnerDialog(parent, this)).show();
		//}}
	}

    private Pipeline_1  parent;


    public Pipeline_1_Control (Pipeline_1 parent)
	{
		this.parent = parent;

			//{{INIT_CONTROLS
		setLayout(new GridLayout(0,1,5,0));
		addNotify();
		resize(insets().left + insets().right + 193,insets().top + insets().bottom + 152);
		setBackground(new Color(12632256));
		topPanel = new java.awt.Panel();
		topPanel.setLayout(new FlowLayout(FlowLayout.CENTER,40,20));
		topPanel.reshape(insets().left + 0,insets().top + 0,193,76);
		add(topPanel);
		directionReverse = new symantec.itools.awt.ImageButton();
		directionReverse.reshape(66,5,28,32);
		topPanel.add(directionReverse);
		directionReverse.setCenterMode(false);
		directionPlay = new symantec.itools.awt.ImageButton();
		directionPlay.reshape(99,5,28,32);
		topPanel.add(directionPlay);
		directionPlay.setCenterMode(false);
		bottomPanel = new java.awt.Panel();
		bottomPanel.setLayout(new GridLayout(0,1,5,20));
		bottomPanel.reshape(insets().left + 0,insets().top + 76,193,76);
		add(bottomPanel);
		restartSimulation = new java.awt.Button("Simulation neu starten");
		restartSimulation.reshape(0,0,193,28);
		restartSimulation.setFont(new Font("Helvetica", Font.PLAIN, 12));
		bottomPanel.add(restartSimulation);
		initRam = new java.awt.Button("Programm wechseln");
		initRam.reshape(0,48,193,28);
		initRam.setFont(new Font("Helvetica", Font.PLAIN, 12));
		bottomPanel.add(initRam);
		setTitle("Untitled");
		//}}

		try {
                        directionReverse.setImageURL(new URL(parent.getDocumentBase(), "Bilder/Pfeile/links.gif"));
		} catch (java.net.MalformedURLException error) {
		}
		try {
                        directionPlay.setImageURL(new URL(parent.getDocumentBase(), "Bilder/Pfeile/rechts.gif"));
		} catch (java.net.MalformedURLException error) {
		}

		//{{INIT_MENUS
		menuBar1 = new java.awt.MenuBar();

		einstellungenMenu = new java.awt.Menu("Einstellungen");
		erweiternCBMI = new java.awt.CheckboxMenuItem("Erweitern auf vier/fünf Stellen");
		erweiternCBMI.setState(false);
		einstellungenMenu.add(erweiternCBMI);
		//zweifarbigCBMI = new java.awt.CheckboxMenuItem("Zweifarbig");
		//zweifarbigCBMI.setState(false);
		//einstellungenMenu.add(zweifarbigCBMI);
		dezimalCBMI = new java.awt.CheckboxMenuItem("Dezimalzahlen");
		dezimalCBMI.setState(false);
		einstellungenMenu.add(dezimalCBMI);
		einstellungenMenu.addSeparator();
		standardMI = new java.awt.MenuItem("Standardwerte benutzen");
		einstellungenMenu.add(standardMI);
		menuBar1.add(einstellungenMenu);

		hilfeMenu = new java.awt.Menu("Hilfe");
		menuBar1.setHelpMenu(hilfeMenu);
		ueberMI = new java.awt.MenuItem("Über");
		hilfeMenu.add(ueberMI);
		menuBar1.add(hilfeMenu);
		setMenuBar(menuBar1);
		//$$ menuBar1.move(0,0);
		//}}

		setBackground(parent.BACKGROUND);

		//panel.add (new Button("Einmal"));
		//panel.add (new Button("Permanent"));
		//panel.add (new Button("Aus"));

		//if (parent.manualRedraw == true)
		//	topPanel.add (new Button("Neuzeichnen"));

		//zweifarbigCBMI.setState(parent.blackAndWhite);
		erweiternCBMI.setState(parent.expandNumbers);
		if (parent.NUMBERBASE == 10)
			dezimalCBMI.setState(true);
		else
			dezimalCBMI.setState(false);

		hide();

} /* end Pipeline_1_Control */


	public void paint (Graphics g)
	{
	} /* end paint */


	public Insets insets()	//	leave some space around the edges
	{
		Insets i = super.insets();
		return new Insets (i.top + 5, i.left + 5, i.bottom + 5, i.right + 5);
		//return new Insets (60, 20, 30, 20);
		//return new Insets (42, 5, 5, 5);

	} /* end Insets */


	public boolean handleEvent(Event e)
	{
		if (e.id == Event.ACTION_EVENT)
			mouseDown(e);
		else if (e.id == Event.WINDOW_DESTROY)
			return true;

	return super.handleEvent(e);

	} /* end handleEvent */


	private void mouseDown (Event e)
	{
		if (e.target instanceof symantec.itools.awt.ImageButton)
		{
			if (e.target.equals(directionPlay))  // ">"
			{
				if ((parent.scrollThread == (TimerThread) null) || (parent.scrollThread.isAlive() == false))
				{
					parent.scrollThread = new TimerThread(Rechner.SCROLLTIME, "scrolltimer", parent);
					parent.scrollThread.start();
				}
				parent.demonstrate(true);
				parent.paintActivated(parent.onScreenGC);
			}
			else if (e.target.equals(directionReverse))  // "<"
			{
				parent.demonstrateBack();
				parent.paintActivated(parent.onScreenGC);
			}
		}
		else if (e.target instanceof Button)
		{
			String label = ((Button)(e.target)).getLabel ();

			if (label.equals("Einmal"))
			{
				if (parent.scrollThread != (TimerThread) null)
					parent.scrollThread.stop();
				parent.scrollAll();
			}
			else if (label.equals("Permanent"))
			{
				if ((parent.scrollThread == (TimerThread) null) || (parent.scrollThread.isAlive() == false))
				{
					parent.scrollThread = new TimerThread(100, "scrolltimer", parent);
					parent.scrollThread.start();
				}
			}
			else if (label.equals("Aus"))
			{
				if (parent.scrollThread != (TimerThread) null)
					parent.scrollThread.stop();
			}
			else if (label.equals("Simulation neu starten"))
			{
				parent.stopSimulation();
				parent.deactivateAll();
				parent.updateAll();
				parent.paint(parent.onScreenGC);
			}
			else if (label.equals("Programm wechseln"))
			{
				if (parent.INSTRUCTIONS.equals("mips_single"))
					parent.INSTRUCTIONS = "mips_instructions";
				else
					parent.INSTRUCTIONS = "mips_single";
				parent.stopSimulation();
				parent.deactivateAll();
				parent.updateAll();
				parent.paint(parent.onScreenGC);
			}
			else if (label.equals("Neuzeichnen"))
			{
				if ((parent.scrollThread == (TimerThread) null) || (parent.scrollThread.isAlive() == false))
				{
					parent.scrollThread = new TimerThread(Rechner.SCROLLTIME, "scrolltimer", parent);
					parent.scrollThread.start();
				}
				parent.paint(parent.onScreenGC);
			}
		}
		else if (e.target instanceof CheckboxMenuItem)
		{
			CheckboxMenuItem cbmi = (CheckboxMenuItem)(e.target);
			String label = cbmi.getLabel();

			if (label.equals("Zweifarbig"))
			{
				parent.blackAndWhite = cbmi.getState();
				if (parent.blackAndWhite == false)
				{
					if (parent.blinkThread != (TimerThread) null)
						parent.blinkThread.stop();
				}
				else
				{
					if ((parent.blinkThread == (TimerThread) null) || (parent.blinkThread.isAlive() == false))
					{
						parent.blinkThread = new TimerThread(500, "blinktimer", parent);
						parent.blinkThread.start();
					}
				}

				parent.chooseColors();
				parent.invalidateAllImageCaches();
				java.lang.System.gc(); // den Garbage Collector aufrufen
				parent.paint(parent.onScreenGC);
			}
			else if (label.equals("Erweitern auf vier/fünf Stellen"))
			{
				parent.expandNumbers = cbmi.getState();
				parent.updateAll();
				parent.paint(parent.onScreenGC);
			}
			else if (label.equals("Dezimalzahlen"))
			{
				if (cbmi.getState() == true)
					parent.NUMBERBASE = 10;
				else
					parent.NUMBERBASE = 16;
				parent.updateAll();
				parent.paint(parent.onScreenGC);
			}
		}
		else if (e.target instanceof MenuItem)
		{
			MenuItem mi = (MenuItem)(e.target);
			String label = mi.getLabel();

			if (label.equals("Standardwerte benutzen"))
			{
				parent.blackAndWhite = false;
				if (parent.blinkThread != (TimerThread) null)
					parent.blinkThread.stop();
				parent.chooseColors();
				parent.expandNumbers = true;
				parent.NUMBERBASE = 16;
				//zweifarbigCBMI.setState(parent.blackAndWhite);
				erweiternCBMI.setState(parent.expandNumbers);
				if (parent.NUMBERBASE == 10)
					dezimalCBMI.setState(true);
				else
					dezimalCBMI.setState(false);

				parent.paint(parent.onScreenGC);
			}
		}

	} /* end mouseDown */

	//{{DECLARE_CONTROLS
	java.awt.Panel topPanel;
	symantec.itools.awt.ImageButton directionReverse;
	symantec.itools.awt.ImageButton directionPlay;
	java.awt.Panel bottomPanel;
	java.awt.Button restartSimulation;
	java.awt.Button initRam;
	//}}
	//{{DECLARE_MENUS
	java.awt.MenuBar menuBar1;
	java.awt.Menu einstellungenMenu;
	java.awt.CheckboxMenuItem erweiternCBMI;
	//java.awt.CheckboxMenuItem zweifarbigCBMI;
	java.awt.CheckboxMenuItem dezimalCBMI;
	java.awt.MenuItem standardMI;
	java.awt.Menu hilfeMenu;
	java.awt.MenuItem ueberMI;
	//}}
} /* end Pipeline_1_Control */

