[571517] show top left on opening all graphical editors

With the new incremental growing canvas the default initial position of
the canvas my lead to strange results. For the FBNetwork editors we
already have the approach to show the top left corner with an offset.
This commit brings this code now to all graphical editors.

Bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=571517
Change-Id: I20b8fffc789f9f24c64277ede3b4e9cc3568629c
diff --git a/plugins/org.eclipse.fordiac.ide.application/src/org/eclipse/fordiac/ide/application/editors/FBNetworkEditor.java b/plugins/org.eclipse.fordiac.ide.application/src/org/eclipse/fordiac/ide/application/editors/FBNetworkEditor.java
index 56bc913..d7b4e60 100644
--- a/plugins/org.eclipse.fordiac.ide.application/src/org/eclipse/fordiac/ide/application/editors/FBNetworkEditor.java
+++ b/plugins/org.eclipse.fordiac.ide.application/src/org/eclipse/fordiac/ide/application/editors/FBNetworkEditor.java
@@ -22,8 +22,6 @@
 package org.eclipse.fordiac.ide.application.editors;
 
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.draw2d.FigureCanvas;
-import org.eclipse.draw2d.geometry.Rectangle;
 import org.eclipse.fordiac.ide.application.actions.CopyEditPartsAction;
 import org.eclipse.fordiac.ide.application.actions.CutEditPartsAction;
 import org.eclipse.fordiac.ide.application.actions.DeleteFBNetworkAction;
@@ -41,14 +39,12 @@
 import org.eclipse.fordiac.ide.model.libraryElement.AutomationSystem;
 import org.eclipse.fordiac.ide.model.libraryElement.FBNetwork;
 import org.eclipse.fordiac.ide.model.ui.actions.Open4DIACElementAction;
-import org.eclipse.fordiac.ide.model.ui.editors.AdvancedScrollingGraphicalViewer;
 import org.eclipse.fordiac.ide.systemmanagement.ISystemEditor;
 import org.eclipse.fordiac.ide.systemmanagement.SystemManager;
 import org.eclipse.gef.ContextMenuProvider;
 import org.eclipse.gef.EditPart;
 import org.eclipse.gef.EditPartFactory;
 import org.eclipse.gef.commands.CommandStack;
-import org.eclipse.gef.editparts.FreeformGraphicalRootEditPart;
 import org.eclipse.gef.editparts.ScalableFreeformRootEditPart;
 import org.eclipse.gef.editparts.ZoomManager;
 import org.eclipse.gef.palette.PaletteRoot;
@@ -59,8 +55,6 @@
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.util.TransferDropTargetListener;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Event;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.actions.ActionFactory;
@@ -70,8 +64,6 @@
  */
 public class FBNetworkEditor extends DiagramEditorWithFlyoutPalette implements ISystemEditor {
 
-	private static final int INITIAL_SCROLL_OFFSET = 5;
-
 	private static final PaletteFlyoutPreferences PALETTE_PREFERENCES = new PaletteFlyoutPreferences(
 			"FBNetworkPalette.Location", //$NON-NLS-1$
 			"FBNetworkPalette.Size", //$NON-NLS-1$
@@ -105,32 +97,6 @@
 	}
 
 	@Override
-	public void createPartControl(final Composite parent) {
-		super.createPartControl(parent);
-
-		final AdvancedScrollingGraphicalViewer viewer = getGraphicalViewer();
-		if (viewer.getControl() instanceof FigureCanvas) {
-			final FigureCanvas canvas = (FigureCanvas) viewer.getControl();
-			final FreeformGraphicalRootEditPart rootEditPart = (FreeformGraphicalRootEditPart) getGraphicalViewer()
-					.getRootEditPart();
-			Display.getDefault().asyncExec(() -> {
-				viewer.flush();
-				// if an editpart is selected then the viewer has bee created with something to be shown centered
-				// therefore we will not show the initial position
-				// do not use getSelection() here because it will return always at least one element
-				if (viewer.getSelectedEditParts().isEmpty()) {
-					final Rectangle drawingAreaBounds = rootEditPart.getContentPane().getBounds();
-					canvas.scrollTo(drawingAreaBounds.x - INITIAL_SCROLL_OFFSET,
-							drawingAreaBounds.y - INITIAL_SCROLL_OFFSET);
-				} else {
-					// if we have a selected edit part we want to show it in the middle
-					viewer.revealEditPart((EditPart) viewer.getSelectedEditParts().get(0));
-				}
-			});
-		}
-	}
-
-	@Override
 	protected EditPartFactory getEditPartFactory() {
 		return new ElementEditPartFactory(this);
 	}
diff --git a/plugins/org.eclipse.fordiac.ide.gef/src/org/eclipse/fordiac/ide/gef/DiagramEditor.java b/plugins/org.eclipse.fordiac.ide.gef/src/org/eclipse/fordiac/ide/gef/DiagramEditor.java
index 5d5e184..3e0d083 100644
--- a/plugins/org.eclipse.fordiac.ide.gef/src/org/eclipse/fordiac/ide/gef/DiagramEditor.java
+++ b/plugins/org.eclipse.fordiac.ide.gef/src/org/eclipse/fordiac/ide/gef/DiagramEditor.java
@@ -19,6 +19,7 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.draw2d.FigureCanvas;
 import org.eclipse.draw2d.PositionConstants;
+import org.eclipse.draw2d.geometry.Rectangle;
 import org.eclipse.fordiac.ide.gef.dnd.ParameterDropTargetListener;
 import org.eclipse.fordiac.ide.gef.editparts.ZoomScalableFreeformRootEditPart;
 import org.eclipse.fordiac.ide.gef.handlers.AdvancedGraphicalViewerKeyHandler;
@@ -37,6 +38,7 @@
 import org.eclipse.gef.KeyStroke;
 import org.eclipse.gef.MouseWheelHandler;
 import org.eclipse.gef.dnd.TemplateTransferDropTargetListener;
+import org.eclipse.gef.editparts.FreeformGraphicalRootEditPart;
 import org.eclipse.gef.editparts.ScalableFreeformRootEditPart;
 import org.eclipse.gef.editparts.ZoomManager;
 import org.eclipse.gef.ui.actions.ActionRegistry;
@@ -51,6 +53,7 @@
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IEditorSite;
@@ -70,6 +73,8 @@
 public abstract class DiagramEditor extends GraphicalEditor
 implements ITabbedPropertySheetPageContributor, I4diacModelEditor {
 
+	public static final int INITIAL_SCROLL_OFFSET = 5;
+
 	/** The PROPERTY_CONTRIBUTOR_ID. */
 	public static final String PROPERTY_CONTRIBUTOR_ID = "org.eclipse.fordiac.ide.application.editors.DiagramEditor"; //$NON-NLS-1$
 
@@ -108,6 +113,32 @@
 	}
 
 	@Override
+	public void createPartControl(final Composite parent) {
+		super.createPartControl(parent);
+
+		final AdvancedScrollingGraphicalViewer viewer = getGraphicalViewer();
+		if (viewer.getControl() instanceof FigureCanvas) {
+			final FigureCanvas canvas = (FigureCanvas) viewer.getControl();
+			final FreeformGraphicalRootEditPart rootEditPart = (FreeformGraphicalRootEditPart) getGraphicalViewer()
+					.getRootEditPart();
+			Display.getDefault().asyncExec(() -> {
+				viewer.flush();
+				// if an editpart is selected then the viewer has bee created with something to be shown centered
+				// therefore we will not show the initial position
+				// do not use getSelection() here because it will return always at least one element
+				if (viewer.getSelectedEditParts().isEmpty()) {
+					final Rectangle drawingAreaBounds = rootEditPart.getContentPane().getBounds();
+					canvas.scrollTo(drawingAreaBounds.x - INITIAL_SCROLL_OFFSET,
+							drawingAreaBounds.y - INITIAL_SCROLL_OFFSET);
+				} else {
+					// if we have a selected edit part we want to show it in the middle
+					viewer.revealEditPart((EditPart) viewer.getSelectedEditParts().get(0));
+				}
+			});
+		}
+	}
+
+	@Override
 	protected void createGraphicalViewer(final Composite parent) {
 		final RulerComposite rulerComp = new FordiacRulerComposite(parent, SWT.NONE);
 
@@ -118,7 +149,7 @@
 		hookGraphicalViewer();
 		initializeGraphicalViewer();
 
-		rulerComp.setGraphicalViewer((ScrollingGraphicalViewer) getGraphicalViewer());
+		rulerComp.setGraphicalViewer(getGraphicalViewer());
 	}
 
 	/**
@@ -139,7 +170,7 @@
 	@Override
 	protected void configureGraphicalViewer() {
 		super.configureGraphicalViewer();
-		final AdvancedScrollingGraphicalViewer viewer = (AdvancedScrollingGraphicalViewer) getGraphicalViewer();
+		final AdvancedScrollingGraphicalViewer viewer = getGraphicalViewer();
 
 		final ScalableFreeformRootEditPart root = createRootEditPart();
 
@@ -417,4 +448,9 @@
 		return PROPERTY_CONTRIBUTOR_ID;
 	}
 
+	@Override
+	protected AdvancedScrollingGraphicalViewer getGraphicalViewer() {
+		return (AdvancedScrollingGraphicalViewer) super.getGraphicalViewer();
+	}
+
 }
diff --git a/plugins/org.eclipse.fordiac.ide.gef/src/org/eclipse/fordiac/ide/gef/DiagramEditorWithFlyoutPalette.java b/plugins/org.eclipse.fordiac.ide.gef/src/org/eclipse/fordiac/ide/gef/DiagramEditorWithFlyoutPalette.java
index fd4ded8..b4245e5 100644
--- a/plugins/org.eclipse.fordiac.ide.gef/src/org/eclipse/fordiac/ide/gef/DiagramEditorWithFlyoutPalette.java
+++ b/plugins/org.eclipse.fordiac.ide.gef/src/org/eclipse/fordiac/ide/gef/DiagramEditorWithFlyoutPalette.java
@@ -22,6 +22,7 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.draw2d.FigureCanvas;
 import org.eclipse.draw2d.PositionConstants;
+import org.eclipse.draw2d.geometry.Rectangle;
 import org.eclipse.fordiac.ide.gef.dnd.ParameterDropTargetListener;
 import org.eclipse.fordiac.ide.gef.editparts.ZoomScalableFreeformRootEditPart;
 import org.eclipse.fordiac.ide.gef.handlers.AdvancedGraphicalViewerKeyHandler;
@@ -47,6 +48,7 @@
 import org.eclipse.gef.commands.CommandStack;
 import org.eclipse.gef.dnd.TemplateTransferDragSourceListener;
 import org.eclipse.gef.dnd.TemplateTransferDropTargetListener;
+import org.eclipse.gef.editparts.FreeformGraphicalRootEditPart;
 import org.eclipse.gef.editparts.ScalableFreeformRootEditPart;
 import org.eclipse.gef.editparts.ZoomManager;
 import org.eclipse.gef.ui.actions.ActionRegistry;
@@ -66,6 +68,7 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorPart;
@@ -128,6 +131,32 @@
 	private RulerComposite rulerComp;
 
 	@Override
+	public void createPartControl(final Composite parent) {
+		super.createPartControl(parent);
+
+		final AdvancedScrollingGraphicalViewer viewer = getGraphicalViewer();
+		if (viewer.getControl() instanceof FigureCanvas) {
+			final FigureCanvas canvas = (FigureCanvas) viewer.getControl();
+			final FreeformGraphicalRootEditPart rootEditPart = (FreeformGraphicalRootEditPart) getGraphicalViewer()
+					.getRootEditPart();
+			Display.getDefault().asyncExec(() -> {
+				viewer.flush();
+				// if an editpart is selected then the viewer has bee created with something to be shown centered
+				// therefore we will not show the initial position
+				// do not use getSelection() here because it will return always at least one element
+				if (viewer.getSelectedEditParts().isEmpty()) {
+					final Rectangle drawingAreaBounds = rootEditPart.getContentPane().getBounds();
+					canvas.scrollTo(drawingAreaBounds.x - DiagramEditor.INITIAL_SCROLL_OFFSET,
+							drawingAreaBounds.y - DiagramEditor.INITIAL_SCROLL_OFFSET);
+				} else {
+					// if we have a selected edit part we want to show it in the middle
+					viewer.revealEditPart((EditPart) viewer.getSelectedEditParts().get(0));
+				}
+			});
+		}
+	}
+
+	@Override
 	protected void createGraphicalViewer(final Composite parent) {
 		rulerComp = new FordiacRulerComposite(parent, SWT.NONE);