| /******************************************************************************* |
| * Copyright (c) 2004, 2006 IBM Corporation 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 |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.ui.internal; |
| |
| import org.eclipse.jface.resource.ImageDescriptor; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.graphics.Cursor; |
| import org.eclipse.swt.widgets.Display; |
| |
| /** |
| * Provides the set of cursors used for drag-and-drop. |
| */ |
| public class DragCursors { |
| public static final int INVALID = 0; |
| |
| public static final int LEFT = 1; |
| |
| public static final int RIGHT = 2; |
| |
| public static final int TOP = 3; |
| |
| public static final int BOTTOM = 4; |
| |
| public static final int CENTER = 5; |
| |
| public static final int OFFSCREEN = 6; |
| |
| public static final int FASTVIEW = 7; |
| |
| private final static Cursor cursors[] = new Cursor[8]; |
| |
| public static int positionToDragCursor(int swtPositionConstant) { |
| switch (swtPositionConstant) { |
| case SWT.LEFT: |
| return LEFT; |
| case SWT.RIGHT: |
| return RIGHT; |
| case SWT.TOP: |
| return TOP; |
| case SWT.BOTTOM: |
| return BOTTOM; |
| case SWT.CENTER: |
| return CENTER; |
| } |
| |
| return INVALID; |
| } |
| |
| /** |
| * Converts a drag cursor (LEFT, RIGHT, TOP, BOTTOM, CENTER) into an SWT constant |
| * (SWT.LEFT, SWT.RIGHT, SWT.TOP, SWT.BOTTOM, SWT.CENTER) |
| * |
| * @param dragCursorId |
| * @return an SWT.* constant |
| */ |
| public static int dragCursorToSwtConstant(int dragCursorId) { |
| switch (dragCursorId) { |
| case LEFT: |
| return SWT.LEFT; |
| case RIGHT: |
| return SWT.RIGHT; |
| case TOP: |
| return SWT.TOP; |
| case BOTTOM: |
| return SWT.BOTTOM; |
| case CENTER: |
| return SWT.CENTER; |
| } |
| |
| return SWT.DEFAULT; |
| } |
| |
| /** |
| * Return the cursor for a drop scenario, as identified by code. |
| * Code must be one of INVALID, LEFT, RIGHT, TOP, etc. |
| * If the code is not found default to INVALID. |
| */ |
| public static Cursor getCursor(int code) { |
| Display display = Display.getCurrent(); |
| if (cursors[code] == null) { |
| ImageDescriptor source = null; |
| ImageDescriptor mask = null; |
| switch (code) { |
| case LEFT: |
| source = WorkbenchImages |
| .getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_LEFT_SOURCE); |
| mask = WorkbenchImages |
| .getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_LEFT_MASK); |
| cursors[LEFT] = new Cursor(display, source.getImageData(), mask |
| .getImageData(), 16, 16); |
| break; |
| case RIGHT: |
| source = WorkbenchImages |
| .getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_RIGHT_SOURCE); |
| mask = WorkbenchImages |
| .getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_RIGHT_MASK); |
| cursors[RIGHT] = new Cursor(display, source.getImageData(), |
| mask.getImageData(), 16, 16); |
| break; |
| case TOP: |
| source = WorkbenchImages |
| .getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_TOP_SOURCE); |
| mask = WorkbenchImages |
| .getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_TOP_MASK); |
| cursors[TOP] = new Cursor(display, source.getImageData(), mask |
| .getImageData(), 16, 16); |
| break; |
| case BOTTOM: |
| source = WorkbenchImages |
| .getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_BOTTOM_SOURCE); |
| mask = WorkbenchImages |
| .getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_BOTTOM_MASK); |
| cursors[BOTTOM] = new Cursor(display, source.getImageData(), |
| mask.getImageData(), 16, 16); |
| break; |
| case CENTER: |
| source = WorkbenchImages |
| .getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_STACK_SOURCE); |
| mask = WorkbenchImages |
| .getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_STACK_MASK); |
| cursors[CENTER] = new Cursor(display, source.getImageData(), |
| mask.getImageData(), 16, 16); |
| break; |
| case OFFSCREEN: |
| source = WorkbenchImages |
| .getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_OFFSCREEN_SOURCE); |
| mask = WorkbenchImages |
| .getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_OFFSCREEN_MASK); |
| cursors[OFFSCREEN] = new Cursor(display, source.getImageData(), |
| mask.getImageData(), 16, 16); |
| break; |
| case FASTVIEW: |
| source = WorkbenchImages |
| .getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_TOFASTVIEW_SOURCE); |
| mask = WorkbenchImages |
| .getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_TOFASTVIEW_MASK); |
| cursors[FASTVIEW] = new Cursor(Display.getCurrent(), source |
| .getImageData(), mask.getImageData(), 16, 16); |
| default: |
| case INVALID: |
| source = WorkbenchImages |
| .getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_INVALID_SOURCE); |
| mask = WorkbenchImages |
| .getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_INVALID_MASK); |
| cursors[INVALID] = new Cursor(display, source.getImageData(), |
| mask.getImageData(), 16, 16); |
| break; |
| } |
| } |
| return cursors[code]; |
| } |
| |
| /** |
| * Disposes all drag-and-drop cursors. |
| */ |
| public static void dispose() { |
| for (int idx = 0; idx < cursors.length; idx++) { |
| cursors[idx].dispose(); |
| cursors[idx] = null; |
| } |
| } |
| } |