| /******************************************************************************* |
| * Copyright (c) 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.navigator; |
| |
| import org.eclipse.jface.util.LocalSelectionTransfer; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.swt.dnd.DragSourceEvent; |
| import org.eclipse.swt.dnd.Transfer; |
| import org.eclipse.swt.dnd.TransferData; |
| import org.eclipse.swt.widgets.Event; |
| import org.eclipse.swt.widgets.Shell; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.internal.navigator.NavigatorContentService; |
| import org.eclipse.ui.part.PluginTransfer; |
| |
| /** |
| * Assist the {@link CommonDragAdapter} by providing new TransferTypes and the |
| * logic to handle setting up the transfer data. Clients must extend this class |
| * as part of the <b>org.eclipse.ui.navigator.viewer/dragAssistant</b> |
| * extension. By default, the Common Navigator supports |
| * {@link LocalSelectionTransfer} and {@link PluginTransfer}. |
| * |
| * <p> |
| * Clients may extend this class. |
| * </p> |
| * |
| * @see INavigatorDnDService |
| * @see CommonDragAdapter |
| * @see CommonDropAdapter |
| * @see CommonDropAdapterAssistant |
| * @see CommonViewer |
| * @see <a |
| * href="http://www.eclipse.org/articles/Article-SWT-DND/DND-in-SWT.html">Drag |
| * and Drop: Adding Drag and Drop to an SWT Application</a> |
| * @see <a |
| * href="http://www.eclipse.org/articles/Article-Workbench-DND/drag_drop.html">Drag |
| * and Drop in the Eclipse UI (Custom Transfer Types)</a> |
| * |
| * @since 3.2 |
| * |
| */ |
| public abstract class CommonDragAdapterAssistant { |
| |
| private INavigatorContentService contentService; |
| |
| /** |
| * Extra TransferTypes allow the Navigator to generate different kinds of |
| * payloads for DND clients. By default, the {@link CommonDragAdapter} |
| * supports {@link LocalSelectionTransfer} and {@link PluginTransfer}. |
| * |
| * <p> |
| * CommonDragAdapterAssistants can extend the available TransferTypes that a |
| * Common Navigator Viewer can generate. Clients should return the set of |
| * Transfer Types they support. When a drop event occurs, the available drag |
| * assistants will be searched for a <i>enabled</i> assistants for the |
| * {@link DragSourceEvent}. Only if the drop event occurs will |
| * {@link #setDragData(DragSourceEvent, IStructuredSelection)} be called. If |
| * the drop event is cancelled, |
| * {@link #setDragData(DragSourceEvent, IStructuredSelection)} will not be |
| * called. |
| * </p> |
| * |
| * @return The added transfer types. (e.g. FileTransfer.getInstance()). |
| */ |
| public abstract Transfer[] getSupportedTransferTypes(); |
| |
| /** |
| * Set the value of the {@link org.eclipse.swt.widgets.Event#data} field using the given selection. |
| * Clients will only have an opportunity to set the drag data if they have |
| * returned a matching Transfer Type from |
| * {@link #getSupportedTransferTypes()} for the |
| * {@link DragSourceEvent#dataType}. |
| * <p> |
| * Clients will only have an opportunity to set the data when the drop event |
| * occurs. If the drop operation is cancelled, then this method will not be |
| * called. |
| * </p> |
| * |
| * @param anEvent |
| * The event object should have its {@link Event#data} field set |
| * to a value that matches a supported {@link TransferData} type. |
| * @param aSelection |
| * The current selection from the viewer. |
| * @return True if the data could be set; false otherwise. |
| */ |
| public abstract boolean setDragData(DragSourceEvent anEvent, |
| IStructuredSelection aSelection); |
| |
| /** |
| * Accept and remember the content service this assistant is associated |
| * with. |
| * |
| * @param aContentService |
| */ |
| public final void setContentService(INavigatorContentService aContentService) { |
| contentService = aContentService; |
| } |
| |
| /** |
| * |
| * @return The associated content service. |
| */ |
| public INavigatorContentService getContentService() { |
| return contentService; |
| } |
| |
| /** |
| * |
| * @return The shell for the viewer this assistant is associated with or the |
| * shell of the active workbench window. |
| */ |
| public final Shell getShell() { |
| if (contentService != null) { |
| ((NavigatorContentService) contentService).getShell(); |
| } |
| return PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); |
| } |
| |
| } |