-package org.simantics.spreadsheet.ui;\r
-\r
-import javax.swing.JTable;\r
-import javax.swing.JTextField;\r
-import javax.swing.event.ListSelectionEvent;\r
-import javax.swing.event.ListSelectionListener;\r
-\r
-import org.eclipse.jface.viewers.StructuredSelection;\r
-import org.eclipse.swt.widgets.Display;\r
-import org.simantics.databoard.binding.mutable.Variant;\r
-import org.simantics.db.layer0.variable.Variable;\r
-import org.simantics.spreadsheet.Adaptable;\r
-import org.simantics.spreadsheet.ClientModel;\r
-import org.simantics.spreadsheet.util.SpreadsheetUtils;\r
-import org.simantics.utils.ui.jface.ActiveSelectionProvider;\r
-import org.simantics.ui.selection.VariableWorkbenchSelectionElement;\r
-\r
-public class SelectionListener implements ListSelectionListener {\r
-\r
- final JTable table;\r
- final JTextField expression;\r
- final ExpressionTextListener etl;\r
- final ActiveSelectionProvider selectionProvider;\r
- final Adaptable serverModel;\r
- final ClientModel clientModel;\r
-\r
- // It is necessary to keep the table since it is not possible\r
- // to determine the table from the event's source\r
- SelectionListener(JTable table, JTextField expression, ExpressionTextListener etl, ActiveSelectionProvider selectionProvider, Adaptable serverModel, ClientModel clientModel) {\r
- assert(table != null);\r
- assert(selectionProvider != null);\r
- this.table = table;\r
- this.expression = expression;\r
- this.etl = etl;\r
- this.selectionProvider = selectionProvider;\r
- this.serverModel = serverModel;\r
- this.clientModel = clientModel;\r
- }\r
-\r
- public void valueChanged(ListSelectionEvent e) {\r
-\r
- final int[] selectedColumns = table.getSelectedColumns();\r
- final int[] selectedRows = table.getSelectedRows();\r
-\r
- if(selectedColumns.length == 1 && selectedRows.length == 1) {\r
-\r
- final TableSelection tableSelection = new TableSelection() {\r
-\r
- @Override\r
- public int[] getColumns() {\r
- return selectedColumns;\r
- }\r
-\r
- @Override\r
- public int[] getRows() {\r
- return selectedRows;\r
- }\r
-\r
- };\r
-\r
- final Variable sheet = serverModel.getAdapter(Variable.class);\r
-\r
- final Object cell = table.getValueAt(selectedRows[0], selectedColumns[0]);\r
- if(cell != null) {\r
- String expression = clientModel.getPossiblePropertyAt(SpreadsheetUtils.cellName(selectedRows[0], selectedColumns[0]), ClientModel.CONTENT_EXPRESSION);\r
- if(expression == null) {\r
- Variant content = SpreadsheetUtils.getSafeClientVariant(clientModel, SpreadsheetUtils.cellName(selectedRows[0], selectedColumns[0]), ClientModel.CONTENT);\r
- if(content != null)\r
- expression = content.getValue().toString();\r
- else\r
- expression = "";\r
- } else {\r
- expression = "=" + expression;\r
- }\r
- if (this.etl != null) {\r
- if(expression != null) {\r
- SelectionListener.this.etl.setCell(expression, selectedRows[0], selectedColumns[0]);\r
- } else {\r
- SelectionListener.this.etl.setCell("", -1, -1);\r
- }\r
- }\r
-\r
- Display.getDefault().asyncExec(new Runnable() {\r
- @Override\r
- public void run() {\r
-\r
- if(sheet != null) {\r
- selectionProvider.setSelection(new StructuredSelection(new VariableWorkbenchSelectionElement(sheet)));\r
- } else {\r
- selectionProvider.setSelection(new StructuredSelection(new Object[] { cell, "", tableSelection}));\r
- }\r
-\r
- }\r
- });\r
- } else {\r
-\r
- Display.getDefault().asyncExec(new Runnable() {\r
-\r
- @Override\r
- public void run() {\r
-\r
- if(selectionProvider == null) return;\r
-\r
- if(sheet != null) {\r
- selectionProvider.setSelection(new StructuredSelection(new Object[] { sheet, "", tableSelection}));\r
- } else {\r
- selectionProvider.setSelection(new StructuredSelection(new Object[] { "", "", tableSelection}));\r
- }\r
-\r
- }\r
-\r
- });\r
-\r
- }\r
- }\r
-\r
- if (e.getValueIsAdjusting()) {\r
- // The mouse button has not yet been released\r
- }\r
-\r
- }\r
-\r
-}\r
+package org.simantics.spreadsheet.ui;
+
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.swt.widgets.Display;
+import org.simantics.databoard.binding.mutable.Variant;
+import org.simantics.db.layer0.variable.Variable;
+import org.simantics.spreadsheet.Adaptable;
+import org.simantics.spreadsheet.ClientModel;
+import org.simantics.spreadsheet.util.SpreadsheetUtils;
+import org.simantics.utils.ui.jface.ActiveSelectionProvider;
+import org.simantics.ui.selection.VariableWorkbenchSelectionElement;
+
+public class SelectionListener implements ListSelectionListener {
+
+ final JTable table;
+ final JTextField expression;
+ final ExpressionTextListener etl;
+ final ActiveSelectionProvider selectionProvider;
+ final Adaptable serverModel;
+ final ClientModel clientModel;
+
+ // It is necessary to keep the table since it is not possible
+ // to determine the table from the event's source
+ SelectionListener(JTable table, JTextField expression, ExpressionTextListener etl, ActiveSelectionProvider selectionProvider, Adaptable serverModel, ClientModel clientModel) {
+ assert(table != null);
+ assert(selectionProvider != null);
+ this.table = table;
+ this.expression = expression;
+ this.etl = etl;
+ this.selectionProvider = selectionProvider;
+ this.serverModel = serverModel;
+ this.clientModel = clientModel;
+ }
+
+ public void valueChanged(ListSelectionEvent e) {
+
+ final int[] selectedColumns = table.getSelectedColumns();
+ final int[] selectedRows = table.getSelectedRows();
+
+ if(selectedColumns.length == 1 && selectedRows.length == 1) {
+
+ final TableSelection tableSelection = new TableSelection() {
+
+ @Override
+ public int[] getColumns() {
+ return selectedColumns;
+ }
+
+ @Override
+ public int[] getRows() {
+ return selectedRows;
+ }
+
+ };
+
+ final Variable sheet = serverModel.getAdapter(Variable.class);
+
+ final Object cell = table.getValueAt(selectedRows[0], selectedColumns[0]);
+ if(cell != null) {
+
+ String expression = "";
+
+ Object expressionO = clientModel.getPossiblePropertyAt(SpreadsheetUtils.cellName(selectedRows[0], selectedColumns[0]), ClientModel.CONTENT_EXPRESSION);
+ if(expressionO instanceof String) {
+ expression = (String)expressionO;
+ } else if(expressionO instanceof Variant) {
+ expression = ((Variant)expressionO).toString();
+ }
+
+ if(expression == null) {
+ Variant content = SpreadsheetUtils.getSafeClientVariant(clientModel, SpreadsheetUtils.cellName(selectedRows[0], selectedColumns[0]), ClientModel.CONTENT);
+ if(content != null)
+ expression = content.getValue().toString();
+ else
+ expression = "";
+ } else {
+ expression = "=" + expression;
+ }
+ if (this.etl != null) {
+ if(expression != null) {
+ SelectionListener.this.etl.setCell(expression, selectedRows[0], selectedColumns[0]);
+ } else {
+ SelectionListener.this.etl.setCell("", -1, -1);
+ }
+ }
+
+ Display.getDefault().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+
+ if(sheet != null) {
+ selectionProvider.setSelection(new StructuredSelection(new VariableWorkbenchSelectionElement(sheet)));
+ } else {
+ selectionProvider.setSelection(new StructuredSelection(new Object[] { cell, "", tableSelection}));
+ }
+
+ }
+ });
+ } else {
+
+ Display.getDefault().asyncExec(new Runnable() {
+
+ @Override
+ public void run() {
+
+ if(selectionProvider == null) return;
+
+ if(sheet != null) {
+ selectionProvider.setSelection(new StructuredSelection(new Object[] { sheet, "", tableSelection}));
+ } else {
+ selectionProvider.setSelection(new StructuredSelection(new Object[] { "", "", tableSelection}));
+ }
+
+ }
+
+ });
+
+ }
+ }
+
+ if (e.getValueIsAdjusting()) {
+ // The mouse button has not yet been released
+ }
+
+ }
+
+}