| /******************************************************************************* |
| * Copyright (c) 2000, 2013 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.swt.dnd; |
| |
| |
| import org.eclipse.swt.*; |
| |
| /** |
| * Class DND contains all the constants used in defining a |
| * DragSource or a DropTarget. |
| * |
| * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a> |
| */ |
| public class DND { |
| |
| /** |
| * The transfer mechanism for data that is being cut |
| * and then pasted or copied and then pasted (value is 1). |
| * |
| * @see Clipboard |
| * |
| * @since 3.1 |
| */ |
| public final static int CLIPBOARD = 1 << 0; |
| |
| /** |
| * The transfer mechanism for clients that use the selection |
| * mechanism (value is 2). |
| * |
| * @see Clipboard |
| * |
| * @since 3.1 |
| */ |
| public final static int SELECTION_CLIPBOARD = 1 << 1; |
| |
| /** |
| * Drag and Drop Operation: no drag/drop operation performed |
| * (value is 0). |
| */ |
| public final static int DROP_NONE = 0; |
| |
| /** |
| * Drag and Drop Operation: a copy of the data in the drag source is |
| * added to the drop target (value is 1 << 0). |
| */ |
| public final static int DROP_COPY = 1 << 0; |
| |
| /** |
| * Drag and Drop Operation: a copy of the data is added to the drop target and |
| * the drag source removes the original data and any references to the data, |
| * and updates its display (value is 1 << 1). |
| * <p> |
| * <b>Warning:</b> Some applications (most notably Firefox, Thunderbird, and Safari) return |
| * {@link DND#DROP_MOVE} even if they just open a dropped file and don't copy |
| * anything, see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=30543">bug 30543</a>. |
| * </p> |
| * <p> |
| * <b>To avoid data loss</b>, you may want to not remove the original data |
| * when you handle a {@link DND#DragEnd} for a {@link FileTransfer} whose |
| * {@link org.eclipse.swt.widgets.Event#detail} is {@link #DROP_MOVE}. |
| * </p> |
| */ |
| public final static int DROP_MOVE = 1 << 1; |
| |
| /** |
| * Drag and Drop Operation: the drop target makes a link to the data in |
| * the drag source (value is 1 << 2). |
| */ |
| public final static int DROP_LINK = 1 << 2; |
| |
| /** |
| * Drag and Drop Operation: the drop target moves the data and the drag source removes |
| * any references to the data and updates its display. This is not available on all platforms |
| * and is only used when a non-SWT application is the drop target. In this case, the SWT |
| * drag source is informed in the dragFinished event that the drop target has moved the data. |
| * (value is 1 << 3). |
| * |
| * @see DragSourceListener#dragFinished |
| */ |
| public final static int DROP_TARGET_MOVE = 1 << 3; |
| |
| /** |
| * Drag and Drop Operation: During a dragEnter event or a dragOperationChanged, if no modifier keys |
| * are pressed, the operation is set to DROP_DEFAULT. The application can choose what the default |
| * operation should be by setting a new value in the operation field. If no value is choosen, the |
| * default operation for the platform will be selected (value is 1 << 4). |
| * |
| * @see DropTargetListener#dragEnter |
| * @see DropTargetListener#dragOperationChanged |
| * @since 2.0 |
| */ |
| public final static int DROP_DEFAULT = 1 << 4; |
| |
| /** |
| * DragSource Event: the drop has successfully completed or has been terminated (such as hitting |
| * the ESC key); perform cleanup such as removing data on a move operation (value is 2000). |
| */ |
| public static final int DragEnd = 2000; |
| |
| /** |
| * DragSource Event: the data to be dropped is required from the drag source (value is 2001). |
| */ |
| public static final int DragSetData = 2001; |
| |
| /** |
| * DropTarget Event: the cursor has entered the drop target boundaries (value is 2002). |
| */ |
| public static final int DragEnter = 2002; |
| |
| /** |
| * DropTarget Event: the cursor has left the drop target boundaries OR the drop |
| * operation has been cancelled (such as by hitting ECS) OR the drop is about to |
| * happen (user has released the mouse button over this target) (value is 2003). |
| */ |
| public static final int DragLeave = 2003; |
| |
| /** |
| * DropTarget Event: the cursor is over the drop target (value is 2004). |
| */ |
| public static final int DragOver = 2004; |
| |
| /** |
| * DropTarget Event: the operation being performed has changed usually due to the user |
| * changing the selected modifier keys while dragging (value is 2005). |
| */ |
| public static final int DragOperationChanged = 2005; |
| |
| /** |
| * DropTarget Event: the data has been dropped (value is 2006). |
| */ |
| public static final int Drop = 2006; |
| |
| /** |
| * DropTarget Event: the drop target is given a last chance to modify the drop (value is 2007). |
| */ |
| public static final int DropAccept = 2007; |
| |
| /** |
| * DragSource Event: a drag is about to begin (value is 2008). |
| */ |
| public static final int DragStart = 2008; |
| |
| /** |
| * DropTarget drag under effect: No effect is shown (value is 0). |
| */ |
| public static final int FEEDBACK_NONE = 0; |
| |
| /** |
| * DropTarget drag under effect: The item under the cursor is selected; applies to tables |
| * and trees (value is 1). |
| */ |
| public static final int FEEDBACK_SELECT = 1; |
| |
| /** |
| * DropTarget drag under effect: An insertion mark is shown before the item under the cursor; applies to |
| * tables and trees (value is 2). |
| */ |
| public static final int FEEDBACK_INSERT_BEFORE = 2; |
| |
| /** |
| * DropTarget drag under effect: An insertion mark is shown after the item under the cursor; applies to |
| * tables and trees (value is 4). |
| */ |
| public static final int FEEDBACK_INSERT_AFTER = 4; |
| |
| /** |
| * DropTarget drag under effect: The widget is scrolled up or down to allow the user to drop on items that |
| * are not currently visible; applies to tables and trees (value is 8). |
| */ |
| public static final int FEEDBACK_SCROLL = 8; |
| |
| /** |
| * DropTarget drag under effect: The item currently under the cursor is expanded to allow the user to |
| * select a drop target from a sub item; applies to trees (value is 16). |
| */ |
| public static final int FEEDBACK_EXPAND = 16; |
| |
| /** |
| * Error code: drag source can not be initialized (value is 2000). |
| */ |
| public static final int ERROR_CANNOT_INIT_DRAG = 2000; |
| |
| /** |
| * Error code: drop target cannot be initialized (value is 2001). |
| */ |
| public static final int ERROR_CANNOT_INIT_DROP = 2001; |
| |
| /** |
| * Error code: Data can not be set on system clipboard (value is 2002). |
| */ |
| public static final int ERROR_CANNOT_SET_CLIPBOARD = 2002; |
| |
| /** |
| * Error code: Data does not have correct format for type (value is 2003). |
| * @since 3.1 |
| */ |
| public static final int ERROR_INVALID_DATA = 2003; |
| |
| /** |
| * DropTarget Key: The string constant for looking up the drop target |
| * for a control using <code>getData(String)</code>. When a drop target |
| * is created for a control, it is stored as a property in the control |
| * using <code>setData(String, Object)</code>. |
| * |
| * @since 3.4 |
| */ |
| public static final String DROP_TARGET_KEY = "DropTarget"; //$NON-NLS-1$ |
| |
| /** |
| * DragSource Key: The string constant for looking up the drag source |
| * for a control using <code>getData(String)</code>. When a drag source |
| * is created for a control, it is stored as a property in the control |
| * using <code>setData(String, Object)</code>. |
| * |
| * @since 3.4 |
| */ |
| public static final String DRAG_SOURCE_KEY = "DragSource"; //$NON-NLS-1$ |
| |
| static final String INIT_DRAG_MESSAGE = "Cannot initialize Drag"; //$NON-NLS-1$ |
| static final String INIT_DROP_MESSAGE = "Cannot initialize Drop"; //$NON-NLS-1$ |
| static final String CANNOT_SET_CLIPBOARD_MESSAGE = "Cannot set data in clipboard"; //$NON-NLS-1$ |
| static final String INVALID_DATA_MESSAGE = "Data does not have correct format for type"; //$NON-NLS-1$ |
| |
| /** |
| * Throws an appropriate exception based on the passed in error code. |
| * |
| * @param code the DND error code |
| */ |
| public static void error (int code) { |
| error (code, 0); |
| } |
| |
| /** |
| * Throws an appropriate exception based on the passed in error code. |
| * The <code>hresult</code> argument should be either 0, or the |
| * platform specific error code. |
| * <p> |
| * In DND, errors are reported by throwing one of three exceptions: |
| * <dl> |
| * <dd>java.lang.IllegalArgumentException</dd> |
| * <dt>thrown whenever one of the API methods is invoked with an illegal argument</dt> |
| * <dd>org.eclipse.swt.SWTException (extends java.lang.RuntimeException)</dd> |
| * <dt>thrown whenever a recoverable error happens internally in SWT</dt> |
| * <dd>org.eclipse.swt.SWTError (extends java.lang.Error)</dd> |
| * <dt>thrown whenever a <b>non-recoverable</b> error happens internally in SWT</dt> |
| * </dl> |
| * This method provides the logic which maps between error codes |
| * and one of the above exceptions. |
| * </p> |
| * |
| * @param code the DND error code. |
| * @param hresult the platform specific error code. |
| * |
| * @see SWTError |
| * @see SWTException |
| * @see IllegalArgumentException |
| */ |
| public static void error (int code, int hresult) { |
| switch (code) { |
| /* OS Failure/Limit (fatal, may occur only on some platforms) */ |
| case DND.ERROR_CANNOT_INIT_DRAG:{ |
| String msg = DND.INIT_DRAG_MESSAGE; |
| if (hresult != 0) msg += " result = "+hresult; //$NON-NLS-1$ |
| throw new SWTError (code, msg); |
| } |
| case DND.ERROR_CANNOT_INIT_DROP:{ |
| String msg = DND.INIT_DROP_MESSAGE; |
| if (hresult != 0) msg += " result = "+hresult; //$NON-NLS-1$ |
| throw new SWTError (code, msg); |
| } |
| case DND.ERROR_CANNOT_SET_CLIPBOARD:{ |
| String msg = DND.CANNOT_SET_CLIPBOARD_MESSAGE; |
| if (hresult != 0) msg += " result = "+hresult; //$NON-NLS-1$ |
| throw new SWTError (code, msg); |
| } |
| case DND.ERROR_INVALID_DATA:{ |
| String msg = DND.INVALID_DATA_MESSAGE; |
| if (hresult != 0) msg += " result = "+hresult; //$NON-NLS-1$ |
| throw new SWTException (code, msg); |
| } |
| } |
| |
| /* Unknown/Undefined Error */ |
| SWT.error(code); |
| } |
| |
| } |