package gve.calc.logic;
import java.awt.*;
import gve.calc.formula.*;
import gve.calc.formula.Part;
public class ProofRuleView extends TabularView {
public ProofRuleView(ProofRule model,FormulaView view) {
super(model,view);
TabularLayout layout = (TabularLayout)getLayout();
layout.setHgap(2);
}
public void paint(Graphics g) {
super.paint(g);
Dimension siz = getSize();
FormulaView view = FormulaView.get(this);
ProofRule model = (ProofRule)getModel();
// Rules beside name
int y = 0;
{ Component nam = view.getView(model.rules[0]);
if (nam instanceof HasBaseline)
y = ((HasBaseline)nam).getBaseline()/2;
int w = nam.getSize().width;
g.drawLine(0,y,(siz.width-w)/2-2,y);
g.drawLine(siz.width,y,(siz.width+w)/2+1,y);
}
// Border around formula
g.drawLine(0,y,0,siz.height-1);
g.drawLine(0,siz.height-1,siz.width-1,siz.height-1);
g.drawLine(siz.width-1,siz.height-1,siz.width-1,y);
// Rule between conditions and conclusion
y = siz.height - view.getView(model.rules[model.getHeight()-1]).getSize().height - TabularLayout.VSPACE/2 - 2;
g.drawLine(3,y,siz.width-3,y);
}
public boolean keydn(int key) {
FormulaView view = FormulaView.get(this);
ProofRule model = (ProofRule)getModel();
if (key == Key_BS) {
Point p = model.whichOffspring(view.getCursorPart());
if (p == null) return super.keydn(key);
if (p.y>0 && Part.isEmpty(model.rules[p.y])) {
model.removeRow(p.y);
view.setCursorPart(model.rules[p.y-1]);
return true;
}
}
if (key != '\n') return super.keydn(key);
int child;
{ Point p = model.whichOffspring(view.getCursorPart());
if (p == null) return super.keydn(key);
child = p.y;
}
if (child == model.rules.length) return super.keydn(key);
model.insertRow(child+1);
view.setCursorPart(model.rules[child+1]);
return true;
}
}