package lsystem;

import java.util.*;
import java.awt.*;
/**
 * Lindenmayer-System <br>
 * Belegarbeit AlgoDat WS99/SS2000, Aufgabe 8
 * <p>
 * Choice-Objekt, welches die LSysteme enthaelt, deren Namen gelistet sind.
 *
 * @author Christian Semrau<br>
 * Christian.Semrau@student.uni-magdeburg.de<br>
 */
public class LSystemChoice extends Choice {
	/** Name der Choice == Eintrag in der Gruppen-Choice */
	String Name;
	/** die gelisteten LSysteme */
	Vector Systeme;
/**
 * Legt eine leere Liste mit gegebenem Namen an.
 * @param name java.lang.String
 */
public LSystemChoice(String name) {
	super(); // initialisiert die Choice-Variablen
	Name = name;
	Systeme = new Vector();
}
/**
 * Fuegt ein LSystem alphabetisch zur Choice hinzu.
 * @param LS belegLsystem.LSystem
 */
public void addLSystem(LSystem LS) {
	int index = LS.addToVector(Systeme);
	insert(LS.getName(), index);
	invalidate(); // noetig, damit die Choice ihre Groesse anpasst
}
/**
 * Liefert das LSystem am gegebenen Index oder null, wenn der Index
 * ausserhalb des Bereichs liegt.
 * @return belegLsystem2.LSystem
 * @param index int
 */
public LSystem getLSystem(int index) {
	if (index<0 || index>=Systeme.size()) return null;
	return (LSystem)Systeme.elementAt(index);
}
/**
 * Liefert das aktuell ausgewaehlte LSystem dieser Choice.
 * Liefert null, wenn kein LSystem ausgewaehlt ist.
 * @return belegLsystem2.LSystem
 */
public LSystem getSelectedLSystem() {
	return getLSystem(getSelectedIndex());
}
/**
 * Liefert einen String mit dem Namen der Choice und den Namen aller LSysteme.
 * @return java.lang.String
 */
public String listLSystems() {
	StringBuffer sb = new StringBuffer();
	sb.append("[").append(Name).append("]\n");
	for(Enumeration e = Systeme.elements(); e.hasMoreElements(); ){
		LSystem LS = (LSystem)e.nextElement();
		sb.append(LS.toString()).append("\n");
	}
	return sb.toString();
}
/**
 * Entfernt ein LSystem aus der Liste.
 * @param name java.lang.String
 */
public void removeLSystem(String name) {
	int index = LSystem.indexOfName(name, Systeme);
	if (index>=0){
//		System.out.println(index);
		Systeme.removeElementAt(index); // LSystem aus Vector entfernen
		remove(index); // Eintrag aus Choice entfernen
		invalidate(); // passt die Groesse an
//		System.out.println(listLSystems());
	}
}
/**
 * Ersetzt ein LSystem in der Liste.
 * @param LS belegLsystem.LSystem
 */
public void replaceLSystem(LSystem LS) {
	int index = LS.replaceInVector(Systeme);
	if (index>=0){
		// LSystem ist neu und wird eingefuegt
		insert(LS.getName(), index);
		invalidate(); // neues LSystem, Groesse anpassen
	}
}
/**
 * Waehlt den ersten Eintrag aus, wenn er existiert.
 */
public void selectFirst() {
	if (getItemCount()>0)
		select(0);
}
}