Prover/ProverApplet.pizza
changeset 96 907b1fff5637
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/ProverApplet.pizza	Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,150 @@
+package G4ip;
+
+import java.applet.*;
+import java.awt.*;
+import G4ip.Sequent.*;
+import G4ip.Prover.*;
+import G4ip.Parser.*;
+
+/** The applet for the prover.
+  * @author      Christian Urban
+  */
+public class ProverApplet extends Applet {
+  Prover prover;
+  Parser parser;
+
+  Button start;           
+  Button clear;           
+  Button next;            
+  Button stop;           
+  TextField lhs_text;     // place for the program formulae
+  TextField rhs_text;     // place for the goal formula
+  /** A field for various messages (e.g. error messages).
+    */
+  public Label messages;  // to be verbose   
+
+  public void init() {
+    setLayout(new BorderLayout());
+    // NORTH
+    Panel textfields = new Panel();
+    add("North", textfields);
+       // the parameters LHS_size and RHS_size are given in the html-file
+    int LHS_size = Integer.parseInt(this.getParameter("LHS_size"));
+    int RHS_size = Integer.parseInt(this.getParameter("RHS_size"));
+    lhs_text = new TextField(LHS_size);    // program textfield
+    rhs_text = new TextField(RHS_size);    // goal textfield
+    Label separation = new Label("=>");    // for separation
+
+    if (LHS_size > 0) {     // if someone prefears only single side sequents 
+    textfields.add(lhs_text);   }         
+    textfields.add(separation);
+    textfields.add(rhs_text);
+
+    // CENTER
+    Panel buttonfield = new Panel();
+    add("Center", buttonfield);
+    start = new Button("Start");         
+    clear = new Button("Clear");         
+    next  = new Button("Next");          
+    stop  = new Button("Stop");            
+
+    switch_into_input_mode();   // start in input mode
+    buttonfield.add(start);
+    buttonfield.add(clear);
+    buttonfield.add(next);
+    buttonfield.add(stop);
+
+    // SOUTH
+    messages = new Label("");   // for any kind of message
+    messages.setAlignment(Label.CENTER);
+    add("South",messages);
+  }
+  
+  /** When start is pressed; 
+    * start and clear button are disabled;
+    * next and stop button are enabled. 
+    */
+  public void switch_into_prove_mode() { 
+      start.disable();    next.enable();
+      clear.disable();    stop.enable();
+      repaint();
+    }
+
+  /** When start is pressed 
+    * and (hopefully) when prover finishes. 
+    */  
+  public void switch_into_input_mode() { 
+      start.enable();    next.disable(); 
+      clear.enable();    stop.disable();
+      repaint();
+    }
+
+  /** Initiates the parse and prove process. 
+    */  
+  void initiate_proving() {
+      Sequent sequ;
+      messages.setText(""); 
+      messages.repaint();
+      repaint(); 
+      Parser rhs_parser = new Parser(rhs_text.getText());
+      Parser lhs_parser = new Parser(lhs_text.getText());
+      try {                          // try to parse the input 
+	sequ = new Sequent(lhs_parser.parseFormulae(),
+			   rhs_parser.parseFormula());
+      }
+      catch (Exception exc) {        // there was a parser exception 
+	messages.setText(exc.getMessage()); 
+	messages.repaint();
+	repaint(); 
+	return;                     // in case there was an exception
+      }                             // don't run the following code
+      System.out.println(sequ.G.internalString()); 
+      switch_into_prove_mode();
+      prover = new Prover(sequ,this);
+      prover.start();
+  }
+
+  /** Forces the prover to dispose all open frames.
+    */
+  public void destroy() {  
+    if (prover != null && prover.isAlive()) { 
+      prover.stop(); 
+      prover.finalize();
+    }
+  }
+
+
+  /** The actions for the buttons:
+    * this bit of code would be different in Java 1.1
+    */
+  public boolean action(Event e, Object arg) {
+    // clear button has been pressed
+    if (e.target == clear) {
+      messages.setText(""); 
+      lhs_text.setText("");
+      rhs_text.setText(""); 
+      messages.repaint();
+      repaint(); 
+    }
+    // start button has been pressed
+    if (e.target == start) {
+      initiate_proving();
+      return true; 
+    }
+    // stop button has been pressed
+    if (e.target == stop) {
+      switch_into_input_mode();
+      if (prover != null && prover.isAlive()) { prover.stop();  }
+      return true; 
+    }
+    // next button has been pressed
+    if (e.target == next) {
+      if (prover != null && prover.isAlive()) { prover.resume();} 
+      return true; 
+    }
+    return false;
+  }
+
+}
+
+