mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-05 15:25:49 +02:00
[192704] work around drag&drop issues from Project Explorer
This commit is contained in:
parent
110355277d
commit
6be94a3637
1 changed files with 48 additions and 5 deletions
|
@ -13,11 +13,13 @@
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* Martin Oberhuber (Wind River) - [168975] Move RSE Events API to Core
|
* Martin Oberhuber (Wind River) - [168975] Move RSE Events API to Core
|
||||||
* Martin Oberhuber (Wind River) - [186773] split ISystemRegistryUI from ISystemRegistry
|
* Martin Oberhuber (Wind River) - [186773] split ISystemRegistryUI from ISystemRegistry
|
||||||
|
* David McKnight (IBM) - [192704] work around drag&drop issues from Project Explorer
|
||||||
********************************************************************************/
|
********************************************************************************/
|
||||||
|
|
||||||
package org.eclipse.rse.internal.ui.view;
|
package org.eclipse.rse.internal.ui.view;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.eclipse.core.resources.IResource;
|
import org.eclipse.core.resources.IResource;
|
||||||
|
@ -27,6 +29,8 @@ import org.eclipse.core.runtime.jobs.ISchedulingRule;
|
||||||
import org.eclipse.core.runtime.jobs.MultiRule;
|
import org.eclipse.core.runtime.jobs.MultiRule;
|
||||||
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
|
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
|
||||||
import org.eclipse.jface.operation.IRunnableContext;
|
import org.eclipse.jface.operation.IRunnableContext;
|
||||||
|
import org.eclipse.jface.util.LocalSelectionTransfer;
|
||||||
|
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||||
import org.eclipse.jface.viewers.StructuredViewer;
|
import org.eclipse.jface.viewers.StructuredViewer;
|
||||||
import org.eclipse.jface.viewers.ViewerDropAdapter;
|
import org.eclipse.jface.viewers.ViewerDropAdapter;
|
||||||
import org.eclipse.rse.core.RSECorePlugin;
|
import org.eclipse.rse.core.RSECorePlugin;
|
||||||
|
@ -50,7 +54,9 @@ import org.eclipse.ui.part.PluginTransferData;
|
||||||
* Drop adapter for dropping objects in the Systems views.
|
* Drop adapter for dropping objects in the Systems views.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class SystemViewDataDropAdapter extends ViewerDropAdapter
|
public class SystemViewDataDropAdapter
|
||||||
|
//extends PluginDropAdapter
|
||||||
|
extends ViewerDropAdapter
|
||||||
{
|
{
|
||||||
protected Shell shell;
|
protected Shell shell;
|
||||||
protected long hoverStart = 0;
|
protected long hoverStart = 0;
|
||||||
|
@ -94,6 +100,27 @@ public class SystemViewDataDropAdapter extends ViewerDropAdapter
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// DKM - hack to see if project explorer resources can be dropped in RSE
|
||||||
|
private boolean isLocalSelectionResources(PluginTransferData transferData)
|
||||||
|
{
|
||||||
|
byte[] result = transferData.getData();
|
||||||
|
|
||||||
|
// get the sources
|
||||||
|
String[] tokens = (new String(result)).split("\\"+SystemViewDataDropAdapter.RESOURCE_SEPARATOR); //$NON-NLS-1$
|
||||||
|
|
||||||
|
ArrayList srcObjects = new ArrayList();
|
||||||
|
for (int i = 0;i < tokens.length; i++)
|
||||||
|
{
|
||||||
|
String srcStr = tokens[i];
|
||||||
|
if (srcStr.equals("org.eclipse.ui.navigator.ProjectExplorer"))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private ArrayList getRSESourceObjects(PluginTransferData transferData)
|
private ArrayList getRSESourceObjects(PluginTransferData transferData)
|
||||||
{
|
{
|
||||||
|
@ -109,8 +136,10 @@ public class SystemViewDataDropAdapter extends ViewerDropAdapter
|
||||||
{
|
{
|
||||||
String srcStr = tokens[i];
|
String srcStr = tokens[i];
|
||||||
|
|
||||||
Object srcObject = getObjectFor(srcStr);
|
{
|
||||||
srcObjects.add(srcObject);
|
Object srcObject = getObjectFor(srcStr);
|
||||||
|
srcObjects.add(srcObject);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return srcObjects;
|
return srcObjects;
|
||||||
}
|
}
|
||||||
|
@ -124,8 +153,21 @@ public class SystemViewDataDropAdapter extends ViewerDropAdapter
|
||||||
if (data instanceof PluginTransferData)
|
if (data instanceof PluginTransferData)
|
||||||
{
|
{
|
||||||
PluginTransferData transferData = (PluginTransferData) data;
|
PluginTransferData transferData = (PluginTransferData) data;
|
||||||
srcObjects = getRSESourceObjects(transferData);
|
if (isLocalSelectionResources(transferData))
|
||||||
_sourceType = SystemDNDTransferRunnable.SRC_TYPE_RSE_RESOURCE;
|
{
|
||||||
|
IStructuredSelection selection = (IStructuredSelection) LocalSelectionTransfer.getTransfer().getSelection();
|
||||||
|
Iterator selIt = selection.iterator();
|
||||||
|
while (selIt.hasNext())
|
||||||
|
{
|
||||||
|
srcObjects.add(selIt.next());
|
||||||
|
}
|
||||||
|
_sourceType = SystemDNDTransferRunnable.SRC_TYPE_ECLIPSE_RESOURCE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
srcObjects = getRSESourceObjects(transferData);
|
||||||
|
_sourceType = SystemDNDTransferRunnable.SRC_TYPE_RSE_RESOURCE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// different kind of data
|
// different kind of data
|
||||||
else if (data instanceof IResource[])
|
else if (data instanceof IResource[])
|
||||||
|
@ -152,6 +194,7 @@ public class SystemViewDataDropAdapter extends ViewerDropAdapter
|
||||||
return srcObjects;
|
return srcObjects;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called by SWT after the drop have been validated to perform the
|
* Called by SWT after the drop have been validated to perform the
|
||||||
* drop transfer.
|
* drop transfer.
|
||||||
|
|
Loading…
Add table
Reference in a new issue