X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.g3d.vtk%2Fsrc%2Forg%2Fsimantics%2Fg3d%2Fvtk%2Fcommon%2FNodeSelectionProvider2.java;h=b9e3a0e8fc222f330e1e05e91156d945f7180ac3;hb=b93886889422a3111b05a6944b3bcb2cdd8c416a;hp=5de69f354b03b38142772ccb227bd339589f95c6;hpb=43b9a071783377f64924bb0c2f1930fb49316f6f;p=simantics%2F3d.git diff --git a/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/common/NodeSelectionProvider2.java b/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/common/NodeSelectionProvider2.java index 5de69f35..b9e3a0e8 100644 --- a/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/common/NodeSelectionProvider2.java +++ b/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/common/NodeSelectionProvider2.java @@ -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; @@ -36,7 +37,7 @@ public class NodeSelectionProvider2 implements ISelectionPr protected ISelection selection = new StructuredSelection(); protected List listeners = new ArrayList(); - protected List selectedNodes = new ArrayList(); // selection is ordered + protected List selectedNodes = new ArrayList<>(); // selection is ordered //List selectedResources = new ArrayList(); protected List> selectedItems = new ArrayList>(); @@ -69,6 +70,25 @@ public class NodeSelectionProvider2 implements ISelectionPr @Override public void setSelection(ISelection selection) { + Collection nodes = AdaptionUtils.adaptToCollection(selection, IG3DNode.class); + Collection resources= AdaptionUtils.adaptToCollection(selection, Resource.class); + if (nodes.size() > 0) { + processSelection(selection); + fireSelectionChanged(this); + } else if (resources.size() > 0) { + nodes = new ArrayList(); + 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); + } else { + processSelection(selection); + fireSelectionChanged(this); + } } @@ -85,30 +105,33 @@ public class NodeSelectionProvider2 implements ISelectionPr protected void processSelection(ISelection s) { selectedNodes.clear(); selectedItems.clear(); - - Collection 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(a, node,r)); - } - } else { - Collection 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(null, (IG3DNode)node,r)); - } - } - - - selection = new StructuredSelection(selectedItems); + _processSelection(s); + } + + protected void _processSelection(ISelection s) { + Collection 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(a, node,r)); + } + } else { + Collection 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(null, (IG3DNode)node,r)); + } + } + + + selection = new StructuredSelection(selectedItems); } protected void fireSelectionChanged(Object source) { @@ -129,10 +152,14 @@ public class NodeSelectionProvider2 implements ISelectionPr } - public List getSelectedNodes() { + public List getSelectedNodes() { return selectedNodes; } + public List> getSelectedItems() { + return selectedItems; + } + @SuppressWarnings("unchecked") public List getSelectedResources() {