Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrelves2007-03-16 23:47:56 +0000
committerrelves2007-03-16 23:47:56 +0000
commit65cb3501c9269de9dd90ad7d99fe6ef578740339 (patch)
tree5eec9a48184c7861f489cfe6ee2fb34e15c406e8
parent227b53d31e4748f355547b6be4754b628a7ccefb (diff)
downloadorg.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.java39
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.
*/

Back to the top