From 901350d6fe4bc717b76fb0023ebdd04a761d8d9f Tue, 31 Jan 2012 15:54:05 -0800 From: Sam Davis Date: Tue, 31 Jan 2012 15:52:23 -0800 Subject: [PATCH] NEW - bug 370283: [api] support extending the TaskListDropAdapter https://bugs.eclipse.org/bugs/show_bug.cgi?id=370283 Change-Id: Ie0aed30a5df1dbf0b95d285e42a8b9c8d5fe7463 diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDropAdapter.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDropAdapter.java index cee178f..e0a4a70 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDropAdapter.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDropAdapter.java @@ -40,7 +40,6 @@ import org.eclipse.mylyn.tasks.core.ITaskContainer; import org.eclipse.mylyn.tasks.ui.TasksUiUtil; import org.eclipse.swt.dnd.DND; -import org.eclipse.swt.dnd.DropTargetEvent; import org.eclipse.swt.dnd.FileTransfer; import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.TransferData; @@ -64,18 +63,8 @@ } @Override - public void dragOver(DropTargetEvent event) { - // support dragging from sources only supporting DROP_LINK - if (event.detail == DND.DROP_NONE && (event.operations & DND.DROP_LINK) == DND.DROP_LINK) { - event.detail = DND.DROP_LINK; - } - super.dragOver(event); - } - - @Override public boolean performDrop(final Object data) { List tasksToMove = new ArrayList(); - if (localTransfer) { ISelection selection = LocalSelectionTransfer.getTransfer().getSelection(); List tasks = TasksUiInternal.getTasksFromSelection(selection); @@ -107,49 +96,55 @@ } } } else { - for (ITask task : tasksToMove) { - if (currentTarget instanceof UncategorizedTaskContainer) { - moveTask(task, (UncategorizedTaskContainer) currentTarget); - } else if (currentTarget instanceof TaskCategory) { - moveTask(task, (TaskCategory) currentTarget); - } else if (currentTarget instanceof UnmatchedTaskContainer) { - if (((UnmatchedTaskContainer) currentTarget).getRepositoryUrl().equals(task.getRepositoryUrl())) { - moveTask(task, (AbstractTaskCategory) currentTarget); - } - } else if (currentTarget instanceof ITask) { - ITask targetTask = (ITask) currentTarget; - TaskListView view = TaskListView.getFromActivePerspective(); - if ((getCurrentLocation() == LOCATION_BEFORE || getCurrentLocation() == LOCATION_AFTER) - && view != null && view.isScheduledPresentation()) { - if (targetTask instanceof AbstractTask) { - DateRange targetDate = ((AbstractTask) targetTask).getScheduledForDate(); - TasksUiPlugin.getTaskActivityManager().setScheduledFor((AbstractTask) task, targetDate); + if (currentTarget instanceof ITask && getCurrentLocation() == ViewerDropAdapter.LOCATION_ON + && getCurrentOperation() != DND.DROP_MOVE) { + // TODO call extension with currentOperation, currentTarget and tasksToMove + } else { + for (ITask task : tasksToMove) { + if (currentTarget instanceof UncategorizedTaskContainer) { + moveTask(task, (UncategorizedTaskContainer) currentTarget); + } else if (currentTarget instanceof TaskCategory) { + moveTask(task, (TaskCategory) currentTarget); + } else if (currentTarget instanceof UnmatchedTaskContainer) { + if (((UnmatchedTaskContainer) currentTarget).getRepositoryUrl().equals(task.getRepositoryUrl())) { + moveTask(task, (AbstractTaskCategory) currentTarget); } - } else { - AbstractTaskCategory targetCategory = null; - // TODO: TaskCategory only used what about AbstractTaskCategory descendants? - ITaskContainer container = TaskCategory.getParentTaskCategory(targetTask); - if (container instanceof TaskCategory || container instanceof UncategorizedTaskContainer) { - targetCategory = (AbstractTaskCategory) container; - } else if (container instanceof UnmatchedTaskContainer) { - if (((UnmatchedTaskContainer) container).getRepositoryUrl().equals(task.getRepositoryUrl())) { + } else if (currentTarget instanceof ITask) { + ITask targetTask = (ITask) currentTarget; + TaskListView view = TaskListView.getFromActivePerspective(); + if ((getCurrentLocation() == LOCATION_BEFORE || getCurrentLocation() == LOCATION_AFTER) + && view != null && view.isScheduledPresentation()) { + if (targetTask instanceof AbstractTask) { + DateRange targetDate = ((AbstractTask) targetTask).getScheduledForDate(); + TasksUiPlugin.getTaskActivityManager().setScheduledFor((AbstractTask) task, targetDate); + } + } else { + AbstractTaskCategory targetCategory = null; + // TODO: TaskCategory only used what about AbstractTaskCategory descendants? + ITaskContainer container = TaskCategory.getParentTaskCategory(targetTask); + if (container instanceof TaskCategory || container instanceof UncategorizedTaskContainer) { targetCategory = (AbstractTaskCategory) container; + } else if (container instanceof UnmatchedTaskContainer) { + if (((UnmatchedTaskContainer) container).getRepositoryUrl().equals( + task.getRepositoryUrl())) { + targetCategory = (AbstractTaskCategory) container; + } + } + if (targetCategory != null) { + moveTask(task, targetCategory); } } - if (targetCategory != null) { - moveTask(task, targetCategory); + } else if (currentTarget instanceof ScheduledTaskContainer) { + ScheduledTaskContainer container = (ScheduledTaskContainer) currentTarget; + if (container instanceof Unscheduled) { + TasksUiPlugin.getTaskActivityManager().setScheduledFor((AbstractTask) task, null); + } else if (isValidTarget(container)) { + TasksUiPlugin.getTaskActivityManager().setScheduledFor((AbstractTask) task, + container.getDateRange()); } + } else if (currentTarget == null) { + moveTask(task, TasksUiPlugin.getTaskList().getDefaultCategory()); } - } else if (currentTarget instanceof ScheduledTaskContainer) { - ScheduledTaskContainer container = (ScheduledTaskContainer) currentTarget; - if (container instanceof Unscheduled) { - TasksUiPlugin.getTaskActivityManager().setScheduledFor((AbstractTask) task, null); - } else if (isValidTarget(container)) { - TasksUiPlugin.getTaskActivityManager().setScheduledFor((AbstractTask) task, - container.getDateRange()); - } - } else if (currentTarget == null) { - moveTask(task, TasksUiPlugin.getTaskList().getDefaultCategory()); } } } @@ -260,6 +255,9 @@ return true; } else if (target instanceof LocalTask && getCurrentLocation() == ViewerDropAdapter.LOCATION_ON) { return true; + } else if (target instanceof ITask && getCurrentLocation() == ViewerDropAdapter.LOCATION_ON + && getCurrentOperation() != DND.DROP_MOVE) { + return true; } else { return false; }