blob: 51f9ce7b4638c89a250af7668f5528edb63932cf [file] [log] [blame]
/*******************************************************************************
* 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.viewers.IStructuredSelection;
import org.eclipse.swt.dnd.TransferData;
/**
*
* Provides instances of {@link CommonDragAdapterAssistant} and
* {@link CommonDropAdapterAssistant} for the associated
* {@link INavigatorContentService}.
*
* <p>
* Clients should only take note of this Service they are are using the
* {@link INavigatorContentService} in the context of a viewer which is not or
* does not extend {@link CommonViewer}. Clients should take a look at the
* initialization of the DND support in the {@link CommonViewer} if they wish to
* support this capability in their own viewers.
* </p>
*
* <p>
* This interface is not intended to be implemented by clients.
* </p>
*
* @see CommonDragAdapter
* @see CommonDragAdapterAssistant
* @see CommonDropAdapter
* @see CommonDropAdapterAssistant
* @see CommonViewer
* @see INavigatorContentService#getDnDService()
* @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 interface INavigatorDnDService {
/**
*
* As part of the <b>org.eclipse.ui.navigator.viewer</b> extension point,
* clients may explicit extend the support Transfer Types of a particular
* viewer using the <b>dragAssistant</b> element. This element defines a
* class which extends {@link CommonDragAdapterAssistant} and can direct the
* viewer on how to provide different kinds of DND Transfer Types. The array
* is returned in no particular order.
*
* @return An array of {@link CommonDragAdapterAssistant} or an empty array.
*/
CommonDragAdapterAssistant[] getCommonDragAssistants();
/**
* Clients may choose to programmatically bind drag assistants to an
* instance of the DND Service. A programmatic binding is not persisted
* between sessions and is not propagated to other instances of
* {@link INavigatorContentService} with the same id.
*
* @param anAssistant The assistant to bind.
*/
void bindDragAssistant(CommonDragAdapterAssistant anAssistant);
/**
*
* This method returns an array of {@link CommonDropAdapterAssistant} from
* content extensions that are <i>visible</i> and <i>active</i> for the
* associated {@link INavigatorContentService}. The array is sorted by
* priority, with overrides taken into account.
*
* <p>
* The array should be processed from the first element to the last, asking
* each extension to
* {@link CommonDropAdapterAssistant#validateDrop(Object, int, org.eclipse.swt.dnd.TransferData)}.
* The first to successfully validate the drop operation will have the
* opportunity to
* {@link CommonDropAdapterAssistant#handleDrop(CommonDropAdapter, org.eclipse.swt.dnd.DropTargetEvent, Object) handle the drop}
* </p>
*
* @param aDropTarget
* The target element in the viewer of the drop operation.
* @param theTransferType
* The transfer type of the current drop operation.
* @return An array of {@link CommonDropAdapterAssistant}s that are defined
* by the set of
* <b>org.eclipse.ui.navigator.navigatorContent/navigatorContent</b>
* extensions that provide a <b>possibleChildren</b> expression
* that matches the given drop target.
*/
CommonDropAdapterAssistant[] findCommonDropAdapterAssistants(
Object aDropTarget, TransferData theTransferType);
/**
*
* This method returns an array of {@link CommonDropAdapterAssistant} from
* content extensions that are <i>visible</i> and <i>active</i> for the
* associated {@link INavigatorContentService}.
*
* <p>
* The array should be processed from the first element to the last, asking
* each extension to
* {@link CommonDropAdapterAssistant#validateDrop(Object, int, org.eclipse.swt.dnd.TransferData)}.
* The first to successfully validate the drop operation will have the
* opportunity to
* {@link CommonDropAdapterAssistant#handleDrop(CommonDropAdapter, org.eclipse.swt.dnd.DropTargetEvent, Object) handle the drop}
* </p>
*
* @param aDropTarget
* The target element in the viewer of the drop operation.
* @param theDragSelection
* The drag selection of the current drop operation.
* @return An array of {@link CommonDropAdapterAssistant}s that are defined
* by the set of
* <b>org.eclipse.ui.navigator.navigatorContent/navigatorContent</b>
* extensions that provide a <b>possibleChildren</b> expression
* that matches the given drop target.
*/
CommonDropAdapterAssistant[] findCommonDropAdapterAssistants(
Object aDropTarget, IStructuredSelection theDragSelection);
}