package gve.calc.formula; import java.awt.*; public class PostfixUnaryOpView extends HasBaselineContainer implements HasCursorPos,KeydnListener,View { private PostfixUnaryOp model; public PostfixUnaryOpView(PostfixUnaryOp model,FormulaView view) { this (model,view,new CursorPosLabel(model.getName())); } public PostfixUnaryOpView(PostfixUnaryOp model,FormulaView view,Component operatorView) { this.model = model; add(view.getView(model.child)); add(operatorView); setLayout(new HorizontalLayoutMgr()); } public void updateView(Object with) { System.out.println("PrefixUnaryOpView.updateView() error"); } public Object getModel() { return model; } public void setCursorPos(int pos) { switch (pos) { case Somewhere_LEFT: FormulaView.get(this).setCursorPart(model.child,Somewhere_LEFT); break; case Somewhere_MYRIGHT: case Somewhere_RIGHT: getOperatorView().setCursorPos(Somewhere_RIGHT); break; case Somewhere_MYLEFT: getOperatorView().setCursorPos(Somewhere_LEFT); break; default: getOperatorView().setCursorPos(Somewhere); } } public int getCursorPos() { FormulaView view = FormulaView.get(this); Part cursorpart = view.getCursorPart(); if (Part.isDescendantOr(cursorpart,model.child)) return Somewhere_LEFT; if (cursorpart == model) return getOperatorView().getCursorPos(); return Somewhere; } public void activate() {} public void deactivate() { // While dismantling etc., left or right child could // already be removed. In that case, do nothing if (getComponentCount() == 2) getOperatorView().deactivate(); } HasCursorPos getOperatorView() { return (HasCursorPos)getComponent(1); } public boolean keydn(int key) { FormulaView fview = FormulaView.get(this); HasCursorPos opView = getOperatorView(); int cp = opView.getCursorPos(); if (key == Key_LEFT) { if (cp > 0) { opView.setCursorPos(cp - 1); return true; } else if (cp == 0) { fview.setCursorPart(model.child,Somewhere_RIGHT); return true; } return false; } else if (key == Key_RIGHT) { if (cp >= 0) { if (cp>=0 && cp < model.getName().length()) { opView.setCursorPos(cp + 1); return true; } } else if (Part.isDescendantOr(fview.getCursorPart(),model.child)) { // Cannot go more to the right in a (sub)child on the left side // so move to the middle fview.setCursorComp(this); opView.setCursorPos(0); return true; } return false; } return OperatorController.keydn(key,this); } }