All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.ui.part.PluginDropAdapter Maven / Gradle / Ivy

Go to download

This plug-in contains the bulk of the Workbench implementation, and depends on JFace, SWT, and Core Runtime. It cannot be used independently from org.eclipse.ui. Workbench client plug-ins should not depend directly on this plug-in.

The newest version!
/*******************************************************************************
 * Copyright (c) 2000, 2007 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.part;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.ViewerDropAdapter;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.dnd.TransferData;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.WorkbenchPlugin;
import org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants;

/**
 * Adapter for adding handling of the PluginTransfer drag and drop
 * transfer type to a drop action.
 * 

* This class may be instantiated or subclassed. *

*/ public class PluginDropAdapter extends ViewerDropAdapter { /** * The extension point attribute that defines the drop action class. */ public static final String ATT_CLASS = "class";//$NON-NLS-1$ /** * The current transfer data, or null if none. */ private TransferData currentTransfer; /** * Creates a plug-in drop adapter for the given viewer. * * @param viewer the viewer */ public PluginDropAdapter(StructuredViewer viewer) { super(viewer); } /* (non-Javadoc) * Method declared on DropTargetAdapter. * The user has dropped something on the desktop viewer. */ public void drop(DropTargetEvent event) { try { if (PluginTransfer.getInstance().isSupportedType( event.currentDataType)) { PluginTransferData pluginData = (PluginTransferData) event.data; IDropActionDelegate delegate = getPluginAdapter(pluginData); if (!delegate.run(pluginData.getData(), getCurrentTarget())) { event.detail = DND.DROP_NONE; } } else { super.drop(event); } } catch (CoreException e) { WorkbenchPlugin.log("Drop Failed", e.getStatus());//$NON-NLS-1$ } } /** * Returns the current transfer. */ protected TransferData getCurrentTransfer() { return currentTransfer; } /** * Loads the class that will perform the action associated with the given drop * data. * * @param data the drop data * @return the viewer drop adapter */ protected static IDropActionDelegate getPluginAdapter( PluginTransferData data) throws CoreException { IExtensionRegistry registry = Platform.getExtensionRegistry(); String adapterName = data.getExtensionId(); IExtensionPoint xpt = registry.getExtensionPoint(PlatformUI.PLUGIN_ID, IWorkbenchRegistryConstants.PL_DROP_ACTIONS); IExtension[] extensions = xpt.getExtensions(); for (int i = 0; i < extensions.length; i++) { IConfigurationElement[] configs = extensions[i] .getConfigurationElements(); if (configs != null && configs.length > 0) { String id = configs[0].getAttribute("id");//$NON-NLS-1$ if (id != null && id.equals(adapterName)) { return (IDropActionDelegate) WorkbenchPlugin .createExtension(configs[0], ATT_CLASS); } } } return null; } /** * @see ViewerDropAdapter#performDrop */ public boolean performDrop(Object data) { //should never be called, since we override the drop() method. return false; } /** * The PluginDropAdapter implementation of this * ViewerDropAdapter method is used to notify the action that some * aspect of the drop operation has changed. Subclasses may override. */ public boolean validateDrop(Object target, int operation, TransferData transferType) { currentTransfer = transferType; if (currentTransfer != null && PluginTransfer.getInstance() .isSupportedType(currentTransfer)) { //plugin cannot be loaded without the plugin data return true; } return false; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy