]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.spreadsheet.ui/src/org/simantics/spreadsheet/ui/ExpressionTextListener.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.spreadsheet.ui / src / org / simantics / spreadsheet / ui / ExpressionTextListener.java
diff --git a/bundles/org.simantics.spreadsheet.ui/src/org/simantics/spreadsheet/ui/ExpressionTextListener.java b/bundles/org.simantics.spreadsheet.ui/src/org/simantics/spreadsheet/ui/ExpressionTextListener.java
new file mode 100644 (file)
index 0000000..98aed3f
--- /dev/null
@@ -0,0 +1,87 @@
+package org.simantics.spreadsheet.ui;\r
+\r
+import java.awt.event.FocusEvent;\r
+import java.awt.event.FocusListener;\r
+import java.awt.event.KeyEvent;\r
+import java.awt.event.KeyListener;\r
+\r
+import javax.swing.JTextField;\r
+\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.databoard.binding.mutable.Variant;\r
+import org.simantics.spreadsheet.CellEditor;\r
+import org.simantics.spreadsheet.ClientModel;\r
+import org.simantics.spreadsheet.util.SpreadsheetUtils;\r
+\r
+public class ExpressionTextListener implements FocusListener, KeyListener {\r
+\r
+       final private JTextField text;\r
+       final private CellEditor editor;\r
+       \r
+       String undoPoint = null;\r
+       int currentRow;\r
+       int currentColumn;\r
+       \r
+       public ExpressionTextListener(JTextField text, CellEditor editor) {\r
+               this.text = text;\r
+               this.editor = editor;\r
+       }\r
+       \r
+       void setCell(String text, int row, int column) {\r
+               this.text.setText(text);\r
+               this.undoPoint = text;\r
+               this.currentRow = row;\r
+               this.currentColumn = column;\r
+       }\r
+       \r
+       void apply() {\r
+               if(undoPoint == null) {\r
+                       // No selection\r
+                       return;\r
+               }\r
+               String current = text.getText();\r
+               if(current.equals(undoPoint)) return;\r
+               if(currentRow == -1 || currentColumn == -1) return;\r
+               \r
+               if (current.startsWith("=")) {\r
+                   editor.edit(null, SpreadsheetUtils.cellName(currentRow, currentColumn), ClientModel.CONTENT_EXPRESSION, current, Bindings.STRING, null);\r
+               } else {\r
+                   editor.edit(null, SpreadsheetUtils.cellName(currentRow, currentColumn), Variant.ofInstance(current), null);\r
+               }\r
+               undoPoint = current;\r
+               \r
+       }\r
+       \r
+       void cancel() {\r
+               if(undoPoint != null)\r
+                       text.setText(undoPoint);\r
+       }\r
+       \r
+       @Override\r
+       public void keyTyped(KeyEvent e) {\r
+       }\r
+       \r
+       @Override\r
+       public void keyReleased(KeyEvent e) {\r
+               if(e.getKeyCode() == KeyEvent.VK_ENTER) {\r
+                       apply();\r
+               }\r
+               if(e.getKeyCode() == KeyEvent.VK_ESCAPE) {\r
+                       cancel();\r
+               }\r
+       }\r
+       \r
+       @Override\r
+       public void keyPressed(KeyEvent e) {\r
+       }\r
+       \r
+       @Override\r
+       public void focusGained(FocusEvent e) {\r
+       }\r
+\r
+       @Override\r
+       public void focusLost(FocusEvent e) {\r
+               apply();\r
+       }\r
+       \r
+}\r