]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network.ui/src/org/simantics/district/network/ui/techtype/table/TechTypeTable.java
Handle tech type tables with no component type
[simantics/district.git] / org.simantics.district.network.ui / src / org / simantics / district / network / ui / techtype / table / TechTypeTable.java
index fa0a1acb4632957bd329bcc6f4e4d11ca9beedbb..b18e10c8d63f50c8971ef2fd90150ae783b37e69 100644 (file)
@@ -8,7 +8,6 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
-import java.util.function.Consumer;
 import java.util.stream.Collectors;
 
 import org.eclipse.jface.layout.GridDataFactory;
@@ -17,8 +16,8 @@ import org.eclipse.nebula.widgets.nattable.NatTable;
 import org.eclipse.nebula.widgets.nattable.config.AbstractRegistryConfiguration;
 import org.eclipse.nebula.widgets.nattable.config.CellConfigAttributes;
 import org.eclipse.nebula.widgets.nattable.config.DefaultNatTableStyleConfiguration;
+import org.eclipse.nebula.widgets.nattable.config.EditableRule;
 import org.eclipse.nebula.widgets.nattable.config.IConfigRegistry;
-import org.eclipse.nebula.widgets.nattable.config.IEditableRule;
 import org.eclipse.nebula.widgets.nattable.copy.command.CopyDataCommandHandler;
 import org.eclipse.nebula.widgets.nattable.data.IDataProvider;
 import org.eclipse.nebula.widgets.nattable.edit.EditConfigAttributes;
@@ -268,7 +267,12 @@ public class TechTypeTable extends Composite {
                                cellStyle.setAttributeValue(CellStyleAttributes.BACKGROUND_COLOR, GUIHelper.COLOR_RED);
                                
                                configRegistry.registerConfigAttribute(EditConfigAttributes.CELL_EDITABLE_RULE,
-                                               IEditableRule.ALWAYS_EDITABLE);
+                                               new EditableRule() {
+                                                       @Override
+                                                       public boolean isEditable(int columnIndex, int rowIndex) {
+                                                               return columnIndex == 0;
+                                                       }
+                                               });
                                
                                configRegistry.registerConfigAttribute(
                                                CellConfigAttributes.CELL_STYLE,
@@ -321,7 +325,7 @@ public class TechTypeTable extends Composite {
                                LOGGER.error("Failed to read possible tech type key name for {}", componentType, e);
                        }
                }
-               return keyName.startsWith("_") ? keyName.substring(1) : keyName;
+               return keyName != null && keyName.startsWith("_") ? keyName.substring(1) : keyName;
        }
 
        @Override
@@ -336,8 +340,10 @@ public class TechTypeTable extends Composite {
                
                this.componentType = componentType;
                this.keyName = getKeyColumnName(componentType);
-               
-               Simantics.getSession().asyncRequest(new TableDataRequest(componentType), new TableDataListener(componentType));
+
+               if (componentType != null) {
+                       Simantics.getSession().asyncRequest(new TableDataRequest(componentType), new TableDataListener(componentType));
+               }
        }
 
        private final class TableDataListener implements Listener<Triple<Resource, String, List<Integer>>> {
@@ -350,6 +356,9 @@ public class TechTypeTable extends Composite {
                @Override
                public void execute(Triple<Resource, String, List<Integer>> result) {
                        TechTypeTable.this.getDisplay().asyncExec(() -> {
+                               if (isDisposed() || result == null)
+                                       return;
+                               
                                TechTypeTable.this.tableResource = result.first;
                                String data = result.second;
                                int[] enabled = result.third.stream().mapToInt(Integer::intValue).toArray();