1 package org.simantics.plant3d.editor;
3 import org.eclipse.jface.action.IMenuListener;
4 import org.eclipse.jface.action.IMenuManager;
5 import org.eclipse.jface.action.MenuManager;
6 import org.eclipse.jface.resource.JFaceResources;
7 import org.eclipse.jface.resource.LocalResourceManager;
8 import org.eclipse.jface.viewers.TreeViewer;
9 import org.eclipse.swt.events.MenuDetectEvent;
10 import org.eclipse.swt.events.MenuDetectListener;
11 import org.eclipse.swt.graphics.Image;
12 import org.eclipse.swt.widgets.Menu;
13 import org.simantics.db.Resource;
14 import org.simantics.g3d.scenegraph.base.INode;
15 import org.simantics.g3d.scenegraph.base.ParentNode;
16 import org.simantics.g3d.vtk.common.NodeSelectionProvider2;
17 import org.simantics.g3d.vtk.common.VTKContentOutlinePage;
18 import org.simantics.plant3d.Activator;
19 import org.simantics.plant3d.scenegraph.EndComponent;
20 import org.simantics.plant3d.scenegraph.Equipment;
21 import org.simantics.plant3d.scenegraph.Nozzle;
22 import org.simantics.plant3d.scenegraph.P3DRootNode;
23 import org.simantics.plant3d.scenegraph.PipeRun;
24 import org.simantics.plant3d.scenegraph.PipelineComponent;
25 import org.simantics.plant3d.scenegraph.TurnComponent;
26 import org.simantics.plant3d.scenegraph.controlpoint.PipeControlPoint;
28 public class P3DContentOutlinePage extends VTKContentOutlinePage<Resource, Object>{
30 private static final boolean DEBUG = false;
31 protected Menu contextMenu;
33 private LocalResourceManager manager = new LocalResourceManager(JFaceResources.getResources());
35 private Image nozzleImage;
36 private Image pipeImage;
37 private Image tankImage;
38 private Image elbowImage;
39 private Image componentImage;
41 public P3DContentOutlinePage(ParentNode<? extends INode> rootNode, NodeSelectionProvider2<Resource,Object> provider) {
42 super(rootNode,provider);
44 nozzleImage = manager.createImage(Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/Nozzle.png"));
45 pipeImage = manager.createImage(Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/Straight.png"));
46 tankImage = manager.createImage(Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/tank.png"));
47 elbowImage = manager.createImage(Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/Elbow.png"));
48 componentImage = manager.createImage(Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/Component.png"));
52 protected void createProviders(TreeViewer viewer) {
53 viewer.setContentProvider(new ScenegraphContentProvider() {
55 public Object[] getChildren(Object parentElement) {
56 if (parentElement instanceof P3DRootNode) {
57 return ((P3DRootNode)parentElement).getChild().toArray();
60 if (parentElement instanceof PipeRun) {
61 return ((PipeRun)parentElement).getSortedChild().toArray();
64 if (parentElement instanceof PipelineComponent) {
65 return new Object[]{((PipelineComponent) parentElement).getControlPoint()};
66 } else if (parentElement instanceof PipeControlPoint) {
67 PipeControlPoint pcp = (PipeControlPoint) parentElement;
68 Object arr[] = new Object[pcp.children.size()+1];
69 arr[0] = pcp.getPipelineComponent();
70 for (int i = 0; i < pcp.children.size();i++) {
71 arr[i+1] = pcp.children.get(i);
76 return super.getChildren(parentElement);
80 public boolean hasChildren(Object element) {
81 if (element instanceof P3DRootNode) {
82 return ((P3DRootNode)element).getChild().size() > 0;
85 if (element instanceof PipeRun) {
86 return ((PipeRun)element).getChild().size() > 0;
89 if (element instanceof PipelineComponent) {
90 return ((PipelineComponent) element).getControlPoint() != null;
91 } else if (element instanceof PipeControlPoint) {
92 return ((PipeControlPoint) element).getPipelineComponent() != null;
95 return super.hasChildren(element);
98 viewer.setLabelProvider(new P3DLabelProvider());
100 hookContextMenu(viewer);
101 viewer.getTree().addMenuDetectListener(new MenuDetectListener() {
104 public void menuDetected(MenuDetectEvent e) {
105 contextMenu.setLocation(e.x, e.y);
106 contextMenu.setVisible(true);
113 public void dispose() {
118 protected void hookContextMenu(TreeViewer viewer) {
119 MenuManager menuMgr = new MenuManager("#PopupMenu");
120 menuMgr.setRemoveAllWhenShown(true);
121 menuMgr.addMenuListener(new IMenuListener() {
122 public void menuAboutToShow(IMenuManager manager) {
123 createContextMenu(manager);
126 contextMenu = menuMgr.createContextMenu(viewer.getTree());
129 protected void createContextMenu(IMenuManager manager) {
133 private class P3DLabelProvider extends ScenegraphLabelProvider {
135 public Image getImage(Object element) {
136 if (element instanceof PipelineComponent) {
137 PipelineComponent comp = (PipelineComponent)element;
138 if (comp instanceof TurnComponent) {
140 } else if (comp instanceof EndComponent) {
141 return componentImage;
142 } else if (comp instanceof Nozzle) {
144 } else if (comp.getControlPoint().isFixed()) {
145 return componentImage;
148 } else if (element instanceof Equipment) {
150 } else if (element instanceof PipeRun) {