From 2a9bc981297e6507d97a008f279fe50083018ed3 Mon Sep 17 00:00:00 2001 From: spingel Date: Fri, 22 Aug 2008 05:59:29 +0000 Subject: RESOLVED - bug 244903: preserve selection when toggling focus on workweek mode https://bugs.eclipse.org/bugs/show_bug.cgi?id=244903 --- .../internal/tasks/ui/util/TasksUiInternal.java | 41 ++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiInternal.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiInternal.java index 66ba83658..fc974608b 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiInternal.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiInternal.java @@ -15,6 +15,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashSet; +import java.util.LinkedList; import java.util.List; import java.util.Set; @@ -35,7 +36,11 @@ import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.TreePath; +import org.eclipse.jface.viewers.TreeSelection; +import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.window.Window; import org.eclipse.jface.wizard.IWizard; import org.eclipse.jface.wizard.WizardDialog; @@ -93,6 +98,7 @@ import org.eclipse.mylyn.tasks.ui.editors.TaskEditorInput; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.TreeItem; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorReference; @@ -918,4 +924,39 @@ public class TasksUiInternal { return (text != null) ? text.replace("&", "&&") : null; // mask & from SWT } + public static void preservingSelection(TreeViewer viewer, Runnable runnable) { + TreePath[] treePath = null; + TreeItem[] selection = viewer.getTree().getSelection(); + if (selection.length > 0) { + treePath = new TreePath[selection.length]; + for (int i = 0; i < selection.length; i++) { + treePath[i] = getTreePath(selection[i]); + if (treePath[i] == null) { + treePath = null; + return; + } + } + } + + runnable.run(); + + if (treePath != null) { + ISelection newSelection = viewer.getSelection(); + if (newSelection == null || newSelection.isEmpty()) { + viewer.setSelection(new TreeSelection(treePath), true); + } + } + } + + private static TreePath getTreePath(TreeItem treeItem) { + LinkedList segments = new LinkedList(); + if (treeItem.getData() != null) { + do { + segments.addFirst(treeItem.getData()); + treeItem = treeItem.getParentItem(); + } while (treeItem != null); + } + return new TreePath(segments.toArray()); + } + } -- cgit v1.2.3