X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.proconf.processeditor%2Fsrc%2Forg%2Fsimantics%2Fprocesseditor%2Fviews%2FProcessEditor.java;h=09bdb3168c71f275b3f3ed360e27d3f78a5b2263;hb=1bc4cab9ae4f6d2f5101fb9819c59c05f4b439e2;hp=e57e47b8e0039ba809beb27e81eeee522021b91a;hpb=b4fddf5cd72860d3f99f4b3d2e1a52b7c6f948d2;p=simantics%2F3d.git diff --git a/org.simantics.proconf.processeditor/src/org/simantics/processeditor/views/ProcessEditor.java b/org.simantics.proconf.processeditor/src/org/simantics/processeditor/views/ProcessEditor.java index e57e47b8..09bdb316 100644 --- a/org.simantics.proconf.processeditor/src/org/simantics/processeditor/views/ProcessEditor.java +++ b/org.simantics.proconf.processeditor/src/org/simantics/processeditor/views/ProcessEditor.java @@ -10,70 +10,35 @@ *******************************************************************************/ package org.simantics.processeditor.views; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.KeyEvent; -import org.eclipse.swt.events.KeyListener; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.views.contentoutline.IContentOutlinePage; import org.simantics.db.Graph; import org.simantics.db.Resource; -import org.simantics.db.Session; import org.simantics.db.management.ISessionContext; -import org.simantics.layer0.utils.EntityFactory; import org.simantics.layer0.utils.IEntity; -import org.simantics.layer0.utils.Property; -import org.simantics.processeditor.Activator; import org.simantics.processeditor.ProcessResource; +import org.simantics.processeditor.actions.ConfigureFloorAction; import org.simantics.processeditor.actions.InsertComponentAction; import org.simantics.processeditor.actions.InsertEquipmentAction; import org.simantics.processeditor.actions.InsertNozzleAction; import org.simantics.processeditor.actions.RoutePipeAction; +import org.simantics.processeditor.adapters.ProcessEditorAdapter; +import org.simantics.processeditor.adapters.ProcessEditorSelectionAdapter; import org.simantics.processeditor.common.ControlPointTools; -import org.simantics.processeditor.common.PipingRules; -import org.simantics.processeditor.scenegraph.NonVisibleNode; -import org.simantics.processeditor.scenegraph.PipeComponentNode; -import org.simantics.processeditor.scenegraph.PipeRunNode; -import org.simantics.processeditor.scenegraph.PipelineComponentNode; -import org.simantics.processeditor.stubs.PipeControlPoint; -import org.simantics.processeditor.stubs.PipeRun; import org.simantics.processeditor.stubs.Plant; -import org.simantics.processeditor.stubs.Plant3DResource; import org.simantics.processeditor.tools.PlantEditContribution; import org.simantics.processeditor.tools.PlantVisualizationContribution; import org.simantics.proconf.g3d.base.JmeRenderingComponent; import org.simantics.proconf.g3d.base.ScenegraphAdapter; -import org.simantics.proconf.g3d.base.ScenegraphAdapterImpl; import org.simantics.proconf.g3d.base.SelectionAdapter; import org.simantics.proconf.g3d.base.ThreeDimensionalEditorBase; import org.simantics.proconf.g3d.common.StructuredResourceSelection; -import org.simantics.proconf.g3d.scenegraph.IGeometryNode; -import org.simantics.proconf.g3d.scenegraph.IGraphicsNode; -import org.simantics.proconf.g3d.scenegraph.ISelectableNode; -import org.simantics.proconf.g3d.scenegraph.ParameterizedModelNode; import org.simantics.proconf.g3d.shapes.FloorShape; import org.simantics.proconf.g3d.stubs.G3DNode; -import org.simantics.utils.ErrorLogger; import org.simantics.utils.ui.jface.MenuTools; import com.jme.math.Vector3f; @@ -84,9 +49,7 @@ public class ProcessEditor extends ThreeDimensionalEditorBase { private Resource plantResource = null; - //private List animationControllers = new ArrayList(); - - private Action configureFloorAction = null; + private ConfigureFloorAction configureFloorAction = null; private Geometry floorShape = null; @@ -104,7 +67,7 @@ public class ProcessEditor extends ThreeDimensionalEditorBase { @Override protected ScenegraphAdapter createScenegraphAdapter() { - return new ProcessEditorAdapter(session,getRenderingComponent()); + return new ProcessEditorAdapter(this,session,getRenderingComponent()); } @Override @@ -114,6 +77,7 @@ public class ProcessEditor extends ThreeDimensionalEditorBase { floorShape = FloorShape.getShape(getRenderingComponent().getDisplaySystem().getRenderer(), 100.f,0.2f); getRenderingComponent().getNoCastRoot().attachChild(floorShape); floorShape.setLocalTranslation(new Vector3f(0.f,-0.01f,0.f)); + configureFloorAction.setFloorShape(floorShape); } @Override @@ -122,23 +86,7 @@ public class ProcessEditor extends ThreeDimensionalEditorBase { //actions.add(new ShowTrendsAction(this)); - configureFloorAction = new Action() { - public void run() { - FloorConfigureDialog dialog = new FloorConfigureDialog(ProcessEditor.this.parent.getShell()); - if (dialog.open() == FloorConfigureDialog.CANCEL) - return; - if (dialog.isFloorEnabled()) { - if (floorShape.getParent() == null) - getRenderingComponent().getNoCastRoot().attachChild(floorShape); - } else { - floorShape.removeFromParent(); - } - floorShape.setLocalTranslation(new Vector3f(0.f,(float)dialog.getFloorHeight(),0.f)); - - } - }; - configureFloorAction.setText("Configure floor"); - configureFloorAction.setImageDescriptor(Activator.imageDescriptorFromPlugin("fi.vtt.proconf.ode", "icons/silk/shape_align_bottom.png")); + configureFloorAction = new ConfigureFloorAction(this); // ContextActionFactory extended[] = ContextActionRegistry.getActions("fi.vtt.proconf.shapeeditor.processeditorview"); // for (ContextActionFactory c : extended) { @@ -146,321 +94,30 @@ public class ProcessEditor extends ThreeDimensionalEditorBase { // } } -// protected void stopAnimations() { -// animationSystem.stop(); -// } - protected void fillLocalPullDown() { super.fillLocalPullDown(); MenuTools.getOrCreate(getMenuID(),"Advanced", menuManager).add(configureFloorAction); } - protected class ProcessEditorAdapter extends ScenegraphAdapterImpl { - - public ProcessEditorAdapter(Session session, JmeRenderingComponent component) { - super(session, component); - } - - private class NormalScenegraphQuery extends ScenegraphQuery { - - public NormalScenegraphQuery(Resource node) { - super(node); - } - - - @Override - public void shapeAdded(Graph graph, IGraphicsNode node) { - // FIXME : this won't work like in previous ProConf - } - } - - private Map pipeRunQueries = new HashMap(); - - protected ScenegraphQuery newSubnodeListener(G3DNode node) { - if (node.isInstanceOf(ProcessResource.plant3Dresource.PipeRun)) { - PipeRunControlPointQuery query = new PipeRunControlPointQuery(node.getResource()); - pipeRunQueries.put(node.getResource(), query); - node.getGraph().performQuery(query); -// return new SubnodeListener(node) { -// @Override -// public void shapeAdded(IGraphicsNode node) { -// if (node instanceof IGeometryNode) { -// updateGeometry((IGeometryNode)node); -// -// } -// node.setVisible(true); -// } -// }; - } - return new NormalScenegraphQuery(node.getResource()); - - } - - @Override - protected NodePropertyQuery newRootPropertyListener(G3DNode root) { - // currently Plant does not have any properties. - return null; - } - - private class TransformationQuery extends NodeTransformationQuery { - - public TransformationQuery(Resource res) { - super(res); - } - - @Override - public void shapeUpdated(Graph graph, IGraphicsNode shape) { - //if (shape instanceof IGeometryNode) { - // updateGeometry((IGeometryNode)shape); - //} else { - shape.updateTransform(graph); - //} - } - } - - @Override - protected NodeTransformationQuery newTransformationListener(G3DNode root) { - return new TransformationQuery(root.getResource()); - } - - private class NormalNodePropertyQuery extends org.simantics.proconf.g3d.base.ScenegraphAdapterImpl.NodePropertyQuery { - - public NormalNodePropertyQuery(Resource resource) { - super(resource); - } - - @Override - public void shapeUpdated(Graph graph,IGraphicsNode shape) { - if (shape instanceof IGeometryNode) { - updateGeometry((IGeometryNode)shape); - } else { - shape.updateTransform(graph); - } - } - } - @Override - protected NodePropertyQuery newPropertyListener(G3DNode node) { - return new NormalNodePropertyQuery(node.getResource()); - } - - @Override - protected IGraphicsNode instantiateNode(IGraphicsNode parent, - G3DNode node) { - Plant3DResource p3r = ProcessResource.plant3Dresource; - IGraphicsNode newNode = null; - try { - if (node.isInstanceOf(p3r.Equipment)) { - newNode = new ParameterizedModelNode( - ProcessEditor.this, parent, node.getGraph(), - node.getResource(), p3r.HasGraphics); - } else if (node.isInstanceOf(p3r.PipeRun)) { - newNode = new PipeRunNode(parent, node.getGraph(), node.getResource()); - } else if (node.isInstanceOf(p3r.Nozzle)) { - newNode = new ParameterizedModelNode( - ProcessEditor.this, parent, node.getGraph(), - node.getResource(), p3r.HasGraphics); - // CodedComponent must be handled first since it uses - // hard-coded geometries - // TODO : is this really necessary, or could we unify - // PipeComponentNode, InlineComponentNode,... - } else if (node.isInstanceOf(p3r.CodedComponent)) { - newNode = new PipeComponentNode(ProcessEditor.this, - parent, node.getGraph(), node.getResource()); - } else if (node.isInstanceOf(p3r.NonVisibleComponent)) { - newNode = new NonVisibleNode(parent, node.getGraph(), node.getResource()); - } else if (node.isInstanceOf(p3r.PipelineComponent)) { - newNode = new PipelineComponentNode(ProcessEditor.this, - parent, node.getGraph(), node.getResource()); - } - - // } else if (node instanceof Shape) // Markers (ar/mobile) - // needed this - // newNode = new ShapeNode(TestProcessEditor.this,parent,node); - if (newNode != null) { - if (newNode instanceof ISelectableNode) - ((ISelectableNode) newNode).setVisible(true); - if (newNode instanceof IGeometryNode) { - updateGeometry((IGeometryNode) newNode); - } - return newNode; - } - } catch (Exception e) { - ErrorLogger.defaultLogError("Cannot handle node " + node.getResource(), e); - return null; - } - ErrorLogger.defaultLogError("Cannot handle node " + node.getResource(), null); - return null; - - } - - /** - * This is used to create elbows and straight pipes to pipeline TODO : - * this should be done with rule-engine! - * - * - * @author Marko Luukkainen - * - */ - protected class PipeRunControlPointQuery extends NodeQuery { - private List removed = new ArrayList(); - private List added = new ArrayList(); - - public PipeRunControlPointQuery(Resource r) { - super(r); - if (DEBUG) System.out.println("Created PipeRunControlPointQuery for " + r); - - } - - @Override - protected Object compute2(Graph graph) { - PipeRun run = new PipeRun(graph, nodeResource); - Collection cps = run - .getRelatedObjects(ProcessResource.plant3Dresource.HasControlPoints); - List res = new ArrayList(); - for (IEntity t : cps) - res.add(t.getResource()); - return res; - } - - @Override - public boolean updated(Graph graph, Object oldResult, - Object newResult) { - - removed.clear(); - added.clear(); - - List oldCps = (List) oldResult; - List newCps = (List) newResult; - if (oldCps == null) - oldCps = new ArrayList(); - - for (Resource r : oldCps) { - if (!newCps.contains(r)) - removed.add(r); - } - - for (Resource r : newCps) { - if (!oldCps.contains(r)) - added.add(r); - } - for (Resource r : removed) - removeControlPoint(graph, r); - for (Resource r : added) { - addControlPoint(graph, r); - // ControlPointTools.addControlPoint(new - // PipeRun(graph,pipeRun), new PipeControlPoint(graph, r)); - } - - return (added.size() > 0 || removed.size() > 0); - } - - @Override - public void dispose() { - super.dispose(); - for (ControlPointPropertyQuery q : controlPointPropertyQueries.values()) - q.dispose(); - controlPointPropertyQueries.clear(); - } - - private Map controlPointPropertyQueries = new HashMap(); - - private void addControlPoint(Graph graph, Resource resource) { - ControlPointPropertyQuery query = new ControlPointPropertyQuery(resource); - graph.performQuery(query); - controlPointPropertyQueries.put(resource,query); - } - - private void removeControlPoint(Graph graph, Resource resource) { - ControlPointPropertyQuery query = controlPointPropertyQueries.remove(resource); - query.dispose(); - ControlPointTools.removeControlPoint(new PipeControlPoint( - graph, resource)); - } - - } - protected class ControlPointPropertyQuery extends NodeQuery { - boolean initialized = false; - - public ControlPointPropertyQuery(Resource r) { - super(r); - if (DEBUG) System.out.println("Created ControlPointPropertyQuery for " + r); - } - - @Override - public List compute2(Graph g) { - IEntity t = EntityFactory.create(g,nodeResource); - - Collection properties = t.getRelatedProperties(ProcessResource.builtins.HasProperty); - List propertyValues = new ArrayList(); - p(properties,propertyValues); - - return propertyValues; - } - - private void p(Collection properties, List propertyValues) { - for (Property p : properties) { - Collection subProperties = p.getRelatedProperties(p.getGraph().getBuiltins().HasProperty); - if (subProperties.size() != 0) { - p(subProperties,propertyValues); - } - if (p.hasValue()){ - propertyValues.add(p.getValue()); - } - } - } - - @Override - public boolean updated(Graph graph, Object oldResult, Object newResult) { - PipingRules.pipeControlPointPositionUpdate(graph, this.nodeResource); - if (initialized) { - //PipingRules.pipeControlPointPositionUpdate(graph, this.nodeResource); - } else { - initialized = true; - } - return true; - } - } - - @Override - protected void removeNode(Resource parent, Resource r) { - super.removeNode(parent, r); - PipeRunControlPointQuery q = pipeRunQueries.get(r); - if (q != null) - q.dispose(); - } - - @Override - public void dispose() { - super.dispose(); - } - } - @Override protected void pageSelectionChanged(IWorkbenchPart part, ISelection selection) { - if (!(selection instanceof StructuredResourceSelection)) { - return; - } - - StructuredResourceSelection s = (StructuredResourceSelection) selection; + StructuredResourceSelection s = SelectionAdapter.transformSelection(selection); + selectionAdapter.setCurrentSelection(s); viewChanged = true; - - //if (s.getRootSelection() == null) { - if (!(part instanceof ProcessEditor)) { - //System.out.println("ShapeEditorView.pageSelectionChanged() no root selection"); - ((ProcessEditorSelectionAdapter)selectionAdapter).setEditorSelection(true); - return; + + /* + if (part instanceof ProcessEditor) { + ProcessEditor sender = (ProcessEditor)part; + if (!sender.getPlantResource().equals(plantResource)) { + selectionAdapter.setCurrentSelection(new StructuredResourceSelection()); + selectionAdapter.setEditorSelection(); + return; + } } - //if (!s.getRootSelection().getResource().getId().equals(plant.getResource().getId())) { - ProcessEditor sender = (ProcessEditor)part; - if (!sender.getPlantResource().equals(plantResource)) { -// System.out.println("ShapeEditorView.pageSelectionChanged() not right group " -// + s.getRootSelection().getResource().getId() + " != " + model.getResource().getId()); - selectionAdapter.setCurrentSelection(new StructuredResourceSelection()); - ((ProcessEditorSelectionAdapter)selectionAdapter).setEditorSelection(false); - return; - } + */ + selectionAdapter.setEditorSelection(); } @@ -493,166 +150,7 @@ public class ProcessEditor extends ThreeDimensionalEditorBase { protected SelectionAdapter createSelectionAdapter() { return new ProcessEditorSelectionAdapter(adapter); } - - protected class ProcessEditorSelectionAdapter extends SelectionAdapter { - - - public ProcessEditorSelectionAdapter(ScenegraphAdapter adapter) { - super(adapter); - // TODO Auto-generated constructor stub - } - - @Override - public void setEditorSelection() { - List sel = getSelectedObjects(); - for (IGraphicsNode o : adapter.getNodes()) - if (o instanceof ISelectableNode) { - if (sel.contains(o)) { - ((ISelectableNode)o).setSelected(true); - } else { - ((ISelectableNode)o).setSelected(false); - } - } - List selected = getSelectedResources(); - // TODO : don't know why this code is here, but it seems unnecessary -// for (Resource r : selected) { -// if (!adapter.hasNode(r)) { -// // instantiating a new resource : usin this editor's tc -// Resource resource = graph.getResource(r.getId()); -// adapter.addInbound(resource).setSelected(true); -// -// } -// } - - } - - public void setEditorSelection(boolean addShapes) { - - List sel = getSelectedObjects(); - for (IGraphicsNode o : adapter.getNodes()) - if (o instanceof ISelectableNode) { - if (sel.contains(o)) { - ((ISelectableNode)o).setSelected(true); - } else { - ((ISelectableNode)o).setSelected(false); - } - } - if (addShapes) { - // TODO : don't know why this code is here, but it seems unnecessary -// List selected = getSelectedResources(); -// for (Resource r : selected) { -// if (!adapter.hasNode(r)) { -// if (r.isInstanceOf(GlobalIdMap.get(PSK3DModelingOntologyMapping.EQUIPMENT))) { -// Resource group = GraphicsNodeTools.getModelFromResource(r); -// if (group != null && group.getId() == plant.getResource().getId()) { -//// instantiating a new resource : usin this editor's tc -// Resource resource = graph.getResource(r.getId()); -// adapter.addInbound(resource).setSelected(true); -// } -// -// } -// } -// } - } - } - - @Override - protected void setEditorHighlightSelection() { - List sel = getInteractiveSelectedObjects(); - for (IGraphicsNode o : adapter.getNodes()) - if (o instanceof ISelectableNode) { - if (sel.contains(o)) { - ((ISelectableNode)o).setHighlighted(true); - } else { - ((ISelectableNode)o).setHighlighted(false); - } - } - } - } - - private class FloorConfigureDialog extends Dialog implements KeyListener,SelectionListener { - - private boolean floorEnabled = true; - private double floorHeight = 0.0; - - private Text floorHeightText = null; - private Button floorEnabledButton = null; - - public FloorConfigureDialog(Shell shell) { - super(shell); - } - - @Override - protected Control createDialogArea(Composite parent) { - Composite composite = (Composite) super.createDialogArea(parent); - Label label = new Label(composite, SWT.WRAP); - label.setText("Configure floor"); - GridData data = new GridData(GridData.GRAB_HORIZONTAL - | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL - | GridData.VERTICAL_ALIGN_CENTER); - - data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH); - label.setLayoutData(data); - label.setFont(parent.getFont()); - floorEnabledButton = new Button(composite,SWT.CHECK); - floorEnabledButton.setText("Enabled"); - label = new Label(composite, SWT.WRAP); - label.setText("Height"); - label.setLayoutData(data); - label.setFont(parent.getFont()); - floorHeightText = new Text(composite,SWT.NONE); - - - floorHeightText.addKeyListener(this); - floorEnabledButton.addSelectionListener(this); - floorEnabledButton.setSelection(floorEnabled); - floorHeightText.setText(Double.toString(floorHeight)); - - return composite; - } - - @Override - protected void configureShell(Shell newShell) { - super.configureShell(newShell); - newShell.setText("Configure floor"); - } - - public void keyPressed(KeyEvent e) { - - } - - public void keyReleased(KeyEvent e) { - boolean ok = true; - try { - floorHeight = Double.parseDouble(floorHeightText.getText()); - } catch (NumberFormatException err) { - ok = false; - } - if (ok) { - this.getButton(IDialogConstants.OK_ID).setEnabled(true); - } else { - this.getButton(IDialogConstants.OK_ID).setEnabled(false); - } - } - - public void widgetDefaultSelected(SelectionEvent e) { - - } - - public void widgetSelected(SelectionEvent e) { - floorEnabled = floorEnabledButton.getSelection(); - } - - public boolean isFloorEnabled() { - return floorEnabled; - } - public double getFloorHeight() { - return floorHeight; - } - - } - @Override protected void hookDragAndDrop() { super.hookDragAndDrop(); @@ -687,9 +185,7 @@ public class ProcessEditor extends ThreeDimensionalEditorBase { }); } }); - - - + return page; } return null;