package ckelling.baukasten;

/**
    A basic extension of the java.awt.Frame class
 */

import java.awt.*;

public class Editor_CreateNewComponent extends Frame {

    private Editor parent;

	void buttonCancel_Clicked(Event event) {
		//{{CONNECTION
		hide();
		//dispose();
		//}}
	}

	void buttonOK_Clicked(Event event) {
	    boolean anyIsSelected = true;

	    if (rb_Register16.getState() == true)
	    {
	    	showPropertiesForNew("Register16");
	    }
	    else if (rb_SimpleBus.getState() == true)
	    {
	    	showPropertiesForNewBus();
	    }
	    else if (rb_PipelineRegister.getState() == true)
	    {
	    	showPropertiesForNew("PipelineRegister");
	    }
	    else if (rb_PipelineStageLabel.getState() == true)
	    {
	    	showPropertiesForNew("PipelineStageLabel");
	    }
	    else if (rb_Misc.getState() == true)
	    {
	    	showPropertiesForNew("Misc");
	    }
	    else if (rb_Mux.getState() == true)
	    {
	    	showPropertiesForNew("Mux");
	    }
	    else if (rb_EditableMemory.getState() == true)
	    {
	    	showPropertiesForNew("EditableMemory");
	    }
	    else if (rb_TagMemory.getState() == true)
	    {
	    	if (parent.e_EditableMemory.size() < 1)
	    	// Jedes TagMemory muss zu einem EditableMemory gehoeren; falls es aber noch kein solches gibt...
	    	{
		    	showPropertiesForNew("EditableMemory");
		    }
		    else
		    {
		    	showPropertiesForNew("TagMemory");
		    }
	    }
	    else if (rb_ALU.getState() == true)
	    {
	    	showPropertiesForNew("ALU");
	    }
	    else if (rb_Adder.getState() == true)
	    {
	    	showPropertiesForNew("Adder");
	    }
	    else
	        anyIsSelected = false;

	    if (anyIsSelected)
	    {
	        hide();
	    }
	}
	
	private void showPropertiesForNew(String targetType)
	{
		if ( (parent.propEnter != null) && (! parent.propEnter.isShowing()) )
		{
	        parent.propEnter.initialize(targetType);
    	    //parent.propEnter.show();
    	}
    	else  // neues Fenster erzeugen
    	{
    		Editor_PropertiesRechnerKomponente prk = new Editor_PropertiesRechnerKomponente(targetType, parent, true);
    		// "true": Dieses Fenster loescht sich selbst nach Gebrauch
    		prk.initialize(targetType);
    		//prk.show();
    	}
    }

	private void showPropertiesForNewBus()
	{
		if ( (parent.propBusEnter != null) && (! parent.propBusEnter.isShowing()) )
		{
	        parent.propBusEnter.initialize();
    	    //parent.propBusEnter.show();
    	}
    	else  // neues Fenster erzeugen
    	{
	        Editor_PropertiesSimpleBus psb = new Editor_PropertiesSimpleBus(parent, true);
    		// "true": Dieses Fenster loescht sich selbst nach Gebrauch
	        psb.initialize();
	        //psb.show();
	    }
    }


