| /********************************************************************** |
| * Copyright (c) 2005 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.browser; |
| |
| import java.io.File; |
| |
| import org.eclipse.swt.dnd.DND; |
| import org.eclipse.swt.dnd.DropTargetAdapter; |
| import org.eclipse.swt.dnd.DropTargetEvent; |
| import org.eclipse.swt.dnd.FileTransfer; |
| import org.eclipse.swt.dnd.TransferData; |
| /** |
| * |
| */ |
| public class WebBrowserViewDropAdapter extends DropTargetAdapter { |
| /** |
| * The view to which this drop support has been added. |
| */ |
| private BrowserViewer view; |
| |
| /** |
| * The current operation. |
| */ |
| private int currentOperation = DND.DROP_NONE; |
| |
| /** |
| * The last valid operation. |
| */ |
| private int lastValidOperation = DND.DROP_NONE; |
| |
| protected WebBrowserViewDropAdapter(BrowserViewer view) { |
| this.view = view; |
| } |
| |
| /* (non-Javadoc) |
| * Method declared on DropTargetAdapter. |
| * The mouse has moved over the drop target. If the |
| * target item has changed, notify the action and check |
| * that it is still enabled. |
| */ |
| private void doDropValidation(DropTargetEvent event) { |
| //update last valid operation |
| if (event.detail != DND.DROP_NONE) |
| lastValidOperation = event.detail; |
| |
| //valid drop and set event detail accordingly |
| if (validateDrop(event.detail, event.currentDataType)) |
| currentOperation = lastValidOperation; |
| else |
| currentOperation = DND.DROP_NONE; |
| |
| event.detail = currentOperation; |
| } |
| |
| /* (non-Javadoc) |
| * Method declared on DropTargetAdapter. |
| * The drop operation has changed, see if the action |
| * should still be enabled. |
| */ |
| public void dragOperationChanged(DropTargetEvent event) { |
| doDropValidation(event); |
| } |
| |
| /* (non-Javadoc) |
| * Method declared on DropTargetAdapter. |
| * The mouse has moved over the drop target. If the |
| * target item has changed, notify the action and check |
| * that it is still enabled. |
| */ |
| public void dragOver(DropTargetEvent event) { |
| //set the location feedback |
| event.feedback = DND.FEEDBACK_SELECT; |
| |
| //see if anything has really changed before doing validation. |
| doDropValidation(event); |
| } |
| |
| /* (non-Javadoc) |
| * Method declared on DropTargetAdapter. |
| * The user has dropped something on the desktop viewer. |
| */ |
| public void drop(DropTargetEvent event) { |
| //perform the drop behaviour |
| if (!performDrop(event.data)) |
| event.detail = DND.DROP_NONE; |
| |
| currentOperation = event.detail; |
| } |
| |
| /* (non-Javadoc) |
| * Method declared on DropTargetAdapter. |
| * Last chance for the action to disable itself |
| */ |
| public void dropAccept(DropTargetEvent event) { |
| if (!validateDrop(event.detail, event.currentDataType)) |
| event.detail = DND.DROP_NONE; |
| } |
| |
| public void dragEnter(DropTargetEvent event) { |
| if (event.detail == DND.DROP_DEFAULT) |
| event.detail = DND.DROP_COPY; |
| |
| doDropValidation(event); |
| } |
| |
| /** |
| * Performs any work associated with the drop. |
| * <p> |
| * Subclasses must implement this method to provide drop behavior. |
| * </p> |
| * |
| * @param data the drop data |
| * @return <code>true</code> if the drop was successful, and |
| * <code>false</code> otherwise |
| */ |
| protected boolean performDrop(Object data) { |
| if (data instanceof String[]) { |
| String[] s = (String[]) data; |
| if (s == null || s.length == 0) |
| return true; |
| File f = new File(s[0]); |
| try { |
| view.setURL(f.toURL().toExternalForm()); |
| } catch (Exception e) { |
| // TODO |
| } |
| } |
| |
| return true; |
| } |
| |
| /** |
| * Validates dropping on the given object. This method is called whenever some |
| * aspect of the drop operation changes. |
| * <p> |
| * Subclasses must implement this method to define which drops make sense. |
| * </p> |
| * |
| * @param target the object that the mouse is currently hovering over, or |
| * <code>null</code> if the mouse is hovering over empty space |
| * @param operation the current drag operation (copy, move, etc.) |
| * @param transferType the current transfer type |
| * @return <code>true</code> if the drop is valid, and <code>false</code> |
| * otherwise |
| */ |
| protected boolean validateDrop(int operation, TransferData transferType) { |
| if (FileTransfer.getInstance().isSupportedType(transferType)) |
| return true; |
| /*if (ResourceTransfer.getInstance().isSupportedType(transferType)) |
| return true; |
| if (LocalSelectionTransfer.getInstance().isSupportedType(transferType)) |
| return true;*/ |
| |
| return false; |
| } |
| } |