/******************************************************************************* * Copyright (c) 2010 Oak Ridge National Laboratory. * 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 ******************************************************************************/ package org.csstudio.swt.xygraph.undo; import org.csstudio.swt.xygraph.Messages; import org.csstudio.swt.xygraph.figures.XYGraphFlags; import org.csstudio.swt.xygraph.util.SingleSourceHelper; import org.csstudio.swt.xygraph.util.XYGraphMediaFactory; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Cursor; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Display; /**The type of zoom on XYGraph. * @author Xihui Chen * @author Kay Kasemir */ @SuppressWarnings("nls") public enum ZoomType{ /** Interactive Rubberband zoom */ RUBBERBAND_ZOOM(Messages.Zoom_Rubberband, XYGraphMediaFactory.getInstance().getImage("images/RubberbandZoom.png"), XYGraphMediaFactory.getInstance().getImage("images/RubberbandZoomCursor.png"), XYGraphFlags.COMBINED_ZOOM | XYGraphFlags.SEPARATE_ZOOM, SWT.CURSOR_CROSS), /** Zoom via 'cursors' for horizontal start/end position */ HORIZONTAL_ZOOM(Messages.Zoom_Horiz, XYGraphMediaFactory.getInstance().getImage("images/HorizontalZoom.png"), XYGraphMediaFactory.getInstance().getImage("images/HorizontalZoomCursor.png"), XYGraphFlags.COMBINED_ZOOM | XYGraphFlags.SEPARATE_ZOOM, SWT.CURSOR_CROSS), /** Zoom via 'cursors' for vertical start/end position */ VERTICAL_ZOOM(Messages.Zoom_Vert, XYGraphMediaFactory.getInstance().getImage("images/VerticalZoom.png"), XYGraphMediaFactory.getInstance().getImage("images/VerticalZoomCursor.png"), XYGraphFlags.COMBINED_ZOOM | XYGraphFlags.SEPARATE_ZOOM, SWT.CURSOR_CROSS), /** Zoom 'in' around mouse pointer */ ZOOM_IN(Messages.Zoom_In, XYGraphMediaFactory.getInstance().getImage("images/ZoomIn.png"), XYGraphMediaFactory.getInstance().getImage("images/ZoomInCursor.png"), XYGraphFlags.COMBINED_ZOOM, SWT.CURSOR_HAND), /** Zoom 'out' around mouse pointer */ ZOOM_OUT(Messages.Zoom_Out, XYGraphMediaFactory.getInstance().getImage("images/ZoomOut.png"), XYGraphMediaFactory.getInstance().getImage("images/ZoomOutCursor.png"), XYGraphFlags.COMBINED_ZOOM, SWT.CURSOR_HAND), /** Zoom 'in' around mouse pointer along horizontal axis */ ZOOM_IN_HORIZONTALLY(Messages.Zoom_InHoriz, XYGraphMediaFactory.getInstance().getImage("images/ZoomInHoriz.png"), XYGraphMediaFactory.getInstance().getImage("images/ZoomInHorizCursor.png"), XYGraphFlags.SEPARATE_ZOOM, SWT.CURSOR_HAND), /** Zoom 'out' around mouse pointer along horizontal axis */ ZOOM_OUT_HORIZONTALLY(Messages.Zoom_OutHoriz, XYGraphMediaFactory.getInstance().getImage("images/ZoomOutHoriz.png"), XYGraphMediaFactory.getInstance().getImage("images/ZoomOutHorizCursor.png"), XYGraphFlags.SEPARATE_ZOOM, SWT.CURSOR_HAND), /** Zoom 'in' around mouse pointer along vertical axis */ ZOOM_IN_VERTICALLY(Messages.Zoom_InVert, XYGraphMediaFactory.getInstance().getImage("images/ZoomInVert.png"), XYGraphMediaFactory.getInstance().getImage("images/ZoomInVertCursor.png"), XYGraphFlags.SEPARATE_ZOOM, SWT.CURSOR_HAND), /** Zoom 'out' around mouse pointer along vertical axes */ ZOOM_OUT_VERTICALLY(Messages.Zoom_OutVert, XYGraphMediaFactory.getInstance().getImage("images/ZoomOutVert.png"), XYGraphMediaFactory.getInstance().getImage("images/ZoomOutVertCursor.png"), XYGraphFlags.SEPARATE_ZOOM, SWT.CURSOR_HAND), /** Zoom 'out' around mouse pointer */ PANNING(Messages.Zoom_Pan, XYGraphMediaFactory.getInstance().getImage("images/Panning.png"), XYGraphMediaFactory.getInstance().getImage("images/PanningCursor.png"), XYGraphFlags.COMBINED_ZOOM | XYGraphFlags.SEPARATE_ZOOM, SWT.CURSOR_HAND), /** Disarm zoom behavior */ NONE(Messages.Zoom_None, XYGraphMediaFactory.getInstance().getImage("images/MouseArrow.png"), null, XYGraphFlags.COMBINED_ZOOM | XYGraphFlags.SEPARATE_ZOOM, SWT.CURSOR_ARROW); final private Image iconImage; final private String description; private Cursor cursor; final private int flags; /** Initialize * @param description Description used for tool tip * @param iconImage Button icon * @param cursorImage Cursor when zoom type is selected * @param flags Bitwise 'or' of flags that specify in which zoom * configurations this zoom type should be included * @see XYGraphFlags#COMBINED_ZOOM * @see XYGraphFlags#SEPARATE_ZOOM */ private ZoomType(final String description, final Image iconImage, final Image cursorImage, final int flags, final int backUpSWTCursorType){ this.description = description; this.iconImage = iconImage; if(cursorImage == null) cursor = new Cursor(Display.getDefault(), SWT.CURSOR_ARROW); else cursor = SingleSourceHelper.createCursor( Display.getDefault(), cursorImage.getImageData(), 8, 8, backUpSWTCursorType); XYGraphMediaFactory.getInstance().registerCursor(cursor); this.flags = flags; } /** * @return the iconImageData */ public Image getIconImage() { return iconImage; } /** * @return the description */ public String getDescription() { return description; } /** * @return the cursor */ public Cursor getCursor() { return cursor; } /** Check if this zoom mode should be offered when a graph was * created with given flags * @param flags Flags of the XYGraph tool bar * @return <code>true</code> if this zoom type applies */ public boolean useWithFlags(final int flags) { return (this.flags & flags) > 0; } @Override public String toString() { return description; } public String getId() { return getClass().getName()+"."+name(); } public void setCursor(Cursor cursor) { this.cursor = cursor; } }