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>>();
@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);
+ } else {
+ processSelection(selection);
+ fireSelectionChanged(this);
+ }
}
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) {
}
- public List<IG3DNode> getSelectedNodes() {
+ public List<INode> getSelectedNodes() {
return selectedNodes;
}
+ public List<VTKSelectionItem<DBObject>> getSelectedItems() {
+ return selectedItems;
+ }
+
@SuppressWarnings("unchecked")
public List<DBObject> getSelectedResources() {