package gve.calc.logic;
import awt.*;
import java.awt.*;
import awt.Button;
import java.awt.event.*;
import gve.calc.formula.*;
import gve.calc.logic.*;
public class OperatorModelView extends InfixBinaryOpView implements ActionListener,CreatesPopup {
public OperatorModelView(OperatorModel model,FormulaView view,Component operatorView) {
super(model,view,operatorView);
}
public Component createPopup(int x,int y) {
awt.Button b;
OperatorModel model = (OperatorModel)getModel();
Container cont = new Panel();
cont.setLayout(new GridPackLayout(0,1));
cont.add(b = new Button("Swap operands"));
b.addActionListener(this);
if (model.getKind() == OperatorModel.TRIANGLE) {
cont.add(b = new Button("Add branch"));
b.addActionListener(this);
} else if (model.getKind() == OperatorModel.ASSERTION) {
{ // Don't add a 'start proof' menu if we are already inside a proof.
Part p;
for (p = model.getParent(); p != null; p = p.getParent()) {
if (p instanceof Proof) break;
}
if (p == null) {
cont.add(b = new Button("Start proof"));
b.addActionListener(this);
}
}
cont.add(b = new Button("New proof rule"));
b.addActionListener(this);
}
return cont;
}
public void actionPerformed(ActionEvent evt) {
String cmd = evt.getActionCommand();
FormulaView view = FormulaView.get(this);
Formula f = view.getFormula();
OperatorModel model = (OperatorModel)getModel();
if (cmd.equals("Add branch")) {
Part dummy = new Identifier("");
Identifier child;
f.replace(model,new TableauPart(dummy,child = new Identifier("")));
f.replace(dummy,model);
view.setCursorPart(child);
} else if (cmd.equals("Start proof")) {
Part dummy = new Identifier("");
f.replace(model,dummy);
f.replace(dummy,new Proof(model));
view.setCursorPart(model);
} else if (cmd.equals("New proof rule")) {
Part dummy = new Identifier("");
f.replace(model,dummy);
ProofRule rule;
f.replace(dummy,rule = new ProofRule(model));
view.setCursorPart(rule.elementAt(0,0));
} else super.actionPerformed(evt);
}
}