diff -r 345dd18f020e -r 907b1fff5637 Prover/ProofDisplay.pizza --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Prover/ProofDisplay.pizza Thu Mar 15 10:07:28 2012 +0000 @@ -0,0 +1,106 @@ +package G4ip; + +import pizza.util.Hashtable; +import java.awt.*; +import G4ip.Form.*; + + +/** A label with a surrounding box. + */ +class MyLabel extends Label { + public MyLabel() { super(); } + public MyLabel(String s) { super(s); } + + public void paint(Graphics g) { + Dimension d = this.size(); + g.setColor(Color.gray); + g.drawRect(0,0,d.width-1,d.height-1); + } +} + + +/** Draws a frame on the screen containing a proof. + */ +public class ProofDisplay extends Frame { + Button ok; + Hashtable proof; // contains the indexed sequents + + /** The proof is represented in the hashtable. + * @param proof is a hashtable; the structure of the proof (or tree) + * is mapped onto a sequence of integers; each integer is a key for + * a sequent stored in the hashtable. + */ + public ProofDisplay(Hashtable iproof) { + super("Proof"); + ok = new Button("Close"); + proof = iproof; + + setLayout(new BorderLayout()); + // SOUTH + Panel p = new Panel(); + p.add(ok); + add("South",p); + + //CENTER + Panel display = new Panel(); + printproof(display,1); + add("Center", display); + + pack(); + show(); + } + + /** Recovers the structure of the proofs from the hashtable representation. + */ + public void printproof(Panel p,int index) { + MyLabel l = new MyLabel(proof.get(index).toString()); + l.setAlignment(MyLabel.CENTER); + p.setLayout(new BorderLayout()); + p.add("South",l); + // axiom (do nothing) + if ((proof.get(2*index) == null) && (proof.get(2*index+1) == null)) { + return; + } + // rule with a single premise + if ((proof.get(2*index) != null) && (proof.get(2*index+1) == null)) { + Panel np = new Panel(); + printproof(np,2*index); + p.add("Center",np); + return; + } + // rule with two premises + if ((proof.get(2*index) != null) && (proof.get(2*index+1) != null)) { + Panel np1 = new Panel(); + Panel np2 = new Panel(); + printproof(np1,2*index); + printproof(np2,2*index+1); + p.add("West",np1); + p.add("East",np2); + return; + } + + } + + /** If either the "Close" or the "Window-destroy" button + * is pressed, then close the window. + */ + public boolean handleEvent(Event e) { + if (e.id == Event.ACTION_EVENT && e.target == ok) { + this.finalize(); + return true; + } + if (e.id == Event.WINDOW_DESTROY) { + this.finalize(); + return true; + } + return false; + } + + /** Closes the window. + */ + public void finalize() + { this.dispose(); } + +} + +