/*
* 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);
}
}
}