]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.spreadsheet.ui;\r
2 \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
7 \r
8 import javax.swing.JTextField;\r
9 \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
15 \r
16 public class ExpressionTextListener implements FocusListener, KeyListener {\r
17 \r
18         final private JTextField text;\r
19         final private CellEditor editor;\r
20         \r
21         String undoPoint = null;\r
22         int currentRow;\r
23         int currentColumn;\r
24         \r
25         public ExpressionTextListener(JTextField text, CellEditor editor) {\r
26                 this.text = text;\r
27                 this.editor = editor;\r
28         }\r
29         \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
35         }\r
36         \r
37         void apply() {\r
38                 if(undoPoint == null) {\r
39                         // No selection\r
40                         return;\r
41                 }\r
42                 String current = text.getText();\r
43                 if(current.equals(undoPoint)) return;\r
44                 if(currentRow == -1 || currentColumn == -1) return;\r
45                 \r
46                 if (current.startsWith("=")) {\r
47                     editor.edit(null, SpreadsheetUtils.cellName(currentRow, currentColumn), ClientModel.CONTENT_EXPRESSION, current, Bindings.STRING, null);\r
48                 } else {\r
49                     editor.edit(null, SpreadsheetUtils.cellName(currentRow, currentColumn), Variant.ofInstance(current), null);\r
50                 }\r
51                 undoPoint = current;\r
52                 \r
53         }\r
54         \r
55         void cancel() {\r
56                 if(undoPoint != null)\r
57                         text.setText(undoPoint);\r
58         }\r
59         \r
60         @Override\r
61         public void keyTyped(KeyEvent e) {\r
62         }\r
63         \r
64         @Override\r
65         public void keyReleased(KeyEvent e) {\r
66                 if(e.getKeyCode() == KeyEvent.VK_ENTER) {\r
67                         apply();\r
68                 }\r
69                 if(e.getKeyCode() == KeyEvent.VK_ESCAPE) {\r
70                         cancel();\r
71                 }\r
72         }\r
73         \r
74         @Override\r
75         public void keyPressed(KeyEvent e) {\r
76         }\r
77         \r
78         @Override\r
79         public void focusGained(FocusEvent e) {\r
80         }\r
81 \r
82         @Override\r
83         public void focusLost(FocusEvent e) {\r
84                 apply();\r
85         }\r
86         \r
87 }\r