1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-08 17:45:24 +02:00

drag and drop transfer operations now use Worker jobs instead of UI jobs. Allows for better ui responsiveness and concurrent operations.

This commit is contained in:
David McKnight 2006-05-31 14:34:29 +00:00
parent 2951860b14
commit 6ed9345743
5 changed files with 108 additions and 50 deletions

View file

@ -61,6 +61,7 @@ import org.eclipse.rse.ui.messages.SystemMessageDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.RenameResourceAction;
/**
@ -1492,20 +1493,41 @@ public class UniversalFileTransferUtility
if (targetFileOrFolder != null && targetFileOrFolder.exists())
{
ValidatorFileUniqueName validator = null;
SystemRenameSingleDialog dlg = new SystemRenameSingleDialog(shell, true, targetFileOrFolder, validator); // true => copy-collision-mode
dlg.open();
if (!dlg.wasCancelled())
newName = dlg.getNewName();
else
newName = null;
RenameRunnable rr = new RenameRunnable(targetFileOrFolder);
Display.getDefault().syncExec(rr);
newName = rr.getNewName();
}
return newName;
}
public static class RenameRunnable implements Runnable
{
private IRemoteFile _targetFileOrFolder;
private String _newName;
public RenameRunnable(IRemoteFile targetFileOrFolder)
{
_targetFileOrFolder = targetFileOrFolder;
}
public void run() {
ValidatorFileUniqueName validator = null;
SystemRenameSingleDialog dlg = new SystemRenameSingleDialog(null, true, _targetFileOrFolder, validator); // true => copy-collision-mode
dlg.open();
if (!dlg.wasCancelled())
_newName = dlg.getNewName();
else
_newName = null;
}
public String getNewName()
{
return _newName;
}
}
protected static String checkForCollision(IRemoteFile targetFolder, String oldName)
{
String newName = oldName;

View file

@ -1656,7 +1656,15 @@ public class SystemViewRemoteFileAdapter
{
if (fromSet instanceof SystemWorkspaceResourceSet)
{
Shell shell = null;
try
{
shell = getShell();
}
catch (Exception e)
{
}
boolean doSuperTransferProperty = RSEUIPlugin.getDefault().getPreferenceStore().getBoolean(ISystemPreferencesConstants.DOSUPERTRANSFER);
if (!doSuperTransferProperty)
{
@ -1669,11 +1677,11 @@ public class SystemViewRemoteFileAdapter
monitor.beginTask(_uploadMessage.getLevelOneText(), size);
}
// back to hierarchy
return UniversalFileTransferUtility.copyWorkspaceResourcesToRemote((SystemWorkspaceResourceSet)fromSet, targetFolder, monitor, getShell(), true);
return UniversalFileTransferUtility.copyWorkspaceResourcesToRemote((SystemWorkspaceResourceSet)fromSet, targetFolder, monitor, shell, true);
}
else
{
return UniversalFileTransferUtility.copyWorkspaceResourcesToRemote((SystemWorkspaceResourceSet)fromSet, targetFolder, monitor, getShell(), true);
return UniversalFileTransferUtility.copyWorkspaceResourcesToRemote((SystemWorkspaceResourceSet)fromSet, targetFolder, monitor, shell, true);
}
}
else if (fromSet instanceof SystemRemoteResourceSet)

View file

@ -448,7 +448,7 @@ public class DStoreFileService extends AbstractDStoreService implements IFileSer
}
if (display != null && monitor != null)
if (/*display != null &&*/ monitor != null)
{
long percent = (totalSent * 100) / totalBytes;
@ -469,15 +469,17 @@ public class DStoreFileService extends AbstractDStoreService implements IFileSer
String str = MessageFormat.format(_percentMsg, new Object[] {totalSentBuf, totalBuf, percentBuf});
monitor.subTask(str);
while (display.readAndDispatch())
if (display != null)
{
while (display.readAndDispatch())
{
}
}
isCancelled = monitor.isCanceled();
if (isCancelled)
if (isCancelled && display != null)
{
while (display.readAndDispatch())
{

View file

@ -62,7 +62,6 @@ public class SftpFileService extends AbstractFileService implements IFileService
return "Access a remote file system via Ssh / Sftp protocol";
}
//TODO specify Exception more clearly
public void connect() throws Exception {
Activator.trace("SftpFileService.connecting..."); //$NON-NLS-1$
try {
@ -78,7 +77,6 @@ public class SftpFileService extends AbstractFileService implements IFileService
}
}
//TODO specify Exception more clearly
protected ChannelSftp getChannel(String task) throws Exception
{
Activator.trace(task);
@ -243,7 +241,7 @@ public class SftpFileService extends AbstractFileService implements IFileService
}
public boolean count(long count){
fMonitor.worked((int)count);
while (Display.getCurrent().readAndDispatch());
return !(fMonitor.isCanceled());
}
public void end(){

View file

@ -24,11 +24,14 @@ import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.rse.core.RSECorePlugin;
import org.eclipse.rse.core.SystemBasePlugin;
import org.eclipse.rse.core.subsystems.ISubSystem;
import org.eclipse.rse.core.subsystems.ISubSystemConfiguration;
import org.eclipse.rse.core.subsystems.SubSystem;
import org.eclipse.rse.filters.ISystemFilterReference;
import org.eclipse.rse.model.IHost;
import org.eclipse.rse.model.ISystemContainer;
@ -50,7 +53,7 @@ import org.eclipse.ui.progress.UIJob;
* Runnable to perform actual transfer operation.
*
*/
public class SystemDNDTransferRunnable extends UIJob
public class SystemDNDTransferRunnable extends Job
{
public static final int SRC_TYPE_RSE_RESOURCE = 0;
@ -492,7 +495,7 @@ public class SystemDNDTransferRunnable extends UIJob
return true;
}
public IStatus runInUIThread(IProgressMonitor monitor)
public IStatus run(IProgressMonitor monitor)
{
_ok = true;
@ -541,45 +544,70 @@ public class SystemDNDTransferRunnable extends UIJob
{
monitor.done();
}
// always refresh
ISystemRegistry registry = RSEUIPlugin.getTheSystemRegistry();
if (target != null && target instanceof ISystemContainer)
{
((ISystemContainer)target).markStale(true);
}
if (_resultTgtObjects.size() > 0)
RefreshJob refresh = new RefreshJob(target, targetSubSystem);
refresh.schedule();
return Status.OK_STATUS;
}
public class RefreshJob extends UIJob
{
private Object _target;
private ISubSystem _targetSubSystem;
public RefreshJob(Object target, ISubSystem targetSubSystem)
{
boolean doRefresh = _ok;
for (int t = 0; t < _resultTgtObjects.size() && t < _resultSrcObjects.size(); t++)
{
Object tgt = _resultTgtObjects.get(t);
Object src = _resultSrcObjects.get(t);
if (tgt == src || tgt == null)
{
doRefresh = false;
}
else
{
doRefresh = true;
}
}
if (_originatingViewer instanceof TreeViewer)
{
TreeViewer viewer = (TreeViewer) _originatingViewer;
viewer.setExpandedState(target, true);
}
if (doRefresh)
{
registry.fireRemoteResourceChangeEvent(ISystemRemoteChangeEvents.SYSTEM_REMOTE_RESOURCE_CREATED, _resultTgtObjects, target, targetSubSystem, null, _originatingViewer);
}
super("Refresh");
_target = target;
_targetSubSystem = targetSubSystem;
}
registry.fireEvent(new SystemResourceChangeEvent(target, ISystemResourceChangeEvents.EVENT_REFRESH, target));
return Status.OK_STATUS;
public IStatus runInUIThread(IProgressMonitor monitor)
{
ISystemRegistry registry = RSEUIPlugin.getTheSystemRegistry();
if (_resultTgtObjects.size() > 0)
{
boolean doRefresh = _ok;
for (int t = 0; t < _resultTgtObjects.size() && t < _resultSrcObjects.size(); t++)
{
Object tgt = _resultTgtObjects.get(t);
Object src = _resultSrcObjects.get(t);
if (tgt == src || tgt == null)
{
doRefresh = false;
}
else
{
doRefresh = true;
}
}
if (_originatingViewer instanceof TreeViewer)
{
try
{
TreeViewer viewer = (TreeViewer) _originatingViewer;
viewer.setExpandedState(_target, true);
}
catch (Exception e)
{
}
}
if (doRefresh)
{
registry.fireRemoteResourceChangeEvent(ISystemRemoteChangeEvents.SYSTEM_REMOTE_RESOURCE_CREATED, _resultTgtObjects, _target, _targetSubSystem, null, _originatingViewer);
}
}
registry.fireEvent(new SystemResourceChangeEvent(_target, ISystemResourceChangeEvents.EVENT_REFRESH, _target));
return Status.OK_STATUS;
}
}
private void operationFailed(IProgressMonitor monitor)