### Eclipse Workspace Patch 1.0 #P org.eclipse.team.ui Index: src/org/eclipse/team/internal/ui/synchronize/AbstractTreeViewerAdvisor.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/AbstractTreeViewerAdvisor.java,v retrieving revision 1.15 diff -u -r1.15 AbstractTreeViewerAdvisor.java --- src/org/eclipse/team/internal/ui/synchronize/AbstractTreeViewerAdvisor.java 20 Sep 2007 18:45:54 -0000 1.15 +++ src/org/eclipse/team/internal/ui/synchronize/AbstractTreeViewerAdvisor.java 19 Oct 2007 15:05:58 -0000 @@ -175,40 +175,43 @@ private static TreeItem findNextPrev(TreeViewer viewer, TreeItem item, boolean next) { if (item == null || !(viewer instanceof ITreeViewerAccessor)) - return null; + if (next) + return getFirstItem(viewer); + else + return getLastItem(viewer); TreeItem children[] = null; ITreeViewerAccessor treeAccessor = (ITreeViewerAccessor) viewer; + item.setExpanded(true); + treeAccessor.createChildren(item); + viewer.getTree(); if (!next) { - TreeItem parent = item.getParentItem(); - if (parent != null) - children = parent.getItems(); - else - children = item.getParent().getItems(); - if (children != null && children.length > 0) { - // goto previous child - int index = 0; - for (; index < children.length; index++) - if (children[index] == item) - break; - if (index > 0) { - item = children[index - 1]; - while (true) { - treeAccessor.createChildren(item); - int n = item.getItemCount(); - if (n <= 0) + if (item.getItemCount() > 0) { + // has children: go down + children = item.getItems(); + return children[item.getItemCount() - 1]; + } + while (item != null) { + children = null; + TreeItem parent = item.getParentItem(); + if (parent != null) + children = parent.getItems(); + else + children = item.getParent().getItems(); + if (children != null && children.length > 0) { + // goto previous child + int index = 0; + for (; index < children.length; index++) + if (children[index] == item) break; - item.setExpanded(true); - item = item.getItems()[n - 1]; - } - // previous - return item; + if (index > 0) { + // previous + return children[index - 1]; + } } + // go up + item = parent; } - // go up - return parent; } else { - item.setExpanded(true); - treeAccessor.createChildren(item); if (item.getItemCount() > 0) { // has children: go down children = item.getItems(); @@ -284,14 +287,12 @@ private static TreeItem getNextItem(TreeViewer viewer, boolean next) { TreeItem item = getCurrentItem(viewer); - if (item != null) { while (true) { item = findNextPrev(viewer, item, next); if (item == null) break; if (item.getItemCount() <= 0) break; - } } return item; } @@ -304,17 +305,36 @@ TreeItem children[] = tree.getSelection(); if (children != null && children.length > 0) item = children[0]; - if (item == null) { - children = tree.getItems(); - if (children != null && children.length > 0) { - item = children[0]; - } + return item; + } + + private static TreeItem getFirstItem(TreeViewer viewer) { + Tree tree = viewer.getTree(); + if (tree == null) + return null; + TreeItem item = null; + TreeItem children[] = tree.getItems(); + if (children != null && children.length > 0) { + item = children[0]; + } + return item; + } + + private static TreeItem getLastItem(TreeViewer viewer) { + Tree tree = viewer.getTree(); + if (tree == null) + return null; + TreeItem item = null; + TreeItem children[] = tree.getItems(); + if (children != null && children.length > 0) { + item = children[children.length-1]; } return item; } private static boolean hasChange(TreeViewer viewer, boolean next) { TreeItem item = getCurrentItem(viewer); + if (item == null) item = getFirstItem(viewer); if (item != null) { return hasNextPrev(viewer, item, next); }