]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/common/NodeSelectionProvider2.java
Overriding selection and hover highlights
[simantics/3d.git] / org.simantics.g3d.vtk / src / org / simantics / g3d / vtk / common / NodeSelectionProvider2.java
index 8c9347cf08a0b2db3e4ffc90b57d7ad5438cfa8a..5de69f354b03b38142772ccb227bd339589f95c6 100644 (file)
-package org.simantics.g3d.vtk.common;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Collection;\r
-import java.util.List;\r
-\r
-import org.eclipse.jface.viewers.ISelection;\r
-import org.eclipse.jface.viewers.ISelectionChangedListener;\r
-import org.eclipse.jface.viewers.ISelectionProvider;\r
-import org.eclipse.jface.viewers.SelectionChangedEvent;\r
-import org.eclipse.jface.viewers.StructuredSelection;\r
-import org.eclipse.ui.IEditorPart;\r
-import org.eclipse.ui.ISelectionListener;\r
-import org.eclipse.ui.IWorkbenchPart;\r
-import org.simantics.db.Resource;\r
-import org.simantics.g3d.scenegraph.IG3DNode;\r
-import org.simantics.g3d.scenegraph.base.INode;\r
-import org.simantics.g3d.tools.AdaptationUtils;\r
-import org.simantics.objmap.graph.IMapping;\r
-import org.simantics.objmap.structural.StructuralResource;\r
-\r
-import vtk.vtkProp;\r
-\r
-public class NodeSelectionProvider2<DBObject,JavaObject> implements ISelectionProvider, ISelectionChangedListener, ISelectionListener{\r
-       private ISelection selection = new StructuredSelection();\r
-       private List<ISelectionChangedListener> listeners = new ArrayList<ISelectionChangedListener>();\r
-       \r
-       List<IG3DNode> selectedNodes = new ArrayList<IG3DNode>(); // selection is ordered\r
-       //List<Resource> selectedResources = new ArrayList<Resource>();\r
-       List<VTKSelectionItem<DBObject>> selectedItems = new ArrayList<VTKSelectionItem<DBObject>>();\r
-       \r
-       IEditorPart part;\r
-       IMapping<DBObject,JavaObject> mapping;\r
-       VTKNodeMap nodeMap;\r
-       \r
-       public NodeSelectionProvider2(IEditorPart part, IMapping<DBObject,JavaObject> mapping, VTKNodeMap nodeMap) {\r
-               this.part = part;\r
-               this.mapping = mapping;\r
-               this.nodeMap = nodeMap;\r
-       }\r
-       \r
-       @Override\r
-       public void addSelectionChangedListener(\r
-                       ISelectionChangedListener listener) {\r
-               listeners.add(listener);\r
-       }\r
-       \r
-       @Override\r
-       public void removeSelectionChangedListener(\r
-                       ISelectionChangedListener listener) {\r
-               listeners.remove(listener);\r
-       }\r
-       \r
-       @Override\r
-       public ISelection getSelection() {\r
-               return selection;\r
-       }\r
-       \r
-       @Override\r
-       public void setSelection(ISelection selection) {\r
-               \r
-       }\r
-       \r
-       // events coming from vtk       \r
-       @Override\r
-       public void selectionChanged(SelectionChangedEvent event) {\r
-               ISelection s = event.getSelection();\r
-               \r
-               processSelection(s);\r
-               fireSelectionChanged(event.getSource());\r
-       }\r
-       \r
-       @SuppressWarnings("unchecked")\r
-       private void processSelection(ISelection s) {\r
-               selectedNodes.clear();\r
-               selectedItems.clear();\r
-               \r
-               Collection<vtkProp> selectedActors = AdaptationUtils.adaptToCollection(s, vtkProp.class);\r
-               if (selectedActors.size() > 0) {\r
-                       for (vtkProp a : selectedActors) {\r
-                               IG3DNode node = (IG3DNode)nodeMap.getNode((vtkProp)a);\r
-                               if (node == null)\r
-                                       continue;\r
-                               if (!selectedNodes.contains(node))\r
-                                       selectedNodes.add(node);\r
-                               DBObject r = mapping.inverseGet((JavaObject)node);\r
-                               selectedItems.add(new VTKSelectionItem<DBObject>(a, node,r));\r
-                       }\r
-               } else {\r
-                       Collection<IG3DNode> selectedNds = AdaptationUtils.adaptToCollection(s, IG3DNode.class);\r
-                       for (INode node : selectedNds) {\r
-                               if (!selectedNodes.contains(node))\r
-                                       selectedNodes.add((IG3DNode)node);\r
-                               DBObject r = mapping.inverseGet((JavaObject)node);\r
-                               selectedItems.add(new VTKSelectionItem<DBObject>(null, (IG3DNode)node,r));\r
-                       }\r
-               }\r
-               \r
-               \r
-               selection = new StructuredSelection(selectedItems);\r
-       }\r
-       \r
-       private void fireSelectionChanged(Object source) {\r
-               SelectionChangedEvent evt = new SelectionChangedEvent((ISelectionProvider)source, selection);\r
-               for (ISelectionChangedListener l : listeners) {\r
-                       l.selectionChanged(evt);\r
-               }\r
-       }\r
-       \r
-       \r
-       \r
-       // events coming from workbench\r
-       @Override\r
-       public void selectionChanged(IWorkbenchPart part, ISelection selection) {\r
-               if (part == this.part)\r
-                       return;\r
-               processSelection(selection);\r
-               \r
-       }\r
-       \r
-       public List<IG3DNode> getSelectedNodes() {\r
-               return selectedNodes;\r
-       }\r
-       \r
-       @SuppressWarnings("unchecked")\r
-       public List<DBObject> getSelectedResources() {\r
-               \r
-               List<DBObject> list = new ArrayList<DBObject>();\r
-               for (VTKSelectionItem<DBObject> i : selectedItems) {\r
-                       DBObject r = (DBObject)i.getAdapter(Resource.class);\r
-                       if (r == null)\r
-                               r = (DBObject)i.getAdapter(StructuralResource.class);\r
-                       if (r == null)\r
-                               continue;\r
-                       if (!list.contains(r))\r
-                               list.add(r);\r
-               }\r
-               return list;\r
-       }\r
-       \r
-       protected INode getNode(DBObject r) {\r
-               return (INode)mapping.get(r);\r
-       }\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2012, 2013 Association for Decentralized Information Management in
+ * Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.g3d.vtk.common;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.simantics.db.Resource;
+import org.simantics.g3d.scenegraph.IG3DNode;
+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 vtk.vtkProp;
+
+public class NodeSelectionProvider2<DBObject,JavaObject> implements ISelectionProvider, ISelectionChangedListener, ISelectionListener{
+    protected ISelection selection = new StructuredSelection();
+       protected List<ISelectionChangedListener> listeners = new ArrayList<ISelectionChangedListener>();
+       
+       protected List<IG3DNode> selectedNodes = new ArrayList<IG3DNode>(); // 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;
+       
+       public NodeSelectionProvider2(IEditorPart part, IMapping<DBObject,JavaObject> mapping, VTKNodeMap nodeMap) {
+               this.part = part;
+               this.mapping = mapping;
+               this.nodeMap = nodeMap;
+       }
+       
+       @Override
+       public void addSelectionChangedListener(
+                       ISelectionChangedListener listener) {
+               listeners.add(listener);
+       }
+       
+       @Override
+       public void removeSelectionChangedListener(
+                       ISelectionChangedListener listener) {
+               listeners.remove(listener);
+       }
+       
+       @Override
+       public ISelection getSelection() {
+               return selection;
+       }
+       
+       @Override
+       public void setSelection(ISelection selection) {
+               
+       }
+       
+       // events coming from vtk       
+       @Override
+       public void selectionChanged(SelectionChangedEvent event) {
+               ISelection s = event.getSelection();
+               
+               processSelection(s);
+               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);
+       }
+       
+       protected void fireSelectionChanged(Object source) {
+               SelectionChangedEvent evt = new SelectionChangedEvent((ISelectionProvider)source, selection);
+               for (ISelectionChangedListener l : listeners) {
+                       l.selectionChanged(evt);
+               }
+       }
+       
+       
+       
+       // events coming from workbench
+       @Override
+       public void selectionChanged(IWorkbenchPart part, ISelection selection) {
+               if (part == this.part)
+                       return;
+               processSelection(selection);
+               
+       }
+       
+       public List<IG3DNode> getSelectedNodes() {
+               return selectedNodes;
+       }
+       
+       @SuppressWarnings("unchecked")
+       public List<DBObject> getSelectedResources() {
+               
+               List<DBObject> list = new ArrayList<DBObject>();
+               for (VTKSelectionItem<DBObject> i : selectedItems) {
+                       DBObject r = (DBObject)i.getAdapter(Resource.class);
+                       if (r == null)
+                               r = (DBObject)i.getAdapter(StructuralResource.class);
+                       if (r == null)
+                               continue;
+                       if (!list.contains(r))
+                               list.add(r);
+               }
+               return list;
+       }
+       
+       protected INode getNode(DBObject r) {
+               return (INode)mapping.get(r);
+       }
+}