]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.plant3d/src/org/simantics/plant3d/editor/P3DContentOutlinePage.java
Merge "Publish Plant3D feature"
[simantics/3d.git] / org.simantics.plant3d / src / org / simantics / plant3d / editor / P3DContentOutlinePage.java
diff --git a/org.simantics.plant3d/src/org/simantics/plant3d/editor/P3DContentOutlinePage.java b/org.simantics.plant3d/src/org/simantics/plant3d/editor/P3DContentOutlinePage.java
new file mode 100644 (file)
index 0000000..c675b11
--- /dev/null
@@ -0,0 +1,151 @@
+package org.simantics.plant3d.editor;
+
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.resource.LocalResourceManager;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.events.MenuDetectEvent;
+import org.eclipse.swt.events.MenuDetectListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Menu;
+import org.simantics.db.Resource;
+import org.simantics.g3d.scenegraph.base.INode;
+import org.simantics.g3d.scenegraph.base.ParentNode;
+import org.simantics.g3d.vtk.common.NodeSelectionProvider2;
+import org.simantics.g3d.vtk.common.VTKContentOutlinePage;
+import org.simantics.plant3d.Activator;
+import org.simantics.plant3d.scenegraph.EndComponent;
+import org.simantics.plant3d.scenegraph.Equipment;
+import org.simantics.plant3d.scenegraph.InlineComponent;
+import org.simantics.plant3d.scenegraph.Nozzle;
+import org.simantics.plant3d.scenegraph.P3DRootNode;
+import org.simantics.plant3d.scenegraph.PipeRun;
+import org.simantics.plant3d.scenegraph.PipelineComponent;
+import org.simantics.plant3d.scenegraph.TurnComponent;
+import org.simantics.plant3d.scenegraph.controlpoint.PipeControlPoint;
+
+public class P3DContentOutlinePage extends VTKContentOutlinePage<Resource, Object>{
+       
+       private static final boolean DEBUG = false;
+       protected Menu contextMenu;
+       
+       private LocalResourceManager manager = new LocalResourceManager(JFaceResources.getResources());
+       
+       private Image nozzleImage;
+       private Image pipeImage;
+       private Image tankImage;
+       private Image elbowImage;
+       private Image componentImage;
+       
+       public  P3DContentOutlinePage(ParentNode<? extends INode> rootNode, NodeSelectionProvider2<Resource,Object> provider) {
+               super(rootNode,provider);
+               
+               nozzleImage = manager.createImage(Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/Nozzle.png"));
+               pipeImage = manager.createImage(Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/Straight.png"));
+               tankImage = manager.createImage(Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/tank.png"));
+               elbowImage = manager.createImage(Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/Elbow.png"));
+               componentImage = manager.createImage(Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/Component.png"));
+       }
+       
+       @Override
+       protected void createProviders(TreeViewer viewer) {
+               viewer.setContentProvider(new ScenegraphContentProvider() {
+                       @Override
+                       public Object[] getChildren(Object parentElement) {
+                               if (parentElement instanceof P3DRootNode) {
+                                       return ((P3DRootNode)parentElement).getChild().toArray();
+                               }
+                               if (!DEBUG) {
+                                       if (parentElement instanceof PipeRun) {
+                                               return ((PipeRun)parentElement).getSortedChild().toArray();
+                                       }
+                               } else {
+                                       if (parentElement instanceof PipelineComponent) {
+                                               return new Object[]{((PipelineComponent) parentElement).getControlPoint()};
+                                       } else if (parentElement instanceof PipeControlPoint) {
+                                               return new Object[]{((PipeControlPoint) parentElement).getPipelineComponent()};
+                                       }
+                               }
+                               return super.getChildren(parentElement);
+                       }
+                       
+                       @Override
+                       public boolean hasChildren(Object element) {
+                               if (element instanceof P3DRootNode) {
+                                       return ((P3DRootNode)element).getChild().size() > 0;
+                               }
+                               if (!DEBUG) {
+                                       if (element instanceof PipeRun) {
+                                               return ((PipeRun)element).getChild().size() > 0;
+                                       }
+                               } else {
+                                       if (element instanceof PipelineComponent) {
+                                               return ((PipelineComponent) element).getControlPoint() != null;
+                                       } else if (element instanceof PipeControlPoint) {
+                                               return ((PipeControlPoint) element).getPipelineComponent() != null;
+                                       }
+                               }
+                               return super.hasChildren(element);
+                       }
+               });
+               viewer.setLabelProvider(new P3DLabelProvider());
+               
+               hookContextMenu(viewer);
+               viewer.getTree().addMenuDetectListener(new MenuDetectListener() {
+
+                       @Override
+                       public void menuDetected(MenuDetectEvent e) {
+                               contextMenu.setLocation(e.x, e.y);
+                               contextMenu.setVisible(true);
+                       }
+               });
+               
+       }
+       
+       @Override
+       public void dispose() {
+               manager.dispose();
+               super.dispose();
+       }
+       
+       protected void hookContextMenu(TreeViewer viewer) {
+        MenuManager menuMgr = new MenuManager("#PopupMenu");
+        menuMgr.setRemoveAllWhenShown(true);
+        menuMgr.addMenuListener(new IMenuListener() {
+            public void menuAboutToShow(IMenuManager manager) {
+               createContextMenu(manager);
+            }
+        });
+        contextMenu = menuMgr.createContextMenu(viewer.getTree());
+       }
+       
+       protected void createContextMenu(IMenuManager manager) {
+               
+       }
+
+       private class P3DLabelProvider extends ScenegraphLabelProvider {
+               @Override
+               public Image getImage(Object element) {
+                       if (element instanceof PipelineComponent) {
+                               PipelineComponent comp = (PipelineComponent)element;
+                               if (comp instanceof TurnComponent) {
+                                       return elbowImage;
+                               } else if (comp instanceof EndComponent) {
+                                       return componentImage;
+                               } else if (comp instanceof Nozzle) {
+                                       return nozzleImage;
+                               } else if (comp.getControlPoint().isFixed()) {
+                                       return componentImage;
+                               }
+                               return pipeImage;
+                       } else if (element instanceof Equipment) {
+                               return tankImage;
+                       } else if (element instanceof PipeRun) {
+                               return pipeImage;
+                       }
+                       return null;
+               }
+       }
+}