Package fmg.fmg8.graphVis

Source Code of fmg.fmg8.graphVis.SteuerFenster

/*
* Datei: SteuerFenster.java
* Autor(en):        Lukas K�nig
* Java-Version:     6.0
* Erstellt (vor):   19.12.2008
*
* (c) Lukas K�nig, die Datei unterliegt der LGPL
* -> http://www.gnu.de/lgpl-ger.html
*/

package fmg.fmg8.graphVis;

import fmg.fmg8.earleyErkenner.EarleyErkenner;
import fmg.fmg8.endlAutomat.EndlicherAutomat;
import fmg.fmg8.endlAutomat.OpsFactory;
import fmg.fmg8.endlAutomat.RobCode;
import fmg.fmg8.endlAutomat.Transition;
import fmg.fmg8.endlAutomat.ZInfo;
import fmg.fmg8.endlAutomat.conditions.Condition;
import fmg.fmg8.endlAutomat.mutation.CondMutVerfahren;
import fmg.fmg8.endlAutomat.rekombination.RekVerfahren;
import fmg.fmg8.graphVis.darstellungsModi.DarstModEA;
import fmg.fmg8.graphVis.fensterDialoge.AllgemeinerDialog;
import fmg.fmg8.graphVis.fensterDialoge.Ankreuzdialog;
import fmg.fmg8.graphVis.fensterDialoge.WindowClosingAdapter;
import fmg.fmg8.graphVis.graph.Knoten;
import fmg.fmg8.sonstiges.DateiFilter;
import fmg.fmg8.sonstiges.SonstMeth;
import fmg.fmg8.statistik.Parametersatz;
import fmg.fmg8.umgebung2D.Konstanten;
import fmg.fmg8.umgebung2D.Roboter;
import fmg.fmg8.umgebung2D.SimulationsZeit;
import fmg.fmg8.umgebung2D.Umgebung;
import fmg.fmg8.umgebung2D.VisMantel;
import fmg.fmg8.umgebung2D.dynWaende.DynFactory;

import java.awt.Button;
import java.awt.Choice;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.List;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Random;



