--- /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;
+ }
+
+}
+
+