X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.modeling.ui%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2Fui%2FdiagramEditor%2FDiagramEditor.java;h=60dc7f5991854a62706aadde0157b4d71cc50e76;hb=a1696e5257fae039410c924155fdeffc1ce1b3e9;hp=58073330ae91f1ba8c2a3ecfac29c2b38aacb3ad;hpb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/DiagramEditor.java b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/DiagramEditor.java index 58073330a..60dc7f599 100644 --- a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/DiagramEditor.java +++ b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/DiagramEditor.java @@ -1,6 +1,6 @@ /******************************************************************************* - * Copyright (c) 2012 Association for Decentralized Information Management in - * Industry THTH ry. + * Copyright (c) 2012, 2017 Association for Decentralized Information Management + * in Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -8,10 +8,13 @@ * * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation + * Semantum Oy - #7586 *******************************************************************************/ package org.simantics.modeling.ui.diagramEditor; import java.lang.reflect.Constructor; +import java.util.Set; +import java.util.function.Predicate; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExecutableExtension; @@ -20,10 +23,14 @@ import org.eclipse.core.runtime.Platform; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.IEditorReference; import org.eclipse.ui.IEditorSite; import org.eclipse.ui.IPartListener2; +import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchPartReference; +import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.EditorPart; @@ -323,13 +330,8 @@ public class DiagramEditor extends EditorPart implements IResourceEditorPart2, I private static final DisposingPolicy DISPOSING_POLICY = new DisposingPolicy(); - - private Runnable disposer = new Runnable() { - @Override - public void run() { - tryDisposeViewer(); - } - }; + + private Runnable disposer = () -> tryDisposeViewer(); private void tryDisposeViewer() { if (viewer != null) { @@ -341,7 +343,7 @@ public class DiagramEditor extends EditorPart implements IResourceEditorPart2, I } } } - + /** * Initializes the diagram viewer if not already initialized. */ @@ -369,4 +371,82 @@ public class DiagramEditor extends EditorPart implements IResourceEditorPart2, I // END: IPartListener2 implementation + /** + * Reinitialize this diagram editor from scratch. + * + *
Must be invoked from the SWT thread.
+ */ + public void reinitializeViewer() { + if (viewer != null) { + DISPOSING_POLICY.removeDisposer(disposer); + tryDisposeViewer(); + try { + viewer = createViewer(); + viewer.init(this, getEditorSite(), getEditorInput(), diagramContainer, selectionProvider); + initializeViewer(); + } catch (PartInitException e) { + // This should never happen! + ErrorLogger.defaultLogError(e); + } + } + } + + /** + * Reinitializes all {@link DiagramEditor} instances in all workbench windows for which + * the specified predicate returnstrue
.
+ *
+ * Must be invoked from the SWT thread.
+ * + * @param predicate + * tester for editor inputs + */ + public static void reinitializeDiagram(Predicatediagram
as their input.
+ *
+ * Must be invoked from the SWT thread.
+ * + * @param diagram + * the diagram resource for which to reinitialize all DiagramEditors + * for + */ + public static void reinitializeDiagram(Resource diagram) { + reinitializeDiagram(input -> input instanceof IResourceEditorInput + && ((IResourceEditorInput) input).getResource().equals(diagram)); + } + + /** + * Reinitializes all DiagramEditor instances in all workbench windows that have + * the specifieddiagrams
as their input.
+ *
+ * Must be invoked from the SWT thread.
+ * + * @param diagrams + * collection of diagram resources for which to reinitialize all DiagramEditors + * for + */ + public static void reinitializeDiagram(Set