mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-20 22:55:51 +02:00
[153652] allowing for drag and drop stuff that for some reason didn't get committed last week
This commit is contained in:
parent
d8fff26c00
commit
51cad71182
2 changed files with 114 additions and 3 deletions
|
@ -300,7 +300,7 @@ public class SystemViewDataDragAdapter extends DragSourceAdapter
|
||||||
editable.addAsListener();
|
editable.addAsListener();
|
||||||
editable.setLocalResourceProperties();
|
editable.setLocalResourceProperties();
|
||||||
|
|
||||||
IFile theFile = editable.getLocalResource();
|
IFile theFile = (IFile)editable.getLocalResource();
|
||||||
|
|
||||||
IEditorDescriptor preferredEditor = editRegistry.getDefaultEditor(theFile.getName()); // may be null
|
IEditorDescriptor preferredEditor = editRegistry.getDefaultEditor(theFile.getName()); // may be null
|
||||||
if (preferredEditor == null)
|
if (preferredEditor == null)
|
||||||
|
|
|
@ -18,7 +18,15 @@ package org.eclipse.rse.ui.actions;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IContainer;
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
import org.eclipse.core.runtime.IAdaptable;
|
import org.eclipse.core.runtime.IAdaptable;
|
||||||
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
import org.eclipse.core.runtime.IStatus;
|
||||||
|
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||||
|
import org.eclipse.core.runtime.Status;
|
||||||
|
import org.eclipse.core.runtime.jobs.Job;
|
||||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||||
import org.eclipse.rse.core.model.IHost;
|
import org.eclipse.rse.core.model.IHost;
|
||||||
import org.eclipse.rse.core.model.ISystemRegistry;
|
import org.eclipse.rse.core.model.ISystemRegistry;
|
||||||
|
@ -30,6 +38,7 @@ import org.eclipse.rse.ui.ISystemContextMenuConstants;
|
||||||
import org.eclipse.rse.ui.RSEUIPlugin;
|
import org.eclipse.rse.ui.RSEUIPlugin;
|
||||||
import org.eclipse.rse.ui.SystemResources;
|
import org.eclipse.rse.ui.SystemResources;
|
||||||
import org.eclipse.rse.ui.validators.IValidatorRemoteSelection;
|
import org.eclipse.rse.ui.validators.IValidatorRemoteSelection;
|
||||||
|
import org.eclipse.rse.ui.view.ISystemEditableRemoteObject;
|
||||||
import org.eclipse.rse.ui.view.ISystemRemoteElementAdapter;
|
import org.eclipse.rse.ui.view.ISystemRemoteElementAdapter;
|
||||||
import org.eclipse.rse.ui.view.ISystemViewElementAdapter;
|
import org.eclipse.rse.ui.view.ISystemViewElementAdapter;
|
||||||
import org.eclipse.swt.dnd.Clipboard;
|
import org.eclipse.swt.dnd.Clipboard;
|
||||||
|
@ -41,6 +50,7 @@ import org.eclipse.ui.ISharedImages;
|
||||||
import org.eclipse.ui.PlatformUI;
|
import org.eclipse.ui.PlatformUI;
|
||||||
import org.eclipse.ui.part.PluginTransfer;
|
import org.eclipse.ui.part.PluginTransfer;
|
||||||
import org.eclipse.ui.part.PluginTransferData;
|
import org.eclipse.ui.part.PluginTransferData;
|
||||||
|
import org.eclipse.ui.part.ResourceTransfer;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -48,10 +58,33 @@ import org.eclipse.ui.part.PluginTransferData;
|
||||||
*/
|
*/
|
||||||
public class SystemCopyToClipboardAction extends SystemBaseAction implements IValidatorRemoteSelection
|
public class SystemCopyToClipboardAction extends SystemBaseAction implements IValidatorRemoteSelection
|
||||||
{
|
{
|
||||||
|
private class LazyDownloadJob extends Job
|
||||||
|
{
|
||||||
|
private ISystemEditableRemoteObject _editable;
|
||||||
|
public LazyDownloadJob(ISystemEditableRemoteObject editable)
|
||||||
|
{
|
||||||
|
// TODO Auto-generated constructor stub
|
||||||
|
super("Downloading " + editable.getAbsolutePath());
|
||||||
|
_editable = editable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IStatus run(IProgressMonitor monitor)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_editable.download(monitor);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return Status.OK_STATUS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private IStructuredSelection _selection;
|
private IStructuredSelection _selection;
|
||||||
private Clipboard _clipboard;
|
private Clipboard _clipboard;
|
||||||
|
private boolean _doResourceTransfer = true; //experiment
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
|
@ -77,6 +110,65 @@ public class SystemCopyToClipboardAction extends SystemBaseAction implements IV
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private IResource getResource(IAdaptable dragObject)
|
||||||
|
{
|
||||||
|
IResource resource = null;
|
||||||
|
ISystemViewElementAdapter viewAdapter = (ISystemViewElementAdapter) dragObject.getAdapter(ISystemViewElementAdapter.class);
|
||||||
|
ISystemRemoteElementAdapter remoteAdapter = (ISystemRemoteElementAdapter)dragObject.getAdapter(ISystemRemoteElementAdapter.class);
|
||||||
|
|
||||||
|
if (remoteAdapter != null)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (remoteAdapter.canEdit(dragObject))
|
||||||
|
{
|
||||||
|
ISystemEditableRemoteObject editable = remoteAdapter.getEditableRemoteObject(dragObject);
|
||||||
|
// corresponds to a file
|
||||||
|
IFile file = editable.getLocalResource();
|
||||||
|
if (!file.exists())
|
||||||
|
{
|
||||||
|
LazyDownloadJob job = new LazyDownloadJob(editable);
|
||||||
|
job.schedule();
|
||||||
|
}
|
||||||
|
resource = file;
|
||||||
|
}
|
||||||
|
else if (viewAdapter != null)
|
||||||
|
{
|
||||||
|
if (viewAdapter.hasChildren(dragObject))
|
||||||
|
{
|
||||||
|
IContainer parentFolder = null;
|
||||||
|
// corresponds to a folder
|
||||||
|
Object[] children = viewAdapter.getChildren(new NullProgressMonitor(), dragObject);
|
||||||
|
for (int i = 0; i < children.length; i++)
|
||||||
|
{
|
||||||
|
IAdaptable child = (IAdaptable)children[i];
|
||||||
|
IResource childResource = getResource(child);
|
||||||
|
if (childResource != null)
|
||||||
|
{
|
||||||
|
parentFolder = childResource.getParent();
|
||||||
|
if (!parentFolder.exists())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
parentFolder.touch(new NullProgressMonitor());
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
resource = parentFolder;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resource;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private void copySelectionToClipboard(IStructuredSelection ss)
|
private void copySelectionToClipboard(IStructuredSelection ss)
|
||||||
{
|
{
|
||||||
Iterator iterator = ss.iterator();
|
Iterator iterator = ss.iterator();
|
||||||
|
@ -84,7 +176,10 @@ public class SystemCopyToClipboardAction extends SystemBaseAction implements IV
|
||||||
// marshall data
|
// marshall data
|
||||||
StringBuffer textStream = new StringBuffer(""); //$NON-NLS-1$
|
StringBuffer textStream = new StringBuffer(""); //$NON-NLS-1$
|
||||||
StringBuffer dataStream = new StringBuffer(""); //$NON-NLS-1$
|
StringBuffer dataStream = new StringBuffer(""); //$NON-NLS-1$
|
||||||
|
|
||||||
ArrayList fileNames = new ArrayList();
|
ArrayList fileNames = new ArrayList();
|
||||||
|
ArrayList resources = new ArrayList();
|
||||||
|
|
||||||
ISystemRegistry registry = RSEUIPlugin.getTheSystemRegistry();
|
ISystemRegistry registry = RSEUIPlugin.getTheSystemRegistry();
|
||||||
|
|
||||||
while (iterator.hasNext())
|
while (iterator.hasNext())
|
||||||
|
@ -119,6 +214,11 @@ public class SystemCopyToClipboardAction extends SystemBaseAction implements IV
|
||||||
dataStream.append(SystemViewDataDropAdapter.RESOURCE_SEPARATOR);
|
dataStream.append(SystemViewDataDropAdapter.RESOURCE_SEPARATOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_doResourceTransfer)
|
||||||
|
{
|
||||||
|
resources.add(getResource((IAdaptable)dragObject));
|
||||||
|
}
|
||||||
|
|
||||||
/** FIXME - files can't be coupled to systems.core!
|
/** FIXME - files can't be coupled to systems.core!
|
||||||
// support for external copy for local files
|
// support for external copy for local files
|
||||||
if (dragObject instanceof IRemoteFile)
|
if (dragObject instanceof IRemoteFile)
|
||||||
|
@ -141,7 +241,18 @@ public class SystemCopyToClipboardAction extends SystemBaseAction implements IV
|
||||||
PluginTransferData data = new PluginTransferData(SystemDropActionDelegate.ID, dataStream.toString().getBytes());
|
PluginTransferData data = new PluginTransferData(SystemDropActionDelegate.ID, dataStream.toString().getBytes());
|
||||||
|
|
||||||
// put data in clipboard
|
// put data in clipboard
|
||||||
if (fileNames.size() == 0)
|
if (_doResourceTransfer && resources.size() > 0)
|
||||||
|
{
|
||||||
|
IResource[] ft = new IResource[resources.size()];
|
||||||
|
for (int i = 0; i < ft.length; i++)
|
||||||
|
{
|
||||||
|
ft[i] = (IResource) resources.get(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
_clipboard.setContents(new Object[] { data, ft, textStream.toString() }, new Transfer[] { PluginTransfer.getInstance(), ResourceTransfer.getInstance(), TextTransfer.getInstance()});
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (fileNames.size() == 0)
|
||||||
{
|
{
|
||||||
_clipboard.setContents(new Object[] { data, textStream.toString() }, new Transfer[] { PluginTransfer.getInstance(), TextTransfer.getInstance()});
|
_clipboard.setContents(new Object[] { data, textStream.toString() }, new Transfer[] { PluginTransfer.getInstance(), TextTransfer.getInstance()});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue