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