]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.plant3d/src/org/simantics/plant3d/editor/P3DContentOutlinePage.java
Showing error messages when components overlap each other
[simantics/3d.git] / org.simantics.plant3d / src / org / simantics / plant3d / editor / P3DContentOutlinePage.java
index c675b1112f5a3845633c5d6d9cd714d4e1155b39..ed9c4a5baf8eed40b62c3e23c1e98c403b96c7dd 100644 (file)
@@ -1,10 +1,16 @@
 package org.simantics.plant3d.editor;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.eclipse.jface.action.IMenuListener;
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.jface.resource.LocalResourceManager;
+import org.eclipse.jface.viewers.DecorationOverlayIcon;
+import org.eclipse.jface.viewers.IDecoration;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.events.MenuDetectEvent;
 import org.eclipse.swt.events.MenuDetectListener;
@@ -16,9 +22,9 @@ 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.ontology.Plant3D;
 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;
@@ -26,7 +32,7 @@ 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>{
+public class P3DContentOutlinePage extends VTKContentOutlinePage<Resource, INode>{
        
        private static final boolean DEBUG = false;
        protected Menu contextMenu;
@@ -39,14 +45,33 @@ public class P3DContentOutlinePage extends VTKContentOutlinePage<Resource, Objec
        private Image elbowImage;
        private Image componentImage;
        
-       public  P3DContentOutlinePage(ParentNode<? extends INode> rootNode, NodeSelectionProvider2<Resource,Object> provider) {
+       
+       private Image nozzleErrorImage;
+    private Image pipeErrorImage;
+    private Image tankErrorImage;
+    private Image elbowErrorImage;
+    private Image componentErrorImage;
+    
+       public  P3DContentOutlinePage(ParentNode<? extends INode> rootNode, NodeSelectionProvider2<Resource,INode> 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"));
+               ImageDescriptor nozzleDesc = Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/Nozzle.png");
+               ImageDescriptor straightDesc = Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/Straight.png");
+               ImageDescriptor tankDesc = Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/tank.png");
+               ImageDescriptor elbowDesc = Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/Elbow.png");
+               ImageDescriptor componentDesc = Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/Component.png");
+               nozzleImage = manager.createImage(nozzleDesc);
+               pipeImage = manager.createImage(straightDesc);
+               tankImage = manager.createImage(tankDesc);
+               elbowImage = manager.createImage(elbowDesc);
+               componentImage = manager.createImage(componentDesc);
+               
+               ImageDescriptor error = Activator.imageDescriptorFromPlugin("org.simantics.issues.ui", "icons/warning_decoration.png");
+               nozzleErrorImage = manager.createImage(new DecorationOverlayIcon(nozzleDesc, error, IDecoration.BOTTOM_RIGHT));
+               pipeErrorImage = manager.createImage(new DecorationOverlayIcon(straightDesc, error, IDecoration.BOTTOM_RIGHT));
+               tankErrorImage = manager.createImage(new DecorationOverlayIcon(tankDesc, error, IDecoration.BOTTOM_RIGHT));
+               elbowErrorImage = manager.createImage(new DecorationOverlayIcon(elbowDesc, error, IDecoration.BOTTOM_RIGHT));
+               componentErrorImage = manager.createImage(new DecorationOverlayIcon(componentDesc, error, IDecoration.BOTTOM_RIGHT));
        }
        
        @Override
@@ -57,15 +82,26 @@ public class P3DContentOutlinePage extends VTKContentOutlinePage<Resource, Objec
                                if (parentElement instanceof P3DRootNode) {
                                        return ((P3DRootNode)parentElement).getChild().toArray();
                                }
-                               if (!DEBUG) {
-                                       if (parentElement instanceof PipeRun) {
-                                               return ((PipeRun)parentElement).getSortedChild().toArray();
+                               if (parentElement instanceof PipeRun) {
+                                       if (DEBUG) {
+                                               List<Object> list = new ArrayList<Object>();
+                                               list.addAll(((PipeRun)parentElement).getControlPoints());
+                                               list.addAll(((PipeRun)parentElement).getSortedChild());
+                                               return list.toArray();
                                        }
-                               } else {
+                                       return ((PipeRun)parentElement).getSortedChild().toArray();
+                               }
+                               if (DEBUG) {
                                        if (parentElement instanceof PipelineComponent) {
                                                return new Object[]{((PipelineComponent) parentElement).getControlPoint()};
                                        } else if (parentElement instanceof PipeControlPoint) {
-                                               return new Object[]{((PipeControlPoint) parentElement).getPipelineComponent()};
+                                               PipeControlPoint pcp = (PipeControlPoint) parentElement;
+                                               Object arr[] = new Object[pcp.children.size()+1];
+                                               arr[0] = pcp.getPipelineComponent();
+                                               for (int i = 0; i < pcp.children.size();i++) {
+                                                       arr[i+1] = pcp.children.get(i);
+                                               }
+                                               return arr;
                                        }
                                }
                                return super.getChildren(parentElement);
@@ -104,6 +140,18 @@ public class P3DContentOutlinePage extends VTKContentOutlinePage<Resource, Objec
                
        }
        
+       @Override
+       public void propertyChanged(INode node, String id) {
+           // TODO Auto-generated method stub
+           if (node instanceof PipelineComponent) {
+               if (Plant3D.URIs.HasNext.equals(id) || Plant3D.URIs.HasPrevious.equals(id)) {
+                   refershViewer(node.getParent());
+                   return;
+               }
+           }
+           super.propertyChanged(node, id);
+       }
+       
        @Override
        public void dispose() {
                manager.dispose();
@@ -111,14 +159,14 @@ public class P3DContentOutlinePage extends VTKContentOutlinePage<Resource, Objec
        }
        
        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());
+               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) {
@@ -131,15 +179,30 @@ public class P3DContentOutlinePage extends VTKContentOutlinePage<Resource, Objec
                        if (element instanceof PipelineComponent) {
                                PipelineComponent comp = (PipelineComponent)element;
                                if (comp instanceof TurnComponent) {
-                                       return elbowImage;
+                                   if (comp.getError() == null)
+                                       return elbowImage;
+                                   else
+                                       return elbowErrorImage;
                                } else if (comp instanceof EndComponent) {
-                                       return componentImage;
+                                   if (comp.getError() == null)
+                                       return componentImage;
+                                   else
+                                       return componentErrorImage;
                                } else if (comp instanceof Nozzle) {
-                                       return nozzleImage;
+                                   if (comp.getError() == null)
+                                       return nozzleImage;
+                                   else
+                                       return nozzleErrorImage;
                                } else if (comp.getControlPoint().isFixed()) {
-                                       return componentImage;
+                                   if (comp.getError() == null)
+                                       return componentImage;
+                                   else
+                                       return componentErrorImage;
                                }
-                               return pipeImage;
+                               if (comp.getError() == null)
+                                   return pipeImage;
+                               else
+                                   return pipeErrorImage;
                        } else if (element instanceof Equipment) {
                                return tankImage;
                        } else if (element instanceof PipeRun) {