### Eclipse Workspace Patch 1.0 #P org.eclipse.mylyn.tasks.ui Index: src/org/eclipse/mylyn/tasks/ui/editors/AbstractRepositoryTaskEditor.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractRepositoryTaskEditor.java,v retrieving revision 1.250 diff -u -r1.250 AbstractRepositoryTaskEditor.java --- src/org/eclipse/mylyn/tasks/ui/editors/AbstractRepositoryTaskEditor.java 27 Nov 2007 02:22:54 -0000 1.250 +++ src/org/eclipse/mylyn/tasks/ui/editors/AbstractRepositoryTaskEditor.java 27 Nov 2007 22:35:14 -0000 @@ -9,6 +9,9 @@ package org.eclipse.mylyn.tasks.ui.editors; import java.io.File; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -69,9 +72,11 @@ import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.jface.window.ToolTip; import org.eclipse.mylyn.internal.tasks.core.CommentQuoter; +import org.eclipse.mylyn.internal.tasks.ui.ITasksUiConstants; import org.eclipse.mylyn.internal.tasks.ui.PersonProposalLabelProvider; import org.eclipse.mylyn.internal.tasks.ui.PersonProposalProvider; import org.eclipse.mylyn.internal.tasks.ui.TaskListColorsAndFonts; +import org.eclipse.mylyn.internal.tasks.ui.TaskTransfer; import org.eclipse.mylyn.internal.tasks.ui.TasksUiImages; import org.eclipse.mylyn.internal.tasks.ui.actions.AbstractTaskEditorAction; import org.eclipse.mylyn.internal.tasks.ui.actions.AttachAction; @@ -124,6 +129,8 @@ import org.eclipse.swt.custom.VerifyKeyListener; import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.dnd.DND; +import org.eclipse.swt.dnd.DragSourceEvent; +import org.eclipse.swt.dnd.DragSourceListener; import org.eclipse.swt.dnd.DropTarget; import org.eclipse.swt.dnd.FileTransfer; import org.eclipse.swt.dnd.TextTransfer; @@ -597,6 +604,59 @@ // setFormHeaderLabel(); addHeaderControls(); + parentEditor.getTopForm().addTitleDragSupport(DND.DROP_COPY | DND.DROP_LINK, + new Transfer[] { TaskTransfer.getInstance(), FileTransfer.getInstance(), TextTransfer.getInstance() }, // + new DragSourceListener() { + + public void dragStart(DragSourceEvent event) { +// if (repositoryTask == null) { +// event.doit = false; +// } + } + + public void dragFinished(DragSourceEvent event) { + // ignore + } + + public void dragSetData(DragSourceEvent event) { + if (TaskTransfer.getInstance().isSupportedType(event.dataType)) { + // that it won't work for tasks opened from search view + if(repositoryTask!=null) { + event.data = new AbstractTask[] { repositoryTask }; + return; + } + } + if (FileTransfer.getInstance().isSupportedType(event.dataType)) { + // similar code is in TaskListDragSourceListener, maybe move to an utility class + String encodedName = "task-" + repositoryTask.getTaskKey(); + try { + encodedName = URLEncoder.encode(repositoryTask.getHandleIdentifier(), + ITasksUiConstants.FILENAME_ENCODING); + } catch (UnsupportedEncodingException e) { + StatusHandler.fail(e, "Could not determine path for context", false); + } + + File tempDir = new File(TasksUiPlugin.getDefault().getDataDirectory() + File.separator + + "temp"); + if (!tempDir.exists()) { + tempDir.mkdir(); + } + + File taskTempFile; + try { + taskTempFile = File.createTempFile(encodedName, ITasksUiConstants.FILE_EXTENSION, + tempDir); + taskTempFile.deleteOnExit(); + TasksUiPlugin.getTaskListManager().getTaskListWriter().writeTask(repositoryTask, taskTempFile); + + event.data = new String[] { taskTempFile.getAbsolutePath() }; + } catch (IOException e) { + StatusHandler.fail(e, "Cannot create a temp query file for Drag&Drop", true); + } + } + } + }); + if (summaryTextViewer != null) { summaryTextViewer.getTextWidget().setFocus(); } @@ -1659,6 +1719,8 @@ }); } + + registerDropListener(parentEditor.getTopForm()); registerDropListener(section); registerDropListener(attachmentsComposite); registerDropListener(attachFileButton);