/******************************************************************************* * Copyright (c) 2010-2015 Henshin developers. 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 * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * TU Berlin, University of Luxembourg, SES S.A. *******************************************************************************/ package de.tub.tfs.muvitor.ui.utils; import java.util.List; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.ListenerList; import org.eclipse.draw2d.ScalableFigure; import org.eclipse.draw2d.ScalableFreeformLayeredPane; import org.eclipse.draw2d.Viewport; import org.eclipse.draw2d.geometry.Point; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.gef.editparts.ZoomListener; import org.eclipse.gef.editparts.ZoomManager; import org.eclipse.gef.ui.actions.ZoomComboContributionItem; /** * This class implements a ZoomManager that delegates method calls to another * {@link ZoomManager} which can be replaced. * * <p> * It is needed if multiple graphical viewers are used on a page that provides a * ZoomManager for a {@link ZoomComboContributionItem}: Eclipse is updating the * item's zoom manager only by its IPartService that is triggered by part * activation which can not be fired manually. <br> * To be able to handle updating the {@link ZoomManager} of the * {@link ZoomComboContributionItem} manually this delegating * {@link ZoomManager} is provided via {@link IAdaptable#getAdapter(Class)}. The * actual {@link ZoomManager} this delegate refers to is being replaced by the * page when the current viewer changes. * </p> * * @author Tony Modica */ public class ZoomManagerDelegate extends ZoomManager implements ZoomListener { /** * The current {@link ZoomManager} that method calls are delegated to. */ private ZoomManager currentZoomManager; /** * The listeners that listen to this delegate. */ private final ListenerList listenerList = new ListenerList(); /** * Standard constructor that calls the super constructor with null arguments * since method calls will be delegated to {@link #currentZoomManager}. * {@link #currentZoomManager}. */ public ZoomManagerDelegate() { super((ScalableFigure) null, null); } /* * (non-Javadoc) * @see * org.eclipse.gef.editparts.ZoomManager#addZoomListener(org.eclipse.gef * .editparts.ZoomListener) */ @Override public void addZoomListener(final ZoomListener listener) { listenerList.add(listener); } /* * (non-Javadoc) * @see org.eclipse.gef.editparts.ZoomManager#canZoomIn() */ @Override public boolean canZoomIn() { checkCurrentZoomManager(); return currentZoomManager.canZoomIn(); } /* * (non-Javadoc) * @see org.eclipse.gef.editparts.ZoomManager#canZoomOut() */ @Override public boolean canZoomOut() { checkCurrentZoomManager(); return currentZoomManager.canZoomOut(); } /** * @return the currentZoomManager */ public ZoomManager getCurrentZoomManager() { checkCurrentZoomManager(); return currentZoomManager; } /* * (non-Javadoc) * @see org.eclipse.gef.editparts.ZoomManager#getMaxZoom() */ @Override public double getMaxZoom() { checkCurrentZoomManager(); return currentZoomManager.getMaxZoom(); } /* * (non-Javadoc) * @see org.eclipse.gef.editparts.ZoomManager#getMinZoom() */ @Override public double getMinZoom() { checkCurrentZoomManager(); return currentZoomManager.getMinZoom(); } /* * (non-Javadoc) * @see org.eclipse.gef.editparts.ZoomManager#getNextZoomLevel() */ @Override public double getNextZoomLevel() { checkCurrentZoomManager(); return currentZoomManager.getNextZoomLevel(); } @Override @Deprecated public ScalableFreeformLayeredPane getPane() { checkCurrentZoomManager(); return currentZoomManager.getPane(); } /* * (non-Javadoc) * @see org.eclipse.gef.editparts.ZoomManager#getPreviousZoomLevel() */ @Override public double getPreviousZoomLevel() { checkCurrentZoomManager(); return currentZoomManager.getPreviousZoomLevel(); } /* * (non-Javadoc) * @see org.eclipse.gef.editparts.ZoomManager#getScalableFigure() */ @Override public ScalableFigure getScalableFigure() { checkCurrentZoomManager(); return currentZoomManager.getScalableFigure(); } /* * (non-Javadoc) * @see org.eclipse.gef.editparts.ZoomManager#getPane() */ /* * (non-Javadoc) * @see org.eclipse.gef.editparts.ZoomManager#getUIMultiplier() */ @Override public double getUIMultiplier() { checkCurrentZoomManager(); return currentZoomManager.getUIMultiplier(); } /* * (non-Javadoc) * @see org.eclipse.gef.editparts.ZoomManager#getViewport() */ @Override public Viewport getViewport() { checkCurrentZoomManager(); return currentZoomManager.getViewport(); } /* * (non-Javadoc) * @see org.eclipse.gef.editparts.ZoomManager#getZoom() */ @Override public double getZoom() { checkCurrentZoomManager(); return currentZoomManager.getZoom(); } /* * (non-Javadoc) * @see org.eclipse.gef.editparts.ZoomManager#getZoomAsText() */ @Override public String getZoomAsText() { checkCurrentZoomManager(); return currentZoomManager.getZoomAsText(); } /* * (non-Javadoc) * @see org.eclipse.gef.editparts.ZoomManager#getZoomLevelContributions() */ @Override public List<?> getZoomLevelContributions() { checkCurrentZoomManager(); return currentZoomManager.getZoomLevelContributions(); } /* * (non-Javadoc) * @see org.eclipse.gef.editparts.ZoomManager#getZoomLevels() */ @Override public double[] getZoomLevels() { checkCurrentZoomManager(); return currentZoomManager.getZoomLevels(); } /* * (non-Javadoc) * @see org.eclipse.gef.editparts.ZoomManager#getZoomLevelsAsText() */ @Override public String[] getZoomLevelsAsText() { checkCurrentZoomManager(); return currentZoomManager.getZoomLevelsAsText(); } /* * (non-Javadoc) * @see * org.eclipse.gef.editparts.ZoomManager#removeZoomListener(org.eclipse. * gef.editparts.ZoomListener) */ @Override public void removeZoomListener(final ZoomListener listener) { listenerList.remove(listener); } /** * @param newZoomManager * the new zoom manager to set as current */ public void setCurrentZoomManager(final ZoomManager newZoomManager) { Assert.isNotNull(newZoomManager); if (null != currentZoomManager) { currentZoomManager.removeZoomListener(this); } currentZoomManager = newZoomManager; currentZoomManager.addZoomListener(this); // manual refresh zoomChanged(currentZoomManager.getZoom()); } /* * (non-Javadoc) * @see org.eclipse.gef.editparts.ZoomManager#setUIMultiplier(double) */ @Override public void setUIMultiplier(final double multiplier) { checkCurrentZoomManager(); currentZoomManager.setUIMultiplier(multiplier); } /* * (non-Javadoc) * @see * org.eclipse.gef.editparts.ZoomManager#setViewLocation(org.eclipse.draw2d * .geometry.Point) */ @Override public void setViewLocation(final Point p) { checkCurrentZoomManager(); currentZoomManager.setViewLocation(p); } /* * (non-Javadoc) * @see org.eclipse.gef.editparts.ZoomManager#setZoom(double) */ @Override public void setZoom(final double zoom) { checkCurrentZoomManager(); currentZoomManager.setZoom(zoom); } /* * (non-Javadoc) * @see org.eclipse.gef.editparts.ZoomManager#setZoomAnimationStyle(int) */ @Override public void setZoomAnimationStyle(final int style) { checkCurrentZoomManager(); currentZoomManager.setZoomAnimationStyle(style); } /* * (non-Javadoc) * @see * org.eclipse.gef.editparts.ZoomManager#setZoomAsText(java.lang.String) */ @Override public void setZoomAsText(final String zoomString) { checkCurrentZoomManager(); currentZoomManager.setZoomAsText(zoomString); } /* * (non-Javadoc) * @see * org.eclipse.gef.editparts.ZoomManager#setZoomLevelContributions(java. * util.List) */ @Override public void setZoomLevelContributions(final List contributions) { checkCurrentZoomManager(); currentZoomManager.setZoomLevelContributions(contributions); } /* * (non-Javadoc) * @see org.eclipse.gef.editparts.ZoomManager#setZoomLevels(double[]) */ @Override public void setZoomLevels(final double[] zoomLevels) { checkCurrentZoomManager(); currentZoomManager.setZoomLevels(zoomLevels); } /* * (non-Javadoc) * @see org.eclipse.gef.editparts.ZoomListener#zoomChanged(double) */ @Override public void zoomChanged(final double zoom) { final Object[] listeners = listenerList.getListeners(); for (int i = 0; i < listeners.length; ++i) { ((ZoomListener) listeners[i]).zoomChanged(zoom); } } /* * (non-Javadoc) * @see org.eclipse.gef.editparts.ZoomManager#zoomIn() */ @Override public void zoomIn() { checkCurrentZoomManager(); currentZoomManager.zoomIn(); } /* * (non-Javadoc) * @see org.eclipse.gef.editparts.ZoomManager#zoomOut() */ @Override public void zoomOut() { checkCurrentZoomManager(); currentZoomManager.zoomOut(); } /* * (non-Javadoc) * @see * org.eclipse.gef.editparts.ZoomManager#zoomTo(org.eclipse.draw2d.geometry * .Rectangle) */ @Override public void zoomTo(final Rectangle rect) { checkCurrentZoomManager(); currentZoomManager.zoomTo(rect); } private void checkCurrentZoomManager() { Assert.isNotNull(currentZoomManager, "ZoomManagerDelegate had no current zoom manager!"); } }