package gve.calc.formula; import java.awt.*; public class StaticStringView extends CursorPosLabel implements View,KeydnListener,MouseSensitive { private StaticString model; public StaticStringView(StaticString model,FormulaView view) { super(model.getName()); this.model = model; } public Object getModel() { return model; } public void updateView(Object with) {} public boolean mousePressed(int flags,int x,int y) { return false; } // almost same as IdentifierView.mouseDown public void mouseDown(int flags,int x,int y) { FontMetrics fm = getFontMetrics(getFont()); String string = model.getName(); int len = string.length(); FormulaView view = FormulaView.get(this); for (int i = 0; i < len; i++) { int w = fm.charWidth(string.charAt(i)); if (x < w/2) { view.setCursorComp(this,i); return; } x -= w; // advance one letter to the right } // Place cursor at the rightmost position view.setCursorComp(this,len); } public boolean keydn(int key) { switch (key) { case Key_LEFT: if (getCursorPos() > 0) { setCursorPos(getCursorPos() - 1); return true; } return false; case Key_RIGHT: if (getCursorPos() < model.getName().length()) { setCursorPos(getCursorPos() + 1); return true; } return false; default: if (key == Key_BS) ; // backspace else if (key < 32) return false; Identifier ident = new Identifier(model.getName()); { FormulaView view = FormulaView.get(this); int cp = getCursorPos(); view.getFormula().replace(model,ident); Component identView = view.getView(ident); if (cp >= 0) view.setCursorComp(identView,cp); return ((KeydnListener)identView).keydn(key); } } } }