/**
* Klasse zur Repr�sentation eines Steuerfensters.
*
* @author Lukas K�nig
*/
public class SteuerFenster extends Frame
                           implements ActionListener,
                                      ItemListener {

    /**
     * Die Versions-ID.
     */
    private static final long serialVersionUID = 1L;

    /**
     * Die Parameter f�r den Lauf.
     */
    private Parametersatz pars;
   
    /**
     * Die aktuelle Simulation.
     */
    private GuiSimulation simGUI;

    /**
     * Liste von Graphfenstern, die verwaltet werden.
     */
    private ArrayList<Vis> graphen;

    /**
     * Der aktuell ausgew�hlte Graph.
     */
    private Vis aktGrph;

    /**
     * Eine Listbox.
     */
    private List ktList;

    /**
     * Eine Textfeld, in dem die Aktion steht.
     */
    private TextField aktion;

    /**
     * Eine Textfeld, in dem der Parameter steht.
     */
    private TextField param;

    /**
     * Eine Textfeld, in dem der Zustandsname steht.
     */
    private TextField zustName;

    /**
     * Eine Textfeld, in dem das Alter des Zustands steht.
     */
    private TextField alter;

    /**
     * Speichert den aktuellen Knoten.
     */
    private Knoten aktKnot;

    /**
     * Das Panel, das angezeigt wird, wenn eine Kante ge�ndert wird.
     */
    private Panel kantenEinstell;

    /**
     * Eine Textfeld, in dem die Bedingung steht.
     */
    private TextField beding;

    /**
     * Eine Textfeld, in dem der Folgezustand steht.
     */
    private TextField folgeZust;

    /**
     * Das Alter der jeweiligen Kante.
     */
    private TextField ktAlter;

    /**
     * Die Auswahl der Graphen als Auswahlfeld.
     */
    private Choice grAuswahl;

    /**
     * Z�hlt die neu erzeugten Graphen.
     */
    private int graphZaehl;

    /**
     * Die Umgebung, in der sich die Roboter befinden.
     */
    private Umgebung umg;

    /**
     * Erkenner mit einer Grammatik f�r Bytes.
     */
    private EarleyErkenner byteErk;

    /**
     * Erkenner mit einer Grammatik f�r Bedingungen.
     */
    private EarleyErkenner bedgErk;

    /**
     * Erkenner mit einer Grammatik f�r Sequenzen.
     */
    private EarleyErkenner seqErk;

    /**
     * Fenster zum Anzeigen der Sensoren des aktiven Roboters w�hrend der
     * Simulation.
     */
    private SensorenDarstellung sensFenster;

    /**
     * Der Zufallsgenerator.
     */
    private Random rand;
   
    /**
     * Das Rekombinationsverfahren.
     */
    private RekVerfahren rekombArt;

    /**
     * Die Anzahl an Automaten.
     */
    private int autAnz;
   
    /**
     * Das Mutationsverfahren f�r Verhaltensautomaten.
     */
    private CondMutVerfahren mutArtVerh;

    /**
     * Das Mutationsverfahren f�r Translatoren.
     */
    private CondMutVerfahren mutArtTrans;

    /**
     * Der Konstruktor.
     *
     * @param parameter  Der Parametersatz f�r den Lauf.
     */
    public SteuerFenster(final Parametersatz parameter) {
        super(fmg.fmg8.statistik.Konstanten.PROG_NAME
                + " V "
                + fmg.fmg8.statistik.Konstanten.PROG_VERSION);
        this.pars = parameter;
        this.reset();
    }
   
    /**
     * Setzt das Steuerfenster zur�ck.
     */
    public void reset() {
        this.removeAll();
       
        this.rand = new Random(this.pars.getSeed().longValue());

        // Setzen der Mutation.
        this.mutArtVerh = OpsFactory.getKonstMut(
                this.pars.getMutArtVerh(),
                this.rand,
                this.pars);
       
        this.mutArtTrans = OpsFactory.getKonstMut(
                this.pars.getMutArtTrans(),
                this.rand,
                this.pars);
       
        this.autAnz = fmg.fmg8.umgebung2D.Konstanten.ANZAHL_AN_AUTOMATEN;
       
        this.rekombArt = OpsFactory.getKonstRek(
                this.pars.getRekombVerfahren(),
                this.pars,
                this.rand);

        this.pars.setMutationsVerfahren(this.mutArtVerh);
       
        this.graphen = new ArrayList<Vis>();
        this.aktGrph = null;
        this.graphZaehl = 0;
        this.byteErk = new EarleyErkenner(
                fmg.fmg8.earleyErkenner.Konstanten.GRAMM_BY, this.pars);
        this.bedgErk = new EarleyErkenner(
                fmg.fmg8.earleyErkenner.Konstanten.GRAMM_BE, this.pars);
        this.seqErk  = new EarleyErkenner(
                fmg.fmg8.earleyErkenner.Konstanten.GRAMM_SE, this.pars);

        this.sensFenster
            = new SensorenDarstellung(Konstanten.SENSOR_ANZAHL_ANZEIGEN,
                                      Konstanten.SENSOR_ANZAHL_BERECHNET);
        this.sensFenster.setSize(Konstanten.SENS_FENSTER_BREITE,
                                 Konstanten.SENS_FENSTER_HOEHE);
        this.sensFenster.setAlwaysOnTop(true);

        this.setLocation(800, 0);
        this.setSize(300, 700);
        this.setzeSteuerelemente();
        this.ladeGraphen();
        this.autAnz = this.aktGrph.getRob().vAuts().length;
        this.setVisible(true);
    }

    /**
     * L�dt gespeicherte Graphen aus dem im Parameterobjekt angegebenen
     * Verzeichnis.
     */
    private void ladeGraphen() {
        File verz = new File(this.pars.getStdPfad());
        String endung = fmg.fmg8.graphVis.Konstanten.GRAPH_ENDUNG;
        String[] gespGr = verz.list(new DateiFilter(endung));
        String graphName;
        Vis graphFenster;

        if (gespGr != null) {
            for (int i = 0; i < gespGr.length; i++) {
                graphName = gespGr[i].substring(
                                0,
                                gespGr[i].length() - endung.length() - 1);
               
                graphFenster = new Vis(Messages.getString("SteuerFenster.EA")
                                       + graphName + "]",
                                       graphName,
                                       this,
                                       this.umg,
                                       this.seqErk,
                                       this.mutArtVerh,
                                       this.mutArtTrans,
                                       this.rand,
                                       this.kleinsteFreieID(),
                                       this.pars,
                                       this.autAnz,
                                       null);

                this.grAuswahl.add(graphName);
                this.graphen.add(graphFenster);
                this.graphZaehl++;
            }
        }

        // Erzeuge einzelnen neuen Graphen, falls kein Graph gespeichert war.
        if (this.graphen.size() <= 0
            || this.grAuswahl.getItemCount() <= 0) {

            graphFenster = new Vis(
                    Messages.getString("SteuerFenster.EA")
                        + fmg.fmg8.graphVis.Konstanten.STD_GRAPH_NAME
                        + 0
                        + "]",
                    fmg.fmg8.graphVis.Konstanten.STD_GRAPH_NAME + 0,
                    this,
                    this.umg,
                    this.seqErk,
                    this.mutArtVerh,
                    this.mutArtTrans,
                    this.rand,
                    this.kleinsteFreieID(),
                    this.pars,
                    this.autAnz,
                    null);
            this.grAuswahl.add(fmg.fmg8.graphVis.Konstanten.STD_GRAPH_NAME
                                    + 0);
            this.graphen.add(graphFenster);
            this.graphZaehl++;
        }

        this.waehleGraph(0);
    }

    /**
     * W�hlt einen Graphen f�r die Darstellung aus.
     *
     * @param nummer  Die Nummer des zu w�hlenden Graphen.
     */
    private void waehleGraph(final int nummer) {
        int altX = 0;
        int altY = 0;

        if (this.aktGrph != null) {
            altX = this.aktGrph.getLocation().x;
            altY = this.aktGrph.getLocation().y;
        }

        this.aktGrph = (Vis) this.graphen.get(nummer);
        this.aktGrph.setLocation(altX, altY);
        this.aktGrph.setVisible(true);
        this.grAuswahl.select(nummer);

        for (int i = 0; i < this.graphen.size(); i++) {
            if (i != nummer) {
                ((Vis) this.graphen.get(i)).setVisible(false);
            }
        }
    }

    /**
     * Setzt alle Steuerelemente und Fenstereigenschaften.
     */
    private void setzeSteuerelemente() {
        this.addWindowListener(new WindowClosingAdapter(true, this));
        this.setBackground(Color.lightGray);
        this.setLayout(new GridLayout(1, 1));

        Button b;
        Panel buttonPanel = new Panel();
        Panel buttonPanel2 = new Panel();
        Panel buttonPanel3 = new Panel();
        Panel buttonPanel4 = new Panel();
        Panel listPanel = new Panel();
        Panel editPanel = new Panel();
        Panel labelPanel = new Panel();
        listPanel.setLayout(new GridLayout(0, 1));
        editPanel.setLayout(new GridLayout(4, 1));
        labelPanel.setLayout(new GridLayout(4, 1));
        buttonPanel2.setLayout(new GridLayout(5, 2));
        buttonPanel3.setLayout(new GridLayout(6, 3));
        buttonPanel4.setLayout(new GridLayout(2, 1));
       
        Panel choiPan = new Panel(new GridLayout(1, 1));

        Panel p = new Panel();
        b = new Button(Messages.getString("SteuerFenster.Autoanordnung"));
        b.addActionListener(this);
        buttonPanel.add(b);
        b = new Button(Messages.getString("SteuerFenster.Beenden"));
        b.addActionListener(this);
        buttonPanel.add(b);
        b = new Button(Messages.getString("SteuerFenster.KnotLoeschen"));
        b.addActionListener(this);
        buttonPanel2.add(b);
        b = new Button(Messages.getString("SteuerFenster.KnotEinfuegen"));
        b.addActionListener(this);
        buttonPanel2.add(b);
        b = new Button(Messages.getString("SteuerFenster.KantLoeschen"));
        b.addActionListener(this);
        buttonPanel2.add(b);
        b = new Button(Messages.getString("SteuerFenster.KantEinfuegen"));
        b.addActionListener(this);
        buttonPanel2.add(b);
        b = new Button(Messages.getString("SteuerFenster.Uebernehmen"));
        b.addActionListener(this);
        buttonPanel2.add(b);
        b = new Button(Messages.getString("SteuerFenster.AusSequenz"));
        b.addActionListener(this);
        buttonPanel2.add(b);
        b = new Button("Aus Std-Sequenz");
        b.addActionListener(this);
        buttonPanel2.add(b);
        b = new Button(Messages.getString("SteuerFenster.InterpretScript"));
        b.addActionListener(this);
        buttonPanel2.add(b);
        b = new Button(Messages.getString("SteuerFenster.Fancy"));
        b.addActionListener(this);
        buttonPanel2.add(b);
       
        b = new Button(Messages.getString("SteuerFenster.SIM"));
        b.addActionListener(this);
        buttonPanel4.add(b);
        b = new Button(Messages.getString("SteuerFenster.EVO"));
        b.addActionListener(this);
        buttonPanel4.add(b);

        this.aktion = new TextField("", 5);
        this.param = new TextField("", 5);
        this.alter = new TextField("", 5);
        this.zustName = new TextField("", 5);
        this.zustName.setEditable(false);

        labelPanel.add(new Label(Messages.getString("SteuerFenster.Zustand"),
                                 Label.LEFT));
        labelPanel.add(new Label(Messages.getString("SteuerFenster.Aktion"),
                                 Label.LEFT));
        labelPanel.add(new Label(Messages.getString("SteuerFenster.Parameter"),
                                 Label.LEFT));
        labelPanel.add(new Label(Messages.getString("SteuerFenster.Alter"),
                                 Label.LEFT));
        editPanel.add(this.zustName);
        editPanel.add(this.aktion);
        editPanel.add(this.param);
        editPanel.add(this.alter);

        this.ktList = new List(5, false);
        this.ktList.add(
            "                                            "
            + "                                          ");
        this.ktList.addActionListener(this);
        this.ktList.addItemListener(this);
        listPanel.add(this.ktList);

        this.kantenEinstell = new Panel();
        this.kantenEinstell.setLayout(new GridLayout(3, 1));
        this.beding = new TextField("", 35);
        this.folgeZust = new TextField("", 35);
        this.ktAlter = new TextField("", 35);
        this.kantenEinstell.add(this.beding);
        this.kantenEinstell.add(this.folgeZust);
        this.kantenEinstell.add(this.ktAlter);

        this.grAuswahl = new Choice();
        choiPan.add(this.grAuswahl);
        this.grAuswahl.addItemListener(this);

        b = new Button(Messages.getString("SteuerFenster.GraphLoeschen"));
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button(Messages.getString("SteuerFenster.GraphLeeren"));
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button(Messages.getString("SteuerFenster.AlleLeeren"));
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button(Messages.getString("SteuerFenster.NeuerGraph"));
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button(Messages.getString("SteuerFenster.Mutation"));
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button(Messages.getString("SteuerFenster.Rekombination"));
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button(Messages.getString("SteuerFenster.GraphKopieren"));
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button(Messages.getString("SteuerFenster.GraphSpeichern"));
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button(Messages.getString("SteuerFenster.GraphLaden"));
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button(Messages.getString("SteuerFenster.GraphUmbenennen"));
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button(Messages.getString("SteuerFenster.Vereinfache"));
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button(Messages.getString("SteuerFenster.VereinfacheAlle"));
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button(Messages.getString("SteuerFenster.ErzeugeHEX"));
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button(Messages.getString("SteuerFenster.Automatenzahl"));
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button(Messages.getString("SteuerFenster.Gesamtautomat"));
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button("PNG...");
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button("Alle l�schen!");
        b.addActionListener(this);
        buttonPanel3.add(b);
        b = new Button("Alle speichern");
        b.addActionListener(this);
        buttonPanel3.add(b);

        p.add(buttonPanel);
        p.add(listPanel);
        p.add(labelPanel);
        p.add(editPanel);
        p.add(this.kantenEinstell);
        p.add(buttonPanel2);
        p.add(choiPan);
        p.add(buttonPanel3);
        p.add(buttonPanel4);

        this.kantenEinstell.setVisible(true);
        this.kantenEinstell.setEnabled(false);
        this.beding.setText("");
        this.folgeZust.setText("");
        this.ktAlter.setText("");
        this.add(p);

        this.setResizable(true);
    }

    /**
     * Selektiert einen Knoten und f�gt ihn in die Darstellungsstrukturen
     * ein.
     *
     * @param knot  Der neue Knoten.
     */
    public void selKn(final Knoten knot) {
        String bed;
        int folgeZustand;
        int kantAlter;
        ZInfo zusatz;
        Iterator<Transition> it;
        Transition bedingung;
        String istStart = "";

        this.loescheSelKnot();
        this.aktKnot = knot;

        if (this.aktKnot != null) {
            zusatz = (ZInfo) this.aktKnot.getInfo();

            it = zusatz.getBeds().iterator();
            while (it.hasNext()) {
                bedingung = (Transition) it.next();
                bed = bedingung.getCond().toString();
                folgeZustand = bedingung.getFolgezustand();
                kantAlter = bedingung.getAlter();
                this.ktList.add(bed
                                  + "-"
                                  + folgeZustand
                                  + " ("
                                  + kantAlter
                                  + ")");
            }

            this.aktion.setText("" + zusatz.getAktion());
            this.param.setText("" + zusatz.getParam());
            this.alter.setText("" + zusatz.getAlter());
            if (zusatz.istStartZ()) {
                istStart = Messages.getString("SteuerFenster.IstStart");
            }
            this.zustName.setText("" + knot.holeName() + istStart);
        }
    }

    /**
     * L�scht den aktuellen Knoten und die Listenelemente, etc.
     */
    public void loescheSelKnot() {
        this.aktKnot = null;
        this.ktList.removeAll();
        this.aktion.setText("");
        this.param.setText("");
        this.alter.setText("");
        this.zustName.setText("");
        this.beding.setText("");
        this.folgeZust.setText("");
        this.ktAlter.setText("");
        this.kantenEinstell.setEnabled(false);
        this.beding.setText("");
        this.folgeZust.setText("");
     }

    /**
     * Behandelt die �nderung des Listenelements.
     *
     * @param event  Das Event.
     */
    public void itemStateChanged(final ItemEvent event) {
        int pos;
        ZInfo zusatz;
        Transition bed;

        if (event.getSource() == this.ktList) {
            pos = ((Integer) event.getItem()).intValue();
            this.kantenEinstell.setEnabled(true);

            if (this.ktList.getSelectedItem() != null) {
                if (this.ktList.getSelectedItem().equals(
                        Messages.getString("SteuerFenster.KanteNeu"))) {
                    this.beding.setText(
                        Messages.getString("SteuerFenster.Bedingung"));
                    this.folgeZust.setText(
                        Messages.getString("SteuerFenster.FolgeZ"));
                    this.ktAlter.setText(
                        Messages.getString("SteuerFenster.KantAlter"));
                } else {
                    zusatz = (ZInfo) this.aktKnot.getInfo();
                    bed = (Transition) zusatz.getBeds().get(pos);
                    this.beding.setText(bed.getCond().toString());
                    this.folgeZust.setText("" + bed.getFolgezustand());
                    this.ktAlter.setText("" + bed.getAlter());
                }
            }
        } else if (event.getSource() == this.grAuswahl) {
            this.waehleGraph(this.grAuswahl.getSelectedIndex());
            this.selKn(this.aktGrph.getAktSelKnot());
        }
    }

    /**
     * Die actionPerformed Methode.
     *
     * @param event  Das Event.
     */
    public void actionPerformed(final ActionEvent event) {
        Object obj = event.getSource();
        String cmd = event.getActionCommand();
        String neueBed;
        int pos;
        ZInfo neuerZusatz;
        String neuFlZst;
        String neuKtAl;
        String[] elemente;
        boolean grammOk = true;
        Iterator<Vis> itG;
        String[] altSeq = this.aktGrph.getRob().erzeugeStrSeqs();
        Condition[] altCond = this.aktGrph.getRob().getConds();
        String befehl;

        befehl = ""
            + SonstMeth.posSuch(Konstanten.BEF,
                                this.aktion.getText());

        this.setCursor(new Cursor(Cursor.WAIT_CURSOR));

        itG = this.graphen.iterator();
        while (itG.hasNext()) {
            ((Vis) itG.next()).setCursor(new Cursor(Cursor.WAIT_CURSOR));
        }

        try {
            if (obj instanceof Button) {
                if (cmd.equals(Messages.getString(
                        "SteuerFenster.Autoanordnung"))) {
                    this.aktGrph.zuruecksetzen();
                } else if (cmd.equals(Messages.getString(
                        "SteuerFenster.Beenden"))) {
                    WindowClosingAdapter ende
                        = new WindowClosingAdapter(true, this);
                    ende.schliesseExt(this);
                } else if (cmd.equals(Messages.getString(
                        "SteuerFenster.Uebernehmen"))
                           && this.aktKnot != null) {
                    AllgemeinerDialog dia;
                    ArrayList<String> buttons = new ArrayList<String>();
                    buttons.add(Messages.getString("SteuerFenster.OK"));

                    if (!this.byteErk.erkenne(befehl)) {
                        dia = new AllgemeinerDialog(this,
                                        null,
                                        Messages.getString(
                                           "SteuerFenster.Earley"),
                                        buttons,
                                        "<"
                                        + befehl
                                        + ">\n\n\n"
                                        + this.byteErk.toString());
                        dia.setVisible(true);
                        grammOk = grammOk & false;
                    }
                    if (!this.byteErk.erkenne(this.param.getText())) {
                        dia = new AllgemeinerDialog(this,
                                        null,
                                        Messages.getString(
                                           "SteuerFenster.Earley"),
                                        buttons,
                                        "<"
                                        + this.param.getText()
                                        + ">\n\n\n"
                                        + this.byteErk.toString());
                        dia.setVisible(true);
                        grammOk = grammOk & false;
                    }
                    if (!this.byteErk.erkenne(this.alter.getText())) {
                        dia = new AllgemeinerDialog(this,
                                        null,
                                        Messages.getString(
                                           "SteuerFenster.Earley"),
                                        buttons,
                                        "<"
                                        + this.alter.getText()
                                        + ">\n\n\n"
                                        + this.byteErk.toString());
                        dia.setVisible(true);
                        grammOk = grammOk & false;
                    }
                    if (this.ktList.getSelectedItems().length > 0) {
                        this.beding.setText(
                                EndlicherAutomat.formatBed(
                                        this.beding.getText()));
                       
                        if (!this.bedgErk.erkenne(this.beding.getText())) {
                            dia = new AllgemeinerDialog(this,
                                            null,
                                            Messages.getString(
                                               "SteuerFenster.Earley"),
                                            buttons,
                                            "<"
                                            + this.beding.getText()
                                            + ">\n\n\n"
                                            + this.bedgErk.toString());
                            dia.setVisible(true);
                            grammOk = grammOk & false;
                        }
                        if (!this.byteErk.erkenne(this.folgeZust.getText())) {
                            dia = new AllgemeinerDialog(this,
                                            null,
                                            Messages.getString(
                                               "SteuerFenster.Earley"),
                                            buttons,
                                            "<"
                                            + this.folgeZust.getText()
                                            + ">\n\n\n"
                                            + this.byteErk.toString());
                            dia.setVisible(true);
                            grammOk = grammOk & false;
                        }
                        if (!this.byteErk.erkenne(this.ktAlter.getText())) {
                            dia = new AllgemeinerDialog(this,
                                            null,
                                            Messages.getString(
                                               "SteuerFenster.Earley"),
                                            buttons,
                                            "<"
                                            + this.ktAlter.getText()
                                            + ">\n\n\n"
                                            + this.byteErk.toString());
                            dia.setVisible(true);
                            grammOk = grammOk & false;
                        }
                    } else {
                        grammOk = grammOk & true;
                    }

                    if (grammOk) {
                        boolean istStart
                            = this.aktGrph.getRob().istStartZ(
                                    this.aktGrph.getAktAut(),
                                    this.aktKnot);
                        if (this.ktList.getSelectedItem() != null
                            && !this.beding.getText().equals(
                                Messages.getString("SteuerFenster.Bedingung"))
                            && !this.folgeZust.getText().equals(
                                Messages.getString("SteuerFenster.FolgeZ"))
                            && !this.ktAlter.getText().equals(
                                Messages.getString("SteuerFenster.KantAlter"))
                            && !this.beding.getText().equals("")
                            && !this.folgeZust.getText().equals("")
                            && !this.ktAlter.getText().equals("")) {
                            pos = this.ktList.getSelectedIndex();
                            neueBed = SonstMeth.ausFormatBed(
                                          this.beding.getText())
                                      + "-"
                                      + this.folgeZust.getText()
                                      + " ("
                                      + this.ktAlter.getText()
                                      + ")";
                            this.ktList.replaceItem(neueBed, pos);
                        }
                        this.aktKnot.loescheAlleNachfolger();
                        if (this.alter.getText().equals("")) {
                            this.alter.setText("1");
                        }
                        neuerZusatz = new ZInfo(
                                Integer.parseInt(befehl),
                                Integer.parseInt(this.param.getText()),
                                null,
                                istStart,
                                Integer.parseInt(this.alter.getText()));

                        this.aktKnot.setzeInformation(neuerZusatz);
                       
                        elemente = this.ktList.getItems();
                        String aktEl;
                        for (int i = 0; i < elemente.length; i++) {
                            aktEl = elemente[i];
                            if (!aktEl.equals(Messages.getString(
                                    "SteuerFenster.KanteNeu"))) {
                                int j;
                                for (j = 0;
                                aktEl.charAt(j) != '-';
                                    j = j + 0) {
                                    j++;
                                }
                                int k;
                                for (k = j;
                                aktEl.charAt(k) != '(';
                                    k = k + 0) {
                                    k++;
                                }
                                neueBed = aktEl.substring(0, j);
                                neuFlZst = aktEl.substring(j + 1, k - 1);
                                neuKtAl = aktEl.substring(k + 1,
                                        aktEl.length() - 1);

                                neueBed = EndlicherAutomat.formatBed(neueBed);
                               
                                this.aktGrph.getRob().vAuts()[
                                     this.aktGrph.getAktAut()].einfuegKante(
                                     this.aktKnot.holeName(),
                                     new Integer(
                                         Integer.parseInt(neuFlZst)),
                                     neueBed,
                                     Integer.parseInt(neuKtAl));
                            }
                        }
                    }
                } else if (cmd.equals(Messages.getString(
                                "SteuerFenster.KnotLoeschen"))
                           && this.aktKnot != null) {
                    this.aktGrph.getRob().vAuts()[
                                   this.aktGrph.getAktAut()].entferneKnoten(
                        this.aktKnot.holeName());
                    this.loescheSelKnot();
                } else if (cmd.equals(Messages.getString(
                                "SteuerFenster.KantLoeschen"))
                            && this.ktList.getSelectedItem() != null) {
                    int j;
                    int k;

                    if (this.ktList.getSelectedItem().equals("<Neue"
                                                               + " Kante>")) {
                        this.ktList.remove(this.ktList.getSelectedIndex());
                    } else {
                        neueBed = this.ktList.getSelectedItem();
                        for (j = 0; neueBed.charAt(j) != '-'; j = j + 0) {
                            j++;
                        }
                        for (k = j; neueBed.charAt(k) != '('; k = k + 0) {
                            k++;
                        }
                        neuFlZst = neueBed.substring(j + 1,
                                                     k - 1);
                        this.aktGrph.getRob().vAuts()[
                                      this.aktGrph.getAktAut()].entferneKante(
                                    this.aktKnot.holeName(),
                                    new Integer(Integer.parseInt(neuFlZst)));
                        this.ktList.remove(this.ktList.getSelectedIndex());
                    }
                    if (this.ktList.getItemCount() > 0) {
                        this.ktList.select(0);
                    }
                } else if (cmd.equals(Messages.getString(
                                "SteuerFenster.KnotEinfuegen"))
                           && !this.aktion.getText().equals("")
                           && !this.param.getText().equals("")) {
                    int i = 1;
                    Integer ii = new Integer(i);

                    AllgemeinerDialog dia;
                    ArrayList<String> buttons = new ArrayList<String>();
                    buttons.add(Messages.getString("SteuerFenster.OK"));

                    if (!this.byteErk.erkenne(befehl)) {
                        dia = new AllgemeinerDialog(this,
                                        null,
                                        Messages.getString(
                                           "SteuerFenster.Earley"),
                                        buttons,
                                        "<"
                                        + befehl
                                        + ">\n\n\n"
                                        + this.byteErk.toString());
                        dia.setVisible(true);
                        grammOk = grammOk & false;
                    }
                    if (!this.byteErk.erkenne(this.param.getText())) {
                        dia = new AllgemeinerDialog(this,
                                        null,
                                        Messages.getString(
                                           "SteuerFenster.Earley"),
                                        buttons,
                                        "<"
                                        + this.param.getText()
                                        + ">\n\n\n"
                                        + this.byteErk.toString());
                        dia.setVisible(true);
                        grammOk = grammOk & false;
                    }
                    if (!this.byteErk.erkenne(this.alter.getText())) {
                        dia = new AllgemeinerDialog(this,
                                        null,
                                        Messages.getString(
                                           "SteuerFenster.Earley"),
                                        buttons,
                                        "<"
                                        + this.alter.getText()
                                        + ">\n\n\n"
                                        + this.byteErk.toString());
                        dia.setVisible(true);
                        grammOk = grammOk & false;
                    }

                    if (grammOk) {
                        while (this.aktGrph.getRob().vAuts()[
                         this.aktGrph.getAktAut()].holAdj().containsKey(ii)) {
                            i++;
                            ii = new Integer(i);
                        }

                        if (this.alter.getText().equals("")) {
                            this.alter.setText("1");
                        }
                        this.aktGrph.getRob().vAuts()[
                               this.aktGrph.getAktAut()].einfuegenKnoten(
                                    ii,
                                    Integer.parseInt(befehl),
                                    Integer.parseInt(this.param.getText()),
                                    Integer.parseInt(this.alter.getText()));
                    }
                } else if (cmd.equals(Messages.getString(
                                "SteuerFenster.KantEinfuegen"))
                           && this.aktKnot != null) {
                    this.ktList.add(Messages.getString(
                                    "SteuerFenster.KanteNeu"));
                } else if (cmd.equals(Messages.getString(
                                "SteuerFenster.AusSequenz"))) {
                    int autNum = this.aktGrph.getAktAut();
                    String condS = this.aktGrph.getConditions()[autNum];
                    Condition cond = SonstMeth.ausBed(condS);
                   
                    this.aktGrph.getRob().erzeugeAusSequenz(
                        this.aktGrph.getAktAut(),
                        this.aktGrph.holeAktTxtSeq(),
                        cond,
                        this.aktGrph.getRob().getAktTAut(),
                        true);
                    this.loescheSelKnot();
                    SonstMeth.log(
                            SonstMeth.LOG_DEBUG,
                            "Aus Sequenz mit aktuellem Translator.",
                            this.pars);
                } else if (cmd.equals("Aus Std-Sequenz")) {
                    int autNum = this.aktGrph.getAktAut();
                    String condS = this.aktGrph.getConditions()[autNum];
                    Condition cond = SonstMeth.ausBed(condS);
                   
                    this.aktGrph.getRob().erzeugeAusSequenz(
                        this.aktGrph.getAktAut(),
                        this.aktGrph.holeAktTxtSeq(),
                        cond,
                        true);
                    this.loescheSelKnot();
                    SonstMeth.log(
                            SonstMeth.LOG_DEBUG,
                            "Aus Sequenz mit Standardkodierung "
                            + "ohne Translator.",
                            this.pars);
                } else if (cmd.equals(Messages.getString(
                                "SteuerFenster.AusSequenzen"))) {
                    this.aktGrph.erzeugeAlleAusSeq(
                            this.aktGrph.getSeqs(),
                            SonstMeth.ausBeds(this.aktGrph.getConditions()),
                            true);
                    this.loescheSelKnot();
                } else if (cmd.equals(Messages.getString(
                                "SteuerFenster.GraphLoeschen"))) {
                    AllgemeinerDialog nachfrage;
                    ArrayList<String> buttons = new ArrayList<String>();
                    buttons.add(Messages.getString("SteuerFenster.OK"));
                    buttons.add(Messages.getString("SteuerFenster.Abbrechen"));

                    nachfrage = new AllgemeinerDialog(
                                    this,
                                    "Soll der aktuelle Endliche Automat "
                                    + "<" + this.aktGrph
                                    + "> wirklich von der Festplatte gel�scht"
                                    + " UND aus der Darstellung entfernt "
                                    + "werden?",
                                    Messages.getString(
                                                "SteuerFenster.GraphLoeschen"),
                                    buttons,
                                    null);
                    nachfrage.setVisible(true);

                    if (nachfrage.getResult().equals(Messages.getString(
                                    "SteuerFenster.OK"))) {
                        this.loescheGraph(this.aktGrph, true);
                        this.waehleGraph(0);
                    }
                } else if (cmd.equals(Messages.getString(
                                "SteuerFenster.NeuerGraph"))) {
                    this.neuerGraph();
                    this.waehleGraph(this.graphZaehl - 1);
                } else if (cmd.equals(Messages.getString(
                                "SteuerFenster.GraphLeeren"))) {
                    AllgemeinerDialog nachfrage;
                    ArrayList<String> buttons = new ArrayList<String>();
                    buttons.add(Messages.getString("SteuerFenster.OK"));
                    buttons.add(Messages.getString("SteuerFenster.Abbrechen"));

                    nachfrage = new AllgemeinerDialog(
                                    this,
                                    "Sollen ALLE KNOTEN des aktuellen "
                                    + "Endlichen Automaten "
                                    + "<" + this.aktGrph
                                    + "> wirklich gel�scht"
                                    + " werden?",
                                    Messages.getString(
                                                  "SteuerFenster.GraphLeeren"),
                                    buttons,
                                    null);
                    nachfrage.setVisible(true);

                    if (nachfrage.getResult().equals(Messages.getString(
                                    "SteuerFenster.OK"))) {
                        this.aktGrph.leereAktGraph();
                        this.selKn(null);
                    }
                } else if (cmd.equals(Messages.getString(
                                    "SteuerFenster.AlleLeeren"))) {
                    AllgemeinerDialog nachfrage;
                    ArrayList<String> buttons = new ArrayList<String>();
                    buttons.add(Messages.getString("SteuerFenster.OK"));
                    buttons.add(Messages.getString("SteuerFenster.Abbrechen"));
               
                    nachfrage = new AllgemeinerDialog(
                                    this,
                                    "Sollen ALLE KNOTEN ALLER AUTOMATEN "
                                        + " wirklich gel�scht werden?",
                                    Messages.getString(
                                                  "SteuerFenster.AlleLeeren"),
                                    buttons,
                                    null);
                    nachfrage.setVisible(true);
               
                    if (nachfrage.getResult().equals(Messages.getString(
                                    "SteuerFenster.OK"))) {
                        Vis aktGraph;
                        Iterator<Vis> it = this.graphen.iterator();
                        while (it.hasNext()) {
                            aktGraph = (Vis) it.next();
                            aktGraph.leereAlleGraphen();
                            aktGraph.neuZeichnen();
                        }
                        this.selKn(null);
                    }
                } else if (cmd.equals(Messages.getString(
                                "SteuerFenster.GraphKopieren"))) {
                    String[] seq = this.aktGrph.getRob().erzeugeStrSeqs();
                    Condition[] conds = this.aktGrph.getRob().getConds();
                    DarstModEA[] darAlt;
                    darAlt = (DarstModEA[])
                        SonstMeth.seriaClone(this.aktGrph.getDarstellArt());

                    this.neuerGraph();
                    this.waehleGraph(this.graphZaehl - 1);
                    this.aktGrph.setzeAlleSeq(seq);
                    this.aktGrph.getRob().erzeugeAusSequenzen(seq,
                                                              conds,
                                                              null,
                                                              false);
                    this.aktGrph.setDarstellArt(darAlt);

                } else if (cmd.equals(Messages.getString(
                                "SteuerFenster.GraphSpeichern"))) {
                    this.aktGrph.speichereGraph(
                                    Messages.getString("Vis.All"));
                } else if (cmd.equals(Messages.getString(
                                "SteuerFenster.GraphLaden"))) {
                    AllgemeinerDialog nachfrage;
                    ArrayList<String> buttons = new ArrayList<String>();
                    buttons.add(Messages.getString("SteuerFenster.OK"));
                    buttons.add(Messages.getString("SteuerFenster.Abbrechen"));

                    nachfrage = new AllgemeinerDialog(
                                    this,
                                    Messages.getString("SteuerFenster."
                                                    + "SollNeuLaden")
                                    + " <" + this.aktGrph
                                    + ">.",
                                    Messages.getString(
                                                  "SteuerFenster.GraphLaden"),
                                    buttons,
                                    null);
                    nachfrage.setVisible(true);

                    if (nachfrage.getResult().equals(Messages.getString(
                                    "SteuerFenster.OK"))) {
                        this.aktGrph.ladeRob();
                        this.loescheSelKnot();
                    }
                } else if (cmd.equals(Messages.getString(
                                "SteuerFenster.SIM"))) {
                    this.simStarten(false);
                } else if (cmd.equals(Messages.getString(
                                "SteuerFenster.EVO"))) {
                    this.simStarten(true);
                } else if (cmd.equals(
                        Messages.getString("SteuerFenster.GraphUmbenennen"))) {
                    AllgemeinerDialog dia;
                    ArrayList<String> buttons = new ArrayList<String>();
                    buttons.add(Messages.getString("SteuerFenster.OK"));
                    buttons.add(Messages.getString("SteuerFenster.Abbrechen"));

                    dia = new AllgemeinerDialog(
                                    this,
                                    null,
                                    Messages.getString("SteuerFenster."
                                                     + "SollUmbenennen"),
                                    buttons,
                                    this.aktGrph.getGraphName(),
                                    1,
                                    50,
                                    true);
                    dia.setVisible(true);

                    if (dia.getResult().equals(
                                    Messages.getString("SteuerFenster.OK"))) {
                        String name = dia.getText();
                        boolean ok = true;
                        Iterator<Vis> it = this.graphen.iterator();

                        while (it.hasNext()) {
                            Vis aktG = (Vis) it.next();
                            if (aktG.getGraphName().equals(name)) {
                                ok = false;
                            }
                        }

                        if (ok) {
                            int index = this.grAuswahl.getSelectedIndex();
                            int max = this.grAuswahl.getItemCount();
                            ArrayList<String> strings = new ArrayList<String>();
                            for (int i = 0; i < max; i++) {
                                if (i == index) {
                                    strings.add(name);
                                } else {
                                    strings.add(this.grAuswahl.getItem(i));
                                }
                            }

                            this.grAuswahl.removeAll();
                            this.aktGrph.setGraphName(name);

                            for (int i = 0; i < max; i++) {
                                this.grAuswahl.add((String) strings.get(i));
                            }

                            this.grAuswahl.select(index);
                        }
                    }

                } else if (cmd.equals(
                           Messages.getString("SteuerFenster.Mutation"))) {
                    this.aktGrph.mutiere();
                } else if (cmd.equals(
                        Messages.getString("SteuerFenster.Rekombination"))) {
                    ArrayList<String> a = new ArrayList<String>();
                    Iterator<Vis> it = this.graphen.iterator();
                    while (it.hasNext()) {
                        Vis v = (Vis) it.next();
                        a.add(v.toString());
                    }
                   
                    AllgemeinerDialog dia = new AllgemeinerDialog(
                              this,
                              "Rekombination",
                              "Bitte die zu rekombinierenden\nGraphen w�hlen.",
                              a,
                              Messages.getString("SteuerFenster.Abbrechen"),
                              Messages.getString("SteuerFenster.OK"),
                              true,
                              -1);
                    dia.setVisible(true);
                    if (dia.getResult()
                            == Messages.getString("SteuerFenster.OK")) {
                       
                        String[] str = dia.getListe().getSelectedItems();
                        Roboter[] pop = new Roboter[str.length];
                        Vis v;
                       
                        for (int i = 0; i < str.length; i++) {
                            it = this.graphen.iterator();
                            while (it.hasNext()) {
                                v = (Vis) it.next();
                                if (v.toString().equals(str[i])) {
                                    pop[i] = v.getRob();
                                   
                                    for (int j = 0;
                                         j < v.getRob().vAuts().length;
                                         j++) {
                                        ArrayList<String> b
                                            = new ArrayList<String>(1);
                                        b.add(Messages.getString(
                                                "SteuerFenster.OK"));
                                        AllgemeinerDialog dia2
                                            = new AllgemeinerDialog(
                                                    this,
                                                    "",
                                                    "Fitness " + j
                                                      + " ("
                                                      + str[i]
                                                      + ")",
                                                    b,
                                                    "" + pop[i].getFitness()[0],
                                                    1,
                                                    50,
                                                    true);
   
                                        dia2.setVisible(true);
                                       
                                        pop[i].setFitness(j,
                                            Integer.parseInt(dia2.getText()));
                                        }
                                   
                                    break;
                                }
                            }
                        }

                        RobCode[] r = this.rekombArt.rekombEinz(pop);
                        for (int i = 0; i < r.length; i++) {
                            v = this.neuerGraph();
                            v.erzeugeAlleAusSeq(
                                    r[i].getVStdCodes(),
                                    null,
                                    false);
                            this.selGraph(v);
                        }
                    }
                   
                } else if (cmd.equals(
                           Messages.getString("SteuerFenster.ErzeugeHEX"))) {
                    FileDialog dia;

                    dia = new FileDialog(this,
                                         Messages.getString("SteuerFenster."
                                                        + "ErzeugeHEXTitel"),
                                         FileDialog.SAVE);
                    dia.setVisible(true);

                    if (!(dia.getDirectory() == null)
                        && !(dia.getFile() == null)) {
                        LinkedList<Integer> seq
                            = this.aktGrph.getRob().erzeugeSequenz(
                                    this.aktGrph.getAktAut());
                        FileWriter f = new FileWriter(dia.getDirectory()
                                                      + File.separatorChar
                                                      + dia.getFile());
                        Iterator<Integer> it = seq.iterator();

                        while (it.hasNext()) {
                            f.write(((Integer) it.next()).intValue());
                        }
                        f.close();
                    }
                } else if (cmd.equals(
                        Messages.getString("SteuerFenster.Vereinfache"))) {
                    this.aktGrph.getRob().vAuts()[
                                   this.aktGrph.getAktAut()].vereinfache();
                    Condition condSimp =
                        this.aktGrph.getRob().getConds()[
                                  this.aktGrph.getAktAut()].simplify();
                    this.aktGrph.getRob().setCond(this.aktGrph.getAktAut(),
                                                  condSimp);
                   
                } else if (cmd.equals(
                        Messages.getString("SteuerFenster.VereinfacheAlle"))) {
                    Iterator<Vis> it = this.graphen.iterator();
                    Condition condSimp;
                    Vis aktVis;
                    while (it.hasNext()) {
                        aktVis = (Vis) it.next();
                        for (int i = 0;
                             i < aktVis.getRob().vAuts().length;
                             i++) {
                            aktVis.getRob().vAuts()[i].vereinfache();

                            condSimp = this.aktGrph.getRob().getConds()[
                                          i].simplify();
                            this.aktGrph.getRob().setCond(i, condSimp);
                            aktVis.neuZeichnen();
                        }
                    }
                } else if (cmd.equals(
                        Messages.getString("SteuerFenster.InterpretScript"))) {
                   
                    this.aktGrph.getRob().vAuts()[
                        this.aktGrph.getAktAut()].erzeugeAusScript(
                            this.aktGrph.holeAktTxtSeq());
                } else if (cmd.equals(
                        Messages.getString("SteuerFenster.Automatenzahl"))) {
                   
                    ArrayList<String> b
                        = new ArrayList<String>(1);
                    b.add(Messages.getString(
                        "SteuerFenster.OK"));
                    AllgemeinerDialog dia2
                        = new AllgemeinerDialog(
                            this,
                            "reef",
                            "Anzahl der Automaten "
                            + "(wirkt sich nur auf zuk�nftige Roboter aus)",
                            b,
                            "" + this.autAnz,
                            1,
                            50,
                            true);

                    dia2.setVisible(true);
                   
                    this.autAnz = Integer.parseInt(dia2.getText());
                } else if (cmd.equals(
                        Messages.getString("SteuerFenster.Gesamtautomat"))) {
                    EndlicherAutomat[] eas = this.aktGrph.getRob().getVAut();
                    Condition[] conds = this.aktGrph.getRob().getConds();
                   
                    this.neuerGraph();
                    this.waehleGraph(this.graphZaehl - 1);
                    this.aktGrph.erzeugeAktAusSequenz(
                       SonstMeth.gesamtAutomat(eas, conds).erzeugeStringSeq(),
                       SonstMeth.ausBed("t"),
                       false);
                } else if (cmd.equals(
                        Messages.getString("SteuerFenster.Fancy"))) {
                    this.pars.setEinfacheDar(!this.pars.getEinfacheDar());
                    if (this.pars.getEinfacheDar()) {
                        this.pars.setBezier(
                          fmg.fmg8.graphVis.zeichenModi.Konstanten.BEZ_FANCY);
                    } else {
                        this.pars.setBezier(
                          fmg.fmg8.graphVis.zeichenModi.Konstanten.BEZ_NORMAL);
                    }
                } else if (cmd.equals("PNG...")) {
                    FileDialog dia;
                    String oldVerz;
                   
                    dia = new FileDialog(this,
                                         "Automatendarstellung als PNG "
                                         + "speichern",
                                         FileDialog.SAVE);
                   
                    dia.setFilenameFilter(new DateiFilter("png"));
                   
                    dia.setVisible(true);

                    if (!(dia.getDirectory() == null)
                        && !(dia.getFile() == null)) {
                        oldVerz = this.pars.getStdPfad();
                        this.pars.setStdPfad(dia.getDirectory());
                        this.aktGrph.savePNG(dia.getFile());
                        this.pars.setStdPfad(oldVerz);
                    }
                } else if (cmd.equals("Alle l�schen!")) {
                    ArrayList<String> butts = new ArrayList<String>(2);
                    ArrayList<String> choices = new ArrayList<String>(5);
                    ArrayList<Boolean> aktiv = new ArrayList<Boolean>(5);
                   
                    String gra, tra, con, koo, png, tmp, dat, gz, gif;
                   
                    butts.add("Abbrechen");
                    butts.add("OK");

                    gra = "Alle GRA-Dateien l�schen";
                    tra = "Alle TRA-Dateien l�schen";
                    con = "Alle CON-Dateien l�schen";
                    koo = "Alle KOO-Dateien l�schen";
                    png = "Alle PNG-Dateien l�schen";
                    tmp = "Alle TMP-Dateien l�schen";
                    dat = "Alle DAT-Dateien l�schen";
                    gz = "Alle GZ-Dateien l�schen";
                    gif = "Alle GIF-Dateien l�schen";
                   
                   
                    choices.add(gra);
                    aktiv.add(false);
                    choices.add(tra);
                    aktiv.add(false);
                    choices.add(con);
                    aktiv.add(false);
                    choices.add(koo);
                    aktiv.add(false);
                    choices.add(png);
                    aktiv.add(true);
                    choices.add(tmp);
                    aktiv.add(true);
                    choices.add(dat);
                    aktiv.add(false);
                    choices.add(gz);
                    aktiv.add(false);
                    choices.add(gif);
                    aktiv.add(false);
                   
                    Ankreuzdialog dia = new Ankreuzdialog(
                            this,
                            "Geben Sie an, welche Dateitypen aus"
                                + " dem Verzeichnis '"
                                + this.pars.getStdPfad()
                                + "' gel�scht werden sollen",
                            "L�schen best�tigen",
                            butts,
                            choices,
                            aktiv);
                   
                    dia.setVisible(true);
                   
                    if (dia.getResult().equals("OK")) {
                        if (dia.getAuswahl().contains(tmp)) {
                            SonstMeth.deleteALL(
                                    fmg.fmg8.graphVis.Konstanten.TEMP_ENDUNG,
                                    this.pars);
                        }
                       
                        if (dia.getAuswahl().contains(con)) {
                            SonstMeth.deleteALL(
                                    fmg.fmg8.graphVis.Konstanten.BED_ENDUNG,
                                    this.pars);
                        }
                       
                        if (dia.getAuswahl().contains(koo)) {
                            SonstMeth.deleteALL(
                                    fmg.fmg8.graphVis.Konstanten.KOORD_ENDUNG,
                                    this.pars);
                        }

                        if (dia.getAuswahl().contains(gra)) {
                            SonstMeth.deleteALL(
                                    fmg.fmg8.graphVis.Konstanten.GRAPH_ENDUNG,
                                    this.pars);
                        }

                        if (dia.getAuswahl().contains(tra)) {
                            SonstMeth.deleteALL(
                                    fmg.fmg8.graphVis.Konstanten.TRANS_ENDUNG,
                                    this.pars);
                        }

                        if (dia.getAuswahl().contains(png)) {
                            SonstMeth.deleteALL(
                                    fmg.fmg8.graphVis.Konstanten.PNG_ENDUNG,
                                    this.pars);
                        }

                        if (dia.getAuswahl().contains(dat)) {
                            SonstMeth.deleteALL(
                                    "dat",
                                    this.pars);
                        }

                        if (dia.getAuswahl().contains(gz)) {
                            SonstMeth.deleteALL(
                                    "gz",
                                    this.pars);
                        }
                       
                        if (dia.getAuswahl().contains(gif)) {
                            SonstMeth.deleteALL(
                                    "gif",
                                    this.pars);
                        }
                    }
                } else if (cmd.equals("Alle speichern")) {
                    this.speichereAlleGraphen(Messages.getString("Vis.All"));
                }
            }
           
            if (grammOk) {
                this.kantenEinstell.setEnabled(false);
                this.beding.setText("");
                this.folgeZust.setText("");
                this.ktAlter.setText("");
               
                for (int i = 0;
                        i < this.aktGrph.getRob().getVAut().length;
                        i++) {
                    this.aktGrph.getRob().getVAut()[i].setSeqVeraendert();
                }
               
                this.aktGrph.neuZeichnen();
            }
        } catch (Exception e) {
            AllgemeinerDialog nachfrage;
            ArrayList<String> buttons = new ArrayList<String>();
            buttons.add(Messages.getString("SteuerFenster.OK"));
            String output = "";
           
            String[] out = new String[e.getStackTrace().length];
            for (int i = 0; i < out.length; i++) {
                out[i] = e.getStackTrace()[i].toString();
                output += "\n  " + out[i];
            }
           
            SonstMeth.log(SonstMeth.LOG_ERROR,
                          output,
                          this.pars);
           
            nachfrage = new AllgemeinerDialog(
                        this,
                        e.toString()
                        + "\n\nZeile: " + e.getStackTrace()[0].getLineNumber()
                        + "\nMethode: " + e.getStackTrace()[0].getMethodName()
                        + "\nKlasse: " + e.getStackTrace()[0].getClassName()
                        + "\nDatei: " + e.getStackTrace()[0].getFileName(),
                        Messages.getString(
                                      "Vis.UnbehFehler")
                        + e.getStackTrace()[0].getClassName(),
                        buttons,
                        null);
            nachfrage.setVisible(true);
            this.aktGrph.getRob().erzeugeAusSequenzen(
                    altSeq,
                    altCond,
                    null,
                    false);
            this.aktGrph.setzeConds(altCond);
        } finally {
            this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
           
            itG = this.graphen.iterator();
            while (itG.hasNext()) {
                ((Vis) itG.next()).setCursor(
                                new Cursor(Cursor.DEFAULT_CURSOR));
            }
        }
    }

    /**
     * L�scht den angegebenen Graphen aus der Darstellung (und evtl. von der
     * Festplatte). Falls nach dem L�schen kein weiterer Graph existiert,
     * wird ein neuer leerer Graph erzeugt.
     *
     * @param lGraph    Der zu l�schende Graph.
     * @param loeschen  Ob der Graph auch von der Festplatte gel�scht werden
     *                  soll.
     */
    public void loescheGraph(final Vis     lGraph,
                             final boolean loeschen) {
        this.graphen.remove(lGraph);
        this.grAuswahl.remove(
                lGraph.getGraphName());
        if (loeschen) {
            lGraph.loescheGraphDateien();
        }
        lGraph.setVisible(false);
        lGraph.dispose();
        this.graphZaehl--;
        if (this.graphZaehl <= 0) {
            Vis graphFenster;
            graphFenster = new Vis(Messages.getString(
                                "SteuerFenster.EA")
                           + fmg.fmg8.graphVis.Konstanten.STD_GRAPH_NAME
                           + 0
                           + "]",
                           fmg.fmg8.graphVis.Konstanten.STD_GRAPH_NAME
                           + 0,
                           this,
                           this.umg,
                           this.seqErk,
                           this.mutArtVerh,
                           this.mutArtTrans,
                           this.rand,
                           this.kleinsteFreieID(),
                           this.pars,
                           this.autAnz,
                           null);
           
            this.grAuswahl.add(
                             fmg.fmg8.graphVis.Konstanten.STD_GRAPH_NAME
                             + 0);
            this.graphen.add(graphFenster);
            this.graphZaehl++;
        }
    }
   
    /**
     * Startet die Simulation.
     *
     * @param evol  Ob evolviert werden soll.
     */
    private void simStarten(final boolean evol) {
        SimulationsZeit simZ;
        Vis aktVis = this.aktGrph;
        String lauf;
        Vis[] visGr = new Vis[this.graphen.size()];
        int i = 0;
        Iterator<Vis> it = this.graphen.iterator();
        while (it.hasNext()) {
            visGr[i] = (Vis) it.next();
            i++;
        }
       
        this.setzeSimLf(true);
        this.pars.setEvolution(evol);
        this.pars.setBezier(
                fmg.fmg8.graphVis.zeichenModi.Konstanten.BEZIER_ZAHL_SCHNELL);
       
        this.pars.setPNGAutSp(false);
        this.speichereAlleGraphen(Messages.getString("Vis.All"));
        this.pars.setPNGAutSp(true);
        this.selGraph(aktVis);

        if (evol) {
            lauf = "Evolution";
        } else {
            lauf = "Simulation";
        }
       
        this.simGUI = new GuiSimulation(lauf
                                            + " ["
                                            + this.graphen.size()
                                            + " Robots]",
                                        this.sensFenster,
                                        this,
                                        this.pars);

        simZ = new SimulationsZeit(
                this.pars,
                this.simGUI,
                visGr,
                DynFactory.getKonstDyn(
                        this.pars.getDynArt(),
                        this.pars,
                        this.rand));
        this.simGUI.setVisible(true);
        this.simGUI.registriereTakt(simZ);
        this.setVisible(false);
        this.simGUI.simStarten();
    }
   
    /**
     * Setzt alle Graphen auf den angegebenen Siml�uft-Wert.
     *
     * @param wert  Ob gerade eine Simulation l�uft.
     */
    public void setzeSimLf(final boolean wert) {
        Iterator<Vis> it = this.graphen.iterator();

        if (wert) {
            SonstMeth.log(SonstMeth.LOG_INFO,
                          "Simulation gestartet.",
                          this.pars);
           
            SonstMeth.deleteALL(
                    fmg.fmg8.graphVis.Konstanten.TEMP_ENDUNG, this.pars);
            SonstMeth.renameALL(fmg.fmg8.graphVis.Konstanten.GRAPH_ENDUNG,
                                fmg.fmg8.graphVis.Konstanten.TEMP_ENDUNG,
                                this.pars);
        } else {
            SonstMeth.log(SonstMeth.LOG_INFO,
                          "Simulation beendet.",
                          this.pars);
           
            SonstMeth.deleteALL(
                    fmg.fmg8.graphVis.Konstanten.GRAPH_ENDUNG, this.pars);
            SonstMeth.renameALL(fmg.fmg8.graphVis.Konstanten.TEMP_ENDUNG,
                                fmg.fmg8.graphVis.Konstanten.GRAPH_ENDUNG,
                                this.pars);
            SonstMeth.deleteALL(
                    fmg.fmg8.graphVis.Konstanten.TEMP_ENDUNG, this.pars);
        }
      
        while (it.hasNext()) {
            ((Vis) it.next()).setSimLaueft(wert);
        }
    }

    /**
     * Erzeugt einen neuen Graphen mit dem ersten freien Standardnamen.
     *
     * @return Der neue Graph.
     */
    public Vis neuerGraph() {
        String graphName = "";
        int graphNummer = 0;
        Vis graphFenster;
        boolean ok = false;

        while (!ok) {
            graphName = "graph" + graphNummer;
            Iterator<Vis> it = this.graphen.iterator();
            ok = true;
            while (it.hasNext()) {
                if (((Vis)
                    it.next()).toString().equals(graphName)) {
                    ok = false;
                }
            }
            graphNummer++;
        }

        graphFenster = new Vis(
                Messages.getString("SteuerFenster.EA")
                    + graphName + "]",
                graphName,
                this,
                this.umg,
                this.seqErk,
                this.mutArtVerh,
                this.mutArtTrans,
                this.rand,
                this.kleinsteFreieID(),
                this.pars,
                this.autAnz,
                null);

        this.grAuswahl.add(graphName);
        this.graphen.add(graphFenster);
        this.graphZaehl++;
       
        return graphFenster;
    }

    /**
     * Speichert alle Graphen in der Liste <code>this.graphen</code>.
     *
     * @param anfAnw  Die Anweisung, die beim ersten speichern an die
     *                Speichermethode �bergeben wird.
     *
     * @return Ob nach dem Speichern beendet werden soll.
     */
    public boolean speichereAlleGraphen(final String anfAnw) {
        Vis aktgr = this.aktGrph;
        Iterator<Vis> it = this.graphen.iterator();
        Iterator<Vis> it2;
        Vis aktGr;
        String anweisung = anfAnw;

        while (it.hasNext()) {
            it2 = this.graphen.iterator();
            while (it2.hasNext()) {
                ((Vis) it2.next()).setVisible(false);
            }
            aktGr = (Vis) it.next();
            if (!anweisung.equals(Messages.getString("Vis.All"))
                && !anweisung.equals(Messages.getString("Vis.None"))) {
                aktGr.setVisible(true);
            }

            if (anweisung.equals(Messages.getString("Vis.Cancel"))) {
                this.selGraph(aktgr);
                return false;
            }

            anweisung = aktGr.speichereGraph(anweisung);
        }
        if (anweisung.equals(Messages.getString("Vis.Cancel"))) {
            this.selGraph(aktgr);
            return false;
        } else {
            return true;
        }
    }

    /**
     * Aktuellen Graphen setzen.
     *
     * @param aktGr The aktGraph to set.
     */
    public void setAktGraph(final Vis aktGr) {
        this.aktGrph = aktGr;
    }

    /**
     * Selektiert das angegebene Graphfenster (macht es sichtbar, etc).
     *
     * @param graph  Das zu selektierende Graphfenster.
     */
    public void selGraph(final Vis graph) {
        int i = 0;

        while (this.graphen.get(i) != graph) {
            i++;
        }

        this.waehleGraph(i);
        this.selKn(this.aktGrph.getAktSelKnot());
        this.aktGrph.neuZeichnen();
    }

    /**
     * Selektiert das zum angegebenen Roboter geh�rende Graphfenster
     * (macht es sichtbar, etc).
     *
     * @param rob  Der zu selektierende Roboter.
     */
    public void selGraph(final Roboter rob) {
        int i = 0;
        Vis aktVis;
        Vis robVis = (Vis) ((VisMantel) rob.getObserver()).getObserver();
       
        while (i < this.graphen.size()) {
            aktVis = (Vis) this.graphen.get(i);
            if (aktVis.getGraphName().equals(robVis.getGraphName())) {
                aktVis.erzeugeAlleAusSeq(
                        rob.erzeugeStrSeqs(),
                        rob.getConds(),
                        false);
                aktVis.setzeConds(rob.getConds());
                break;
            }
            i++;
        }

        this.waehleGraph(i);
        this.selKn(this.aktGrph.getAktSelKnot());
        this.aktGrph.neuZeichnen();
    }

    /**
     * Setzt <code>this</code> auf "sichtbar".
     */
    public void setzeSichtbar() {
        this.ktList.add(
        "                                                               ");
        this.setVisible(true);
        this.aktGrph.selKnoten(this.aktGrph.getAktSelKnot(), 0);
    }

    /**
     * Gibt die kleinste noch nicht von einem der aktuellen Graphen verwendete
     * ID zur�ck.
     *
     * @return  Die kleinste noch nicht verwendete ID.
     */
    public int kleinsteFreieID() {
        int kleinste = 0;
        Iterator<Vis> it = this.graphen.iterator();
        Vis aktGr;
       
        while (it.hasNext()) {
            aktGr = (Vis) it.next();
            if (kleinste <= aktGr.getRob().getId()) {
                kleinste = aktGr.getRob().getId() + 1;
            }
        }
       
        return kleinste;
    }

    /**
     * Zeichnet alle Vis-Fenster neu.
     */
    public void repaintAll() {
        Iterator<Vis> it = this.graphen.iterator();
        while (it.hasNext()) {
            ((Vis) it.next()).neuZeichnen();
        }
    }
   
    /**
     * Die Startmethode des Frames.
     *
     * @param args  Die Parameter f�r das Parameterobjekt. Sie werden direkt
     *              an die Klasse Parametersatz weitergegeben. Zur Formatierung
     *              der Parameter siehe diese Klasse sowie die Klasse
     *              Konstanten der Pakets statistik.
     */
    public static void main(final String[] args) {
        Parametersatz pr = new Parametersatz(args);
        pr.ergaenze();

        // Info-Datei schreiben:
        SonstMeth.schreibeInfoDatei(pr);

        if (pr.getGraphisch().booleanValue()) {
            SteuerFenster steuer = new SteuerFenster(pr);
            SonstMeth.log(
                    SonstMeth.LOG_DEBUG,
                    "\n" + pr.toString(),
                    pr,
                    "plain",
                    null);
            steuer.ktList.removeAll();
            new Taktgeber(pr, steuer);
        } else {
            fmg.fmg8.umgebung2D.SimulationsZeit.main(args);
        }
    }
}
TOP

Related Classes of fmg.fmg8.graphVis.SteuerFenster

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.