diff options
author | relves | 2007-03-16 23:47:56 +0000 |
---|---|---|
committer | relves | 2007-03-16 23:47:56 +0000 |
commit | 65cb3501c9269de9dd90ad7d99fe6ef578740339 (patch) | |
tree | 5eec9a48184c7861f489cfe6ee2fb34e15c406e8 | |
parent | 227b53d31e4748f355547b6be4754b628a7ccefb (diff) | |
download | org.eclipse.mylyn.tasks-65cb3501c9269de9dd90ad7d99fe6ef578740339.tar.gz org.eclipse.mylyn.tasks-65cb3501c9269de9dd90ad7d99fe6ef578740339.tar.xz org.eclipse.mylyn.tasks-65cb3501c9269de9dd90ad7d99fe6ef578740339.zip |
NEW - bug 177482: Remember selection history in tasklist
https://bugs.eclipse.org/bugs/show_bug.cgi?id=177482
-rw-r--r-- | org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java index 4421e8423..ceb6147d8 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java @@ -15,6 +15,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -255,6 +256,10 @@ public class TaskListView extends ViewPart { private TaskListTableSorter tableSorter; int sortDirection = DEFAULT_SORT_DIRECTION; + + private final static int MAX_SELECTION_HISTORY_SIZE = 10; + + private LinkedHashMap<String, IStructuredSelection> lastSelectionByTaskHandle = new LinkedHashMap<String, IStructuredSelection>(MAX_SELECTION_HISTORY_SIZE); /** * True if the view should indicate that interaction monitoring is paused @@ -1441,7 +1446,12 @@ public class TaskListView extends ViewPart { if (task == null || getViewer().getControl().isDisposed()) { return; } - getViewer().setSelection(new StructuredSelection(task), true); + + saveSelection(); + + IStructuredSelection selection = restoreSelection(task); + getViewer().setSelection(selection, true); + // if no task exists, select the query hit if exists AbstractQueryHit hit = null; if (getViewer().getSelection().isEmpty() @@ -1457,6 +1467,33 @@ public class TaskListView extends ViewPart { } } + private void saveSelection() { + IStructuredSelection selection = (IStructuredSelection) getViewer().getSelection(); + if (!selection.isEmpty()) { + if (selection.getFirstElement() instanceof ITaskListElement) { + // make sure the new selection is inserted at the end of the list + String handle = ((ITaskListElement) selection.getFirstElement()).getHandleIdentifier(); + lastSelectionByTaskHandle.remove(handle); + lastSelectionByTaskHandle.put(handle, selection); + + if (lastSelectionByTaskHandle.size() > MAX_SELECTION_HISTORY_SIZE) { + Iterator<String> it = lastSelectionByTaskHandle.keySet().iterator(); + it.next(); + it.remove(); + } + } + } + } + + private IStructuredSelection restoreSelection(ITaskListElement task) { + IStructuredSelection selection = lastSelectionByTaskHandle.get(task.getHandleIdentifier()); + if (selection != null) { + return selection; + } else { + return new StructuredSelection(task); + } + } + /** * Encapsulates refresh policy. */ |