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=db4710ed78933fac3883deaac6e6fdb0989f9a2b;hb=refs%2Fchanges%2F60%2F3460%2F1;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..db4710ed 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,15 +37,15 @@ 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>(); protected IEditorPart part; protected IMapping mapping; - protected VTKNodeMap nodeMap; + protected VTKNodeMap nodeMap; - public NodeSelectionProvider2(IEditorPart part, IMapping mapping, VTKNodeMap nodeMap) { + public NodeSelectionProvider2(IEditorPart part, IMapping mapping, VTKNodeMap nodeMap) { this.part = part; this.mapping = mapping; this.nodeMap = nodeMap; @@ -69,6 +70,26 @@ 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) { + @SuppressWarnings("unchecked") + 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); + } } @@ -81,34 +102,38 @@ public class NodeSelectionProvider2 implements ISelectionPr fireSelectionChanged(event.getSource()); } - @SuppressWarnings("unchecked") 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) { + INode node = nodeMap.getNode(a); + if (node == null) + continue; + if (!selectedNodes.contains(node)) + selectedNodes.add(node); + @SuppressWarnings("unchecked") + 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); + @SuppressWarnings("unchecked") + 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 +154,14 @@ public class NodeSelectionProvider2 implements ISelectionPr } - public List getSelectedNodes() { + public List getSelectedNodes() { return selectedNodes; } + public List> getSelectedItems() { + return selectedItems; + } + @SuppressWarnings("unchecked") public List getSelectedResources() {