1 package org.simantics.spreadsheet.ui;
\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
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
18 public class SelectionListener implements ListSelectionListener {
\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
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
33 this.expression = expression;
\r
35 this.selectionProvider = selectionProvider;
\r
36 this.serverModel = serverModel;
\r
37 this.clientModel = clientModel;
\r
40 public void valueChanged(ListSelectionEvent e) {
\r
42 final int[] selectedColumns = table.getSelectedColumns();
\r
43 final int[] selectedRows = table.getSelectedRows();
\r
45 if(selectedColumns.length == 1 && selectedRows.length == 1) {
\r
47 final TableSelection tableSelection = new TableSelection() {
\r
50 public int[] getColumns() {
\r
51 return selectedColumns;
\r
55 public int[] getRows() {
\r
56 return selectedRows;
\r
61 final Variable sheet = serverModel.getAdapter(Variable.class);
\r
63 final Object cell = table.getValueAt(selectedRows[0], selectedColumns[0]);
\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
69 expression = content.getValue().toString();
\r
73 expression = "=" + expression;
\r
75 if (this.etl != null) {
\r
76 if(expression != null) {
\r
77 SelectionListener.this.etl.setCell(expression, selectedRows[0], selectedColumns[0]);
\r
79 SelectionListener.this.etl.setCell("", -1, -1);
\r
83 Display.getDefault().asyncExec(new Runnable() {
\r
88 selectionProvider.setSelection(new StructuredSelection(new VariableWorkbenchSelectionElement(sheet)));
\r
90 selectionProvider.setSelection(new StructuredSelection(new Object[] { cell, "", tableSelection}));
\r
97 Display.getDefault().asyncExec(new Runnable() {
\r
100 public void run() {
\r
102 if(selectionProvider == null) return;
\r
104 if(sheet != null) {
\r
105 selectionProvider.setSelection(new StructuredSelection(new Object[] { sheet, "", tableSelection}));
\r
107 selectionProvider.setSelection(new StructuredSelection(new Object[] { "", "", tableSelection}));
\r
117 if (e.getValueIsAdjusting()) {
\r
118 // The mouse button has not yet been released
\r