package gleichung;

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
/**
 * Aufgabe 6
 *
 * <APPLET CODE="gleichung.GleichungApplet" WIDTH=340 HEIGHT=110></APPLET>
 *
 * @author Christian Semrau
 * <a href="mailto:Christian.Semrau@student.uni-magdeburg.de">
 * Christian.Semrau@student.uni-magdeburg.de</a>
 */
public class GleichungApplet extends Applet implements Runnable, ActionListener {
	Thread kicker;
	GleichungValues Values;
	String Eingabe;

	Button Berechnen = new Button("Berechnen");
	Button NeueSumme = new Button("Neue Summe");
	TextField EingabeZeile = new TextField("1 2 3 4 5 6 7 8 9", 20);
	TextField Summe = new TextField("2000", 5);
	TextField ErgebnisZeile = new TextField(30);
	Checkbox MitDIV = new Checkbox("Mit DIV");
/**
 * 
 * @param event java.awt.event.ActionEvent
 */
public void actionPerformed(ActionEvent event) {
	Object obj = event.getSource();
	if (obj==Berechnen){
		if (kicker!=null)
			stopThread();
		else
			startThread();
	}else
	if (obj==NeueSumme || obj==Summe){
		if (kicker!=null)
			stopThread();
		else{
			if (Values==null || !EingabeZeile.getText().equals(Eingabe)
			|| (MitDIV.getState()!=Values.mitDIV))
				startThread();
			else{
				try{
					String summe = Summe.getText();
					int i = Integer.parseInt(summe);
					Values.sucheLoesung(i, false);
					ErgebnisZeile.setText(Values.toString());
				}catch(NumberFormatException exc){
				}
			}
		}
	}
}
/**
 * Returns information about this applet.
 * @return a string of information about this applet
 */
public String getAppletInfo() {
	return "GleichungApplet\n" + 
		"AlgDs WS99 BelegAufgabe 6\n" + 
		"\n" + 
		"Christian Semrau, Christian.Semrau@student.uni-magdeburg.de\n" + 
		"";
}
/**
 * Initializes the applet.
 * 
 * @see #start
 * @see #stop
 * @see #destroy
 */
public void init() {
	super.init();
	setBackground(Color.white);

	add(Berechnen);
	Berechnen.addActionListener(this);
	Panel eingabe = new Panel();
	eingabe.add(new Label("Zahlen:"));
	eingabe.add(EingabeZeile);
	add(eingabe);
	add(NeueSumme);
	NeueSumme.addActionListener(this);
	Panel summe = new Panel();
	summe.add(new Label("Summe:"));
	summe.add(Summe);
	add(summe);
	Summe.addActionListener(this);
	add(MitDIV);
	Panel ergebnis = new Panel();
	ErgebnisZeile.setEditable(false);
	ergebnis.add(new Label("Loesung:"));
	ergebnis.add(ErgebnisZeile);
	add(ergebnis);

	// insert code to initialize the applet here
}
/**
 * Contains the thread execution loop.
 */
public void run() {
	ErgebnisZeile.setText("working...");
	Values.calculate(kicker);
	if (!Values.stopped)
		ErgebnisZeile.setText(Values.toString());
	else
		Values=null;
	kicker = null;
}
/**
 * Starts up the thread.
 */
public void start() {
	Values = null;
}
/**
 * 
 */
public void startThread() {
	Eingabe = EingabeZeile.getText();
	Values = new GleichungValues(Eingabe+" "+Summe.getText(),
		MitDIV.getState());
	kicker = new Thread(this);
	kicker.start();
}
/**
 * Terminates the thread and leaves it for garbage collection.
 */
public void stop() {
	if (kicker != null){
		kicker = null;
	}
}
/**
 * 
 */
public void stopThread() {
	Values.stopped = true;
	kicker = null;
	ErgebnisZeile.setText("-");
}
}