-/*******************************************************************************\r
- * Copyright (c) 2012, 2013 Association for Decentralized Information Management in\r
- * Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- * VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-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);
+ }
+}