X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.plant3d%2Fsrc%2Forg%2Fsimantics%2Fplant3d%2Feditor%2FPlant3DEditor.java;h=b4448e670749caef8e30b8685d33422eb922cb55;hb=d7128a534435161910ce5865db60c7874091df74;hp=96789ff11770b871412d5e2d9aaff09bdee0579b;hpb=3ef62df14340e2127ce21fc7ccab1f69f832abc0;p=simantics%2F3d.git diff --git a/org.simantics.plant3d/src/org/simantics/plant3d/editor/Plant3DEditor.java b/org.simantics.plant3d/src/org/simantics/plant3d/editor/Plant3DEditor.java index 96789ff1..b4448e67 100644 --- a/org.simantics.plant3d/src/org/simantics/plant3d/editor/Plant3DEditor.java +++ b/org.simantics.plant3d/src/org/simantics/plant3d/editor/Plant3DEditor.java @@ -7,6 +7,7 @@ import java.util.List; import java.util.Set; import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; @@ -26,8 +27,10 @@ import org.simantics.Simantics; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.Session; +import org.simantics.db.common.request.ParametrizedRead; import org.simantics.db.common.request.ReadRequest; import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.request.combinations.Combinators; import org.simantics.g3d.scenegraph.NodeMap; import org.simantics.g3d.scenegraph.RenderListener; import org.simantics.g3d.scenegraph.base.INode; @@ -78,6 +81,7 @@ import org.simantics.selectionview.StandardPropertyPage; import org.simantics.ui.workbench.IPropertyPage; import org.simantics.ui.workbench.IResourceEditorInput; import org.simantics.ui.workbench.ResourceEditorPart; +import org.simantics.ui.workbench.editor.input.InputValidationCombinators; import org.simantics.utils.threads.ThreadUtils; import org.simantics.utils.ui.ExceptionUtils; @@ -128,25 +132,23 @@ public class Plant3DEditor extends ResourceEditorPart { public static final int X = 0, Y = 1, Z = 2; protected int upDirection = 1; - + + ParametrizedRead INPUT_VALIDATOR = + Combinators.compose( + InputValidationCombinators.hasURI(), + InputValidationCombinators.extractInputResource() + ); + + @Override + protected ParametrizedRead getInputValidator() { + return INPUT_VALIDATOR; + } + @Override public void createPartControl(Composite parent) { this.parent = parent; - //parent.setLayout (new FillLayout ()); - - -// component = new SWTAWTComponent(parent,SWT.NONE) { -// -// @Override -// protected Component createSwingComponent() { -// if (panel == null) { -// panel = new InteractiveVtkPanel(); -// vtkPanelUtil.registerPanel(panel); -// createScene(); -// } -// return panel; -// } -// }; + + activateValidation(); IResourceEditorInput rei = (IResourceEditorInput)getEditorInput(); input = rei.getResource(); @@ -302,34 +304,44 @@ public class Plant3DEditor extends ResourceEditorPart { @Override public void run() { + nodeMap.setChangeTracking(false); nodeMap.populate(); + nodeMap.setChangeTracking(true); panel.addListener(new RenderListener() { - - @Override - public void preRender() { - - } - - @Override - public void postRender() { - panel.removeListener(this); - - try { - P3DUtil.finalizeDBLoad2(rootNode); - if (nodeMap.isRangeModified()); - nodeMap.commit("Load sync"); - } catch (Exception e) { - ExceptionUtils.logAndShowError("Failed to load model correctly", e); - } - - List props = new ArrayList(); - collectProps(rootNode, props); - fitToWindow(props); - } - }); + + @Override + public void preRender() { + + } + + @Override + public void postRender() { + panel.removeListener(this); + + try { + P3DUtil.finalizeDBLoad2(rootNode); + if (nodeMap.getMapping().isRangeModified()) + nodeMap.commit("Load sync"); + } catch (Exception e) { + ExceptionUtils.logAndShowError("Failed to load model correctly", e); + } + + onEditorInitializationComplete(); + + List props = new ArrayList<>(); + collectProps(rootNode, props); + fitToWindow(props); + } + }); } }); - + + } + + /** + * This can be overridden by clients to perform extra initialization tasks + */ + protected void onEditorInitializationComplete() { } protected IMappingSchema getSchema(ReadGraph graph) throws DatabaseException { @@ -515,19 +527,27 @@ public class Plant3DEditor extends ResourceEditorPart { } } + protected class FitToWindow extends Action { + private List selected; + public FitToWindow(List selected) { + super("Fit to Window"); + this.selected = selected; + //setAccelerator('1'); + } + @Override + public void run() { + List props = new ArrayList<>(); + final Collection collection = !selected.isEmpty() ? selected : getRootNode().getChild(); + for (INode n : collection) + collectProps(n, props); + + fitToWindow(props); + getPanel().refresh(); + } + } + protected void createFocusMenu(IMenuManager m, List selected) { - m.add(new Action("Fit to Window") { - @Override - public void run() { - List props = new ArrayList<>(); - final Collection collection = !selected.isEmpty() ? selected : getRootNode().getChild(); - for (INode n : collection) - collectProps(n, props); - - fitToWindow(props); - getPanel().refresh(); - } - }); + m.add(createFitToWindowAction(selected)); if (!selected.isEmpty()) { List actors = new ArrayList<>(); @@ -539,7 +559,11 @@ public class Plant3DEditor extends ResourceEditorPart { } } } - + + protected IAction createFitToWindowAction(List selected) { + return new FitToWindow(selected); + } + private IContentOutlinePage createOutline() { if (rootNode == null || selectionProvider == null) return null;