	public Editor_CreateNewComponent(Editor parent) {

	    this.parent = parent;

		//{{INIT_CONTROLS
		GridBagLayout gridBagLayout;
		gridBagLayout = new GridBagLayout();
		setLayout(gridBagLayout);
		addNotify();
		resize(insets().left + insets().right + 342,insets().top + insets().bottom + 226);
		setFont(new Font("Helvetica", Font.PLAIN, 12));
		setBackground(new Color(12632256));
		radioButtonGroupPanel1 = new symantec.itools.awt.RadioButtonGroupPanel();
		radioButtonGroupPanel1.setLayout(new GridLayout(0,2,5,5));
		radioButtonGroupPanel1.reshape(insets().left + 10,insets().top + 10,322,136);
		GridBagConstraints gbc;
		gbc = new GridBagConstraints();
		gbc.gridx = 0;
		gbc.gridy = 0;
		gbc.weightx = 1.0;
		gbc.weighty = 1.0;
		gbc.fill = GridBagConstraints.BOTH;
		gbc.insets = new Insets(10,10,10,10);
		gridBagLayout.setConstraints(radioButtonGroupPanel1, gbc);
		add(radioButtonGroupPanel1);
		Group1 = new CheckboxGroup();
		rb_SimpleBus = new java.awt.Checkbox("SimpleBus", Group1, false);
		rb_SimpleBus.reshape(0,0,158,23);
		radioButtonGroupPanel1.add(rb_SimpleBus);
		rb_Mux = new java.awt.Checkbox("Mux", Group1, false);
		rb_Mux.reshape(163,0,158,23);
		radioButtonGroupPanel1.add(rb_Mux);
		rb_Register16 = new java.awt.Checkbox("Register16", Group1, true);
		rb_Register16.reshape(0,28,158,23);
		radioButtonGroupPanel1.add(rb_Register16);
		rb_Misc = new java.awt.Checkbox("Misc", Group1, false);
		rb_Misc.reshape(163,28,158,23);
		radioButtonGroupPanel1.add(rb_Misc);
		rb_ALU = new java.awt.Checkbox("ALU", Group1, false);
		rb_ALU.reshape(0,56,158,23);
		radioButtonGroupPanel1.add(rb_ALU);
		rb_PipelineRegister = new java.awt.Checkbox("PipelineRegister", Group1, false);
		rb_PipelineRegister.reshape(163,56,158,23);
		radioButtonGroupPanel1.add(rb_PipelineRegister);
		rb_Adder = new java.awt.Checkbox("Adder", Group1, false);
		rb_Adder.reshape(0,84,158,23);
		radioButtonGroupPanel1.add(rb_Adder);
		rb_EditableMemory = new java.awt.Checkbox("EditableMemory", Group1, false);
		rb_EditableMemory.reshape(163,84,158,23);
		radioButtonGroupPanel1.add(rb_EditableMemory);
		rb_PipelineStageLabel = new java.awt.Checkbox("PipelineStageLabel", Group1, false);
		rb_PipelineStageLabel.reshape(0,112,158,23);
		radioButtonGroupPanel1.add(rb_PipelineStageLabel);
		rb_TagMemory = new java.awt.Checkbox("TagMemory", Group1, false);
		rb_TagMemory.reshape(163,112,158,23);
		radioButtonGroupPanel1.add(rb_TagMemory);
		buttonPanel = new java.awt.Panel();
		buttonPanel.setLayout(new GridLayout(1,0,20,0));
		buttonPanel.reshape(insets().left + 10,insets().top + 179,322,23);
		gbc = new GridBagConstraints();
		gbc.gridx = 0;
		gbc.gridy = 1;
		gbc.weightx = 1.0;
		gbc.weighty = 1.0;
		gbc.fill = GridBagConstraints.HORIZONTAL;
		gbc.insets = new Insets(10,10,10,10);
		gridBagLayout.setConstraints(buttonPanel, gbc);
		add(buttonPanel);
		buttonOK = new java.awt.Button("OK");
		buttonOK.reshape(0,0,151,23);
		buttonPanel.add(buttonOK);
		buttonCancel = new java.awt.Button("Abbrechen");
		buttonCancel.reshape(171,0,151,23);
		buttonPanel.add(buttonCancel);
		setTitle("Neue Komponente erzeugen");
		//}}

		rb_SimpleBus.setState(true);
		rb_TagMemory.disable();

		hide();

		//{{INIT_MENUS
		//}}
	}

	public Editor_CreateNewComponent(String title, Editor parent) {
	    this(parent);
	    setTitle(title);
	}

    public synchronized void show() {
    	Rectangle pb = parent.editor_Control.bounds();
    	move(pb.x, pb.y);
    	super.show();
    }

	public boolean handleEvent(Event event) {
    	if (event.id == Event.WINDOW_DESTROY) {
            hide();         // hide the Frame
            return true;
    	}
		if (event.target == buttonCancel && event.id == Event.ACTION_EVENT) {
			buttonCancel_Clicked(event);
			return true;
		}
		if (event.target == buttonOK && event.id == Event.ACTION_EVENT) {
			buttonOK_Clicked(event);
			return true;
		}
		return super.handleEvent(event);
	}

	//{{DECLARE_CONTROLS
	symantec.itools.awt.RadioButtonGroupPanel radioButtonGroupPanel1;
	java.awt.Checkbox rb_SimpleBus;
	CheckboxGroup Group1;
	java.awt.Checkbox rb_Mux;
	java.awt.Checkbox rb_Register16;
	java.awt.Checkbox rb_Misc;
	java.awt.Checkbox rb_ALU;
	java.awt.Checkbox rb_PipelineRegister;
	java.awt.Checkbox rb_Adder;
	java.awt.Checkbox rb_EditableMemory;
	java.awt.Checkbox rb_PipelineStageLabel;
	java.awt.Checkbox rb_TagMemory;
	java.awt.Panel buttonPanel;
	java.awt.Button buttonOK;
	java.awt.Button buttonCancel;
	//}}

	//{{DECLARE_MENUS
	//}}
}
