1 package org.simantics.spreadsheet.ui;
\r
3 import java.awt.event.FocusEvent;
\r
4 import java.awt.event.FocusListener;
\r
5 import java.awt.event.KeyEvent;
\r
6 import java.awt.event.KeyListener;
\r
8 import javax.swing.JTextField;
\r
10 import org.simantics.databoard.Bindings;
\r
11 import org.simantics.databoard.binding.mutable.Variant;
\r
12 import org.simantics.spreadsheet.CellEditor;
\r
13 import org.simantics.spreadsheet.ClientModel;
\r
14 import org.simantics.spreadsheet.util.SpreadsheetUtils;
\r
16 public class ExpressionTextListener implements FocusListener, KeyListener {
\r
18 final private JTextField text;
\r
19 final private CellEditor editor;
\r
21 String undoPoint = null;
\r
25 public ExpressionTextListener(JTextField text, CellEditor editor) {
\r
27 this.editor = editor;
\r
30 void setCell(String text, int row, int column) {
\r
31 this.text.setText(text);
\r
32 this.undoPoint = text;
\r
33 this.currentRow = row;
\r
34 this.currentColumn = column;
\r
38 if(undoPoint == null) {
\r
42 String current = text.getText();
\r
43 if(current.equals(undoPoint)) return;
\r
44 if(currentRow == -1 || currentColumn == -1) return;
\r
46 if (current.startsWith("=")) {
\r
47 editor.edit(null, SpreadsheetUtils.cellName(currentRow, currentColumn), ClientModel.CONTENT_EXPRESSION, current, Bindings.STRING, null);
\r
49 editor.edit(null, SpreadsheetUtils.cellName(currentRow, currentColumn), Variant.ofInstance(current), null);
\r
51 undoPoint = current;
\r
56 if(undoPoint != null)
\r
57 text.setText(undoPoint);
\r
61 public void keyTyped(KeyEvent e) {
\r
65 public void keyReleased(KeyEvent e) {
\r
66 if(e.getKeyCode() == KeyEvent.VK_ENTER) {
\r
69 if(e.getKeyCode() == KeyEvent.VK_ESCAPE) {
\r
75 public void keyPressed(KeyEvent e) {
\r
79 public void focusGained(FocusEvent e) {
\r
83 public void focusLost(FocusEvent e) {
\r