package org.csstudio.sds.ui.internal.editor; import java.util.LinkedList; import java.util.List; import org.eclipse.draw2d.ScalableFigure; import org.eclipse.draw2d.Viewport; import org.eclipse.gef.editparts.ZoomListener; import org.eclipse.gef.editparts.ZoomManager; public class SDSZoomManager extends ZoomManager { private List<ZoomListener> zoomFinishedListeners = new LinkedList<ZoomListener>(); public SDSZoomManager(ScalableFigure pane, Viewport viewport) { super(pane, viewport); } /** * The original ZoomManager notifies its ZoomListeners (@see ZoomManager#addZoomListener(ZoomListener)) * during the zoom process. This is not always suitable. The listeners added by this method are * notified when the zooming is completely finished. * * @param ZoomListener listener */ public void addZoomFinishedListener(ZoomListener listener) { zoomFinishedListeners.add(listener); } /** * @see #addZoomFinishedListener(ZoomListener) * * @param ZoomListener listener */ public void removeZoomFinishedListener(ZoomListener listener) { zoomFinishedListeners.remove(listener); } @Override protected void primSetZoom(double zoom) { super.primSetZoom(zoom); fireZoomFinished(zoom); } private void fireZoomFinished(double zoom) { for (ZoomListener listener : zoomFinishedListeners) { listener.zoomChanged(zoom); } } }