Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCamille Letavernier2017-10-20 14:27:06 +0000
committerLaurent Goubet2018-05-01 12:07:05 +0000
commit1fd9e80ab75d560769cf2f49a954b91a2b62fe7e (patch)
tree886e0deb44b2b7dc68c586e34d80a40e2c70421c
parentcdeb9d0be38f6fd79d680d31e7f16b7970126059 (diff)
downloadorg.eclipse.emf.compare-1fd9e80ab75d560769cf2f49a954b91a2b62fe7e.tar.gz
org.eclipse.emf.compare-1fd9e80ab75d560769cf2f49a954b91a2b62fe7e.tar.xz
org.eclipse.emf.compare-1fd9e80ab75d560769cf2f49a954b91a2b62fe7e.zip
[529882] Synchronize zoom levels and allow changing it in diagram CMV
Bug: 529882 Change-Id: Ia15e5407c86682c9be904f59399bfcbb2d6fabcc Also-by: Philip Langer <planger@eclipsesource.com> Signed-off-by: Camille Letavernier <cletavernier@eclipsesource.com>
-rw-r--r--plugins/org.eclipse.emf.compare.diagram.ide.ui/src/org/eclipse/emf/compare/diagram/ide/ui/internal/contentmergeviewer/diagram/DiagramContentMergeViewer.java98
1 files changed, 96 insertions, 2 deletions
diff --git a/plugins/org.eclipse.emf.compare.diagram.ide.ui/src/org/eclipse/emf/compare/diagram/ide/ui/internal/contentmergeviewer/diagram/DiagramContentMergeViewer.java b/plugins/org.eclipse.emf.compare.diagram.ide.ui/src/org/eclipse/emf/compare/diagram/ide/ui/internal/contentmergeviewer/diagram/DiagramContentMergeViewer.java
index c5cee4c82..628971d5c 100644
--- a/plugins/org.eclipse.emf.compare.diagram.ide.ui/src/org/eclipse/emf/compare/diagram/ide/ui/internal/contentmergeviewer/diagram/DiagramContentMergeViewer.java
+++ b/plugins/org.eclipse.emf.compare.diagram.ide.ui/src/org/eclipse/emf/compare/diagram/ide/ui/internal/contentmergeviewer/diagram/DiagramContentMergeViewer.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2013, 2016 Obeo and others.
+ * Copyright (c) 2013, 2018 Obeo and others.
* 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
@@ -9,6 +9,7 @@
* Obeo - initial API and implementation
* Philip Langer - adaptation for refactoring regarding SizeChange
* Simon Delisle - bug 511047
+ * Camille Letavernier - bug 529882
*******************************************************************************/
package org.eclipse.emf.compare.diagram.ide.ui.internal.contentmergeviewer.diagram;
@@ -74,18 +75,26 @@ import org.eclipse.gef.ConnectionEditPart;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.LayerConstants;
+import org.eclipse.gef.RootEditPart;
import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
import org.eclipse.gef.editparts.LayerManager;
+import org.eclipse.gef.editparts.ZoomListener;
+import org.eclipse.gef.editparts.ZoomManager;
+import org.eclipse.gef.ui.actions.ZoomComboContributionItem;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramRootEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.ListCompartmentEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.ListItemEditPart;
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.gmf.runtime.notation.Edge;
import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IPartService;
+import org.eclipse.ui.PlatformUI;
/**
* Specialized {@link org.eclipse.compare.contentmergeviewer.ContentMergeViewer} that uses
@@ -94,7 +103,7 @@ import org.eclipse.swt.widgets.Composite;
* @author <a href="mailto:cedric.notot@obeo.fr">Cedric Notot</a>
*/
@SuppressWarnings("restriction")
-public class DiagramContentMergeViewer extends EMFCompareContentMergeViewer {
+public class DiagramContentMergeViewer extends EMFCompareContentMergeViewer implements ZoomListener {
/**
* Interface for the management of decorators.
@@ -1745,6 +1754,12 @@ public class DiagramContentMergeViewer extends EMFCompareContentMergeViewer {
/** The unmirrored content provider of this merge viewer. */
private TreeContentMergeViewerContentProvider fContentProvider;
+ /** Flag to store whether this viewer synchronizes the zoom level of all diagrams. */
+ private boolean isSynchronizingZoom;
+
+ /** The contribution item to set the zoom level. */
+ private ZoomComboContributionItem zoomItem;
+
/**
* Creates a new {@link DiagramContentMergeViewer} by calling the super constructor with the given
* parameters.
@@ -1875,6 +1890,85 @@ public class DiagramContentMergeViewer extends EMFCompareContentMergeViewer {
updateToolItems();
+ if (left != null && right != null) {
+ addZoomListener(getAncestorMergeViewer(), this);
+ addZoomListener(getLeftMergeViewer(), this);
+ addZoomListener(getRightMergeViewer(), this);
+ }
+ if (left != null && zoomItem != null) {
+ zoomItem.setZoomManager(getZoomManager(getLeftMergeViewer()));
+ }
+ }
+
+ /**
+ * Adds the specified <code>zoomListener</code> to the zoom manager of the specified <code>viewer</code>.
+ *
+ * @param viewer
+ * The viewer to which the zoom listener should be added.
+ * @param zoomListener
+ * The zoom listener to be added.
+ */
+ private void addZoomListener(DiagramMergeViewer viewer, ZoomListener zoomListener) {
+ final ZoomManager zoomManager = getZoomManager(viewer);
+ if (zoomManager != null) {
+ zoomManager.addZoomListener(zoomListener);
+ }
+ }
+
+ /**
+ * Sets the specified <code>zoom</code> level to the zoom manager of the specified <code>viewer</code>.
+ *
+ * @param viewer
+ * The viewer in which the zoom level should be set.
+ * @param zoom
+ * The zoom level to set.
+ */
+ private void setZoom(DiagramMergeViewer viewer, double zoom) {
+ final ZoomManager zoomManager = getZoomManager(viewer);
+ if (zoomManager != null) {
+ zoomManager.setZoom(zoom);
+ }
+ }
+
+ /**
+ * Obtains the zoom manager from the specified diagram merge <code>viewer</code>.
+ *
+ * @param viewer
+ * The viewer to get the zoom manager from.
+ * @return The zoom manager or <code>null</code> if it couldn't be obtained.
+ */
+ private ZoomManager getZoomManager(DiagramMergeViewer viewer) {
+ final RootEditPart rootEditPart = viewer.getGraphicalViewer().getRootEditPart();
+ if (rootEditPart instanceof DiagramRootEditPart) {
+ return ((DiagramRootEditPart)rootEditPart).getZoomManager();
+ }
+ return null;
+ }
+
+ @Override
+ protected void createToolItems(ToolBarManager toolBarManager) {
+ super.createToolItems(toolBarManager);
+ IPartService partService = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService();
+ zoomItem = new ZoomComboContributionItem(partService);
+ toolBarManager.insert(0, zoomItem);
+ }
+
+ /**
+ * {@inheritDoc} When the zoom on any of the sides changes, the same zoom level is applied to other sides.
+ */
+ @Override
+ public void zoomChanged(double zoom) {
+ if (isSynchronizingZoom) {
+ return;
+ }
+ isSynchronizingZoom = true;
+ try {
+ setZoom(getAncestorMergeViewer(), zoom);
+ setZoom(getLeftMergeViewer(), zoom);
+ setZoom(getRightMergeViewer(), zoom);
+ } finally {
+ isSynchronizingZoom = false;
+ }
}
/**

Back to the top