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;
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>>();
protected IEditorPart part;
protected IMapping<DBObject,JavaObject> mapping;
- protected VTKNodeMap nodeMap;
+ protected VTKNodeMap<DBObject, ? extends INode> nodeMap;
- public NodeSelectionProvider2(IEditorPart part, IMapping<DBObject,JavaObject> mapping, VTKNodeMap nodeMap) {
+ public NodeSelectionProvider2(IEditorPart part, IMapping<DBObject,JavaObject> mapping, VTKNodeMap<DBObject, ? extends INode> nodeMap) {
this.part = part;
this.mapping = mapping;
this.nodeMap = nodeMap;
@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) {
+ @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);
+ }
}
fireSelectionChanged(event.getSource());
}
- @SuppressWarnings("unchecked")
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) {
+ 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<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);
+ @SuppressWarnings("unchecked")
+ DBObject r = mapping.inverseGet((JavaObject)node);
+ selectedItems.add(new VTKSelectionItem<DBObject>(null, (IG3DNode)node,r));
+ }
+ }
+
+
+ selection = new StructuredSelection(selectedItems);
}
protected void fireSelectionChanged(Object source) {
}
- public List<IG3DNode> getSelectedNodes() {
+ public List<INode> getSelectedNodes() {
return selectedNodes;
}
+ public List<VTKSelectionItem<DBObject>> getSelectedItems() {
+ return selectedItems;
+ }
+
@SuppressWarnings("unchecked")
public List<DBObject> getSelectedResources() {