]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/common/NodeSelectionProvider2.java
Allow setSelection from other components
[simantics/3d.git] / org.simantics.g3d.vtk / src / org / simantics / g3d / vtk / common / NodeSelectionProvider2.java
index 5de69f354b03b38142772ccb227bd339589f95c6..d5b8d70953db52e3dac044cbd224613537b24fa4 100644 (file)
@@ -29,6 +29,7 @@ import org.simantics.g3d.scenegraph.base.INode;
 import org.simantics.g3d.tools.AdaptationUtils;
 import org.simantics.objmap.graph.IMapping;
 import org.simantics.objmap.structural.StructuralResource;
+import org.simantics.utils.ui.AdaptionUtils;
 
 import vtk.vtkProp;
 
@@ -69,6 +70,22 @@ public class NodeSelectionProvider2<DBObject,JavaObject> implements ISelectionPr
        
        @Override
        public void setSelection(ISelection selection) {
+           Collection<IG3DNode> nodes = AdaptionUtils.adaptToCollection(selection, IG3DNode.class);
+           Collection<Resource> resources= AdaptionUtils.adaptToCollection(selection, Resource.class);
+           if (nodes.size() > 0) {
+               processSelection(selection);
+               fireSelectionChanged(this);
+           } else if (resources.size() > 0) {
+               nodes = new ArrayList<IG3DNode>();
+               for (Resource r : resources) {
+                   JavaObject n  = mapping.get((DBObject)r);
+                   if (n instanceof IG3DNode) {
+                       nodes.add((IG3DNode)n);
+                   }
+               }
+               processSelection(new StructuredSelection(nodes.toArray()));
+               fireSelectionChanged(this);
+           }
                
        }