]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.spreadsheet.ui/src/org/simantics/spreadsheet/ui/SelectionListener.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.spreadsheet.ui / src / org / simantics / spreadsheet / ui / SelectionListener.java
1 package org.simantics.spreadsheet.ui;\r
2 \r
3 import javax.swing.JTable;\r
4 import javax.swing.JTextField;\r
5 import javax.swing.event.ListSelectionEvent;\r
6 import javax.swing.event.ListSelectionListener;\r
7 \r
8 import org.eclipse.jface.viewers.StructuredSelection;\r
9 import org.eclipse.swt.widgets.Display;\r
10 import org.simantics.databoard.binding.mutable.Variant;\r
11 import org.simantics.db.layer0.variable.Variable;\r
12 import org.simantics.spreadsheet.Adaptable;\r
13 import org.simantics.spreadsheet.ClientModel;\r
14 import org.simantics.spreadsheet.util.SpreadsheetUtils;\r
15 import org.simantics.utils.ui.jface.ActiveSelectionProvider;\r
16 import org.simantics.ui.selection.VariableWorkbenchSelectionElement;\r
17 \r
18 public class SelectionListener implements ListSelectionListener {\r
19 \r
20         final JTable table;\r
21         final JTextField expression;\r
22         final ExpressionTextListener etl;\r
23         final ActiveSelectionProvider selectionProvider;\r
24         final Adaptable serverModel;\r
25         final ClientModel clientModel;\r
26 \r
27         // It is necessary to keep the table since it is not possible\r
28         // to determine the table from the event's source\r
29         SelectionListener(JTable table, JTextField expression, ExpressionTextListener etl, ActiveSelectionProvider selectionProvider, Adaptable serverModel, ClientModel clientModel) {\r
30                 assert(table != null);\r
31                 assert(selectionProvider != null);\r
32                 this.table = table;\r
33                 this.expression = expression;\r
34                 this.etl = etl;\r
35                 this.selectionProvider = selectionProvider;\r
36                 this.serverModel = serverModel;\r
37                 this.clientModel = clientModel;\r
38         }\r
39 \r
40         public void valueChanged(ListSelectionEvent e) {\r
41 \r
42                 final int[] selectedColumns = table.getSelectedColumns();\r
43                 final int[] selectedRows = table.getSelectedRows();\r
44 \r
45                 if(selectedColumns.length == 1 && selectedRows.length == 1) {\r
46 \r
47                         final TableSelection tableSelection = new TableSelection() {\r
48 \r
49                                 @Override\r
50                                 public int[] getColumns() {\r
51                                         return selectedColumns;\r
52                                 }\r
53 \r
54                                 @Override\r
55                                 public int[] getRows() {\r
56                                         return selectedRows;\r
57                                 }\r
58 \r
59                         };\r
60 \r
61                         final Variable sheet = serverModel.getAdapter(Variable.class);\r
62 \r
63                         final Object cell = table.getValueAt(selectedRows[0], selectedColumns[0]);\r
64                         if(cell != null) {\r
65                                 String expression = clientModel.getPossiblePropertyAt(SpreadsheetUtils.cellName(selectedRows[0], selectedColumns[0]), ClientModel.CONTENT_EXPRESSION);\r
66                                 if(expression == null) {\r
67                                         Variant content = SpreadsheetUtils.getSafeClientVariant(clientModel, SpreadsheetUtils.cellName(selectedRows[0], selectedColumns[0]), ClientModel.CONTENT);\r
68                                         if(content != null)\r
69                                                 expression =  content.getValue().toString();\r
70                                         else\r
71                                                 expression = "";\r
72                                 } else {\r
73                                         expression = "=" + expression;\r
74                                 }\r
75                                 if (this.etl != null) {\r
76                                         if(expression != null) {\r
77                                                 SelectionListener.this.etl.setCell(expression, selectedRows[0], selectedColumns[0]);\r
78                                         } else {\r
79                                                 SelectionListener.this.etl.setCell("", -1, -1);\r
80                                         }\r
81                                 }\r
82 \r
83                                 Display.getDefault().asyncExec(new Runnable() {\r
84                                         @Override\r
85                                         public void run() {\r
86 \r
87                                                 if(sheet != null) {\r
88                                                         selectionProvider.setSelection(new StructuredSelection(new VariableWorkbenchSelectionElement(sheet)));\r
89                                                 } else {\r
90                                                         selectionProvider.setSelection(new StructuredSelection(new Object[] { cell, "", tableSelection}));\r
91                                                 }\r
92 \r
93                                         }\r
94                                 });\r
95                         } else {\r
96 \r
97                                 Display.getDefault().asyncExec(new Runnable() {\r
98 \r
99                                         @Override\r
100                                         public void run() {\r
101 \r
102                                                 if(selectionProvider == null) return;\r
103 \r
104                                                 if(sheet != null) {\r
105                                                         selectionProvider.setSelection(new StructuredSelection(new Object[] { sheet, "", tableSelection}));\r
106                                                 } else {\r
107                                                         selectionProvider.setSelection(new StructuredSelection(new Object[] { "", "", tableSelection}));\r
108                                                 }\r
109 \r
110                                         }\r
111 \r
112                                 });\r
113 \r
114                         }\r
115                 }\r
116 \r
117                 if (e.getValueIsAdjusting()) {\r
118                         // The mouse button has not yet been released\r
119                 }\r
120 \r
121         }\r
122 \r
123 }\r