]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/common/NodeSelectionProvider2.java
Use INode instead of IG3DNode in selections
[simantics/3d.git] / org.simantics.g3d.vtk / src / org / simantics / g3d / vtk / common / NodeSelectionProvider2.java
index d5b8d70953db52e3dac044cbd224613537b24fa4..b9e3a0e8fc222f330e1e05e91156d945f7180ac3 100644 (file)
@@ -37,7 +37,7 @@ public class NodeSelectionProvider2<DBObject,JavaObject> implements ISelectionPr
     protected ISelection selection = new StructuredSelection();
        protected List<ISelectionChangedListener> listeners = new ArrayList<ISelectionChangedListener>();
        
-       protected List<IG3DNode> selectedNodes = new ArrayList<IG3DNode>(); // selection is ordered
+       protected List<INode> selectedNodes = new ArrayList<>(); // selection is ordered
        //List<Resource> selectedResources = new ArrayList<Resource>();
        protected List<VTKSelectionItem<DBObject>> selectedItems = new ArrayList<VTKSelectionItem<DBObject>>();
        
@@ -85,6 +85,9 @@ public class NodeSelectionProvider2<DBObject,JavaObject> implements ISelectionPr
                }
                processSelection(new StructuredSelection(nodes.toArray()));
                fireSelectionChanged(this);
+           } else {
+               processSelection(selection);
+            fireSelectionChanged(this);
            }
                
        }
@@ -102,30 +105,33 @@ public class NodeSelectionProvider2<DBObject,JavaObject> implements ISelectionPr
        protected void processSelection(ISelection s) {
                selectedNodes.clear();
                selectedItems.clear();
-               
-               Collection<vtkProp> selectedActors = AdaptationUtils.adaptToCollection(s, vtkProp.class);
-               if (selectedActors.size() > 0) {
-                       for (vtkProp a : selectedActors) {
-                               IG3DNode node = (IG3DNode)nodeMap.getNode((vtkProp)a);
-                               if (node == null)
-                                       continue;
-                               if (!selectedNodes.contains(node))
-                                       selectedNodes.add(node);
-                               DBObject r = mapping.inverseGet((JavaObject)node);
-                               selectedItems.add(new VTKSelectionItem<DBObject>(a, node,r));
-                       }
-               } else {
-                       Collection<IG3DNode> selectedNds = AdaptationUtils.adaptToCollection(s, IG3DNode.class);
-                       for (INode node : selectedNds) {
-                               if (!selectedNodes.contains(node))
-                                       selectedNodes.add((IG3DNode)node);
-                               DBObject r = mapping.inverseGet((JavaObject)node);
-                               selectedItems.add(new VTKSelectionItem<DBObject>(null, (IG3DNode)node,r));
-                       }
-               }
-               
-               
-               selection = new StructuredSelection(selectedItems);
+               _processSelection(s);
+       }
+       
+       protected void _processSelection(ISelection s) {
+           Collection<vtkProp> selectedActors = AdaptationUtils.adaptToCollection(s, vtkProp.class);
+        if (selectedActors.size() > 0) {
+            for (vtkProp a : selectedActors) {
+                IG3DNode node = (IG3DNode)nodeMap.getNode((vtkProp)a);
+                if (node == null)
+                    continue;
+                if (!selectedNodes.contains(node))
+                    selectedNodes.add(node);
+                DBObject r = mapping.inverseGet((JavaObject)node);
+                selectedItems.add(new VTKSelectionItem<DBObject>(a, node,r));
+            }
+        } else {
+            Collection<IG3DNode> selectedNds = AdaptationUtils.adaptToCollection(s, IG3DNode.class);
+            for (INode node : selectedNds) {
+                if (!selectedNodes.contains(node))
+                    selectedNodes.add((IG3DNode)node);
+                DBObject r = mapping.inverseGet((JavaObject)node);
+                selectedItems.add(new VTKSelectionItem<DBObject>(null, (IG3DNode)node,r));
+            }
+        }
+        
+        
+        selection = new StructuredSelection(selectedItems);
        }
        
        protected void fireSelectionChanged(Object source) {
@@ -146,10 +152,14 @@ public class NodeSelectionProvider2<DBObject,JavaObject> implements ISelectionPr
                
        }
        
-       public List<IG3DNode> getSelectedNodes() {
+       public List<INode> getSelectedNodes() {
                return selectedNodes;
        }
        
+       public List<VTKSelectionItem<DBObject>> getSelectedItems() {
+        return selectedItems;
+    }
+       
        @SuppressWarnings("unchecked")
        public List<DBObject> getSelectedResources() {