X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=org.simantics.plant3d%2Fsrc%2Forg%2Fsimantics%2Fplant3d%2Feditor%2FP3DContentOutlinePage.java;fp=org.simantics.plant3d%2Fsrc%2Forg%2Fsimantics%2Fplant3d%2Feditor%2FP3DContentOutlinePage.java;h=c675b1112f5a3845633c5d6d9cd714d4e1155b39;hb=a460e609147d064dd3da464bcf1626845e0f93b4;hp=0000000000000000000000000000000000000000;hpb=3e2205a22ddee674f7936da114f5d520bd83e0ff;p=simantics%2F3d.git 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 index 00000000..c675b111 --- /dev/null +++ b/org.simantics.plant3d/src/org/simantics/plant3d/editor/P3DContentOutlinePage.java @@ -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{ + + 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 rootNode, NodeSelectionProvider2 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; + } + } +}