View | Details | Raw Unified | Return to bug 204157 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/team/internal/ui/synchronize/AbstractTreeViewerAdvisor.java (-34 / +54 lines)
Lines 175-214 Link Here
175
	
175
	
176
	private static TreeItem findNextPrev(TreeViewer viewer, TreeItem item, boolean next) {
176
	private static TreeItem findNextPrev(TreeViewer viewer, TreeItem item, boolean next) {
177
		if (item == null || !(viewer instanceof ITreeViewerAccessor))
177
		if (item == null || !(viewer instanceof ITreeViewerAccessor))
178
			return null;
178
			if (next)
179
				return getFirstItem(viewer);
180
			else 
181
				return getLastItem(viewer);
179
		TreeItem children[] = null;
182
		TreeItem children[] = null;
180
		ITreeViewerAccessor treeAccessor = (ITreeViewerAccessor) viewer;
183
		ITreeViewerAccessor treeAccessor = (ITreeViewerAccessor) viewer;
184
		item.setExpanded(true);
185
		treeAccessor.createChildren(item);
186
		viewer.getTree();
181
		if (!next) {
187
		if (!next) {
182
			TreeItem parent = item.getParentItem();
188
			if (item.getItemCount() > 0) {
183
			if (parent != null)
189
				// has children: go down
184
				children = parent.getItems();
190
				children = item.getItems();
185
			else
191
				return children[item.getItemCount() - 1];
186
				children = item.getParent().getItems();
192
			}
187
			if (children != null && children.length > 0) {
193
			while (item != null) {
188
				// goto previous child
194
				children = null;
189
				int index = 0;
195
				TreeItem parent = item.getParentItem();
190
				for (; index < children.length; index++)
196
				if (parent != null)
191
					if (children[index] == item)
197
					children = parent.getItems();
192
						break;
198
				else
193
				if (index > 0) {
199
					children = item.getParent().getItems();
194
					item = children[index - 1];
200
				if (children != null && children.length > 0) {
195
					while (true) {
201
					// goto previous child
196
						treeAccessor.createChildren(item);
202
					int index = 0;
197
						int n = item.getItemCount();
203
					for (; index < children.length; index++)
198
						if (n <= 0)
204
						if (children[index] == item)
199
							break;
205
							break;
200
						item.setExpanded(true);
206
					if (index > 0) {
201
						item = item.getItems()[n - 1];
207
						// previous
202
					}
208
						return children[index - 1];
203
					// previous
209
					} 
204
					return item;
205
				}
210
				}
211
				// go up
212
				item = parent;
206
			}
213
			}
207
			// go up
208
			return parent;
209
		} else {
214
		} else {
210
			item.setExpanded(true);
211
			treeAccessor.createChildren(item);
212
			if (item.getItemCount() > 0) {
215
			if (item.getItemCount() > 0) {
213
				// has children: go down
216
				// has children: go down
214
				children = item.getItems();
217
				children = item.getItems();
Lines 284-297 Link Here
284
		
287
		
285
	private static TreeItem getNextItem(TreeViewer viewer, boolean next) {
288
	private static TreeItem getNextItem(TreeViewer viewer, boolean next) {
286
		TreeItem item = getCurrentItem(viewer);
289
		TreeItem item = getCurrentItem(viewer);
287
		if (item != null) {
288
			while (true) {
290
			while (true) {
289
				item = findNextPrev(viewer, item, next);
291
				item = findNextPrev(viewer, item, next);
290
				if (item == null)
292
				if (item == null)
291
					break;
293
					break;
292
				if (item.getItemCount() <= 0)
294
				if (item.getItemCount() <= 0)
293
					break;
295
					break;
294
			}
295
		}
296
		}
296
		return item;
297
		return item;
297
	}
298
	}
Lines 304-320 Link Here
304
		TreeItem children[] = tree.getSelection();
305
		TreeItem children[] = tree.getSelection();
305
		if (children != null && children.length > 0)
306
		if (children != null && children.length > 0)
306
			item = children[0];
307
			item = children[0];
307
		if (item == null) {
308
		return item;
308
			children = tree.getItems();
309
	}
309
			if (children != null && children.length > 0) {
310
	
310
				item = children[0];
311
	private static TreeItem getFirstItem(TreeViewer viewer) {
311
			}
312
		Tree tree = viewer.getTree();
313
		if (tree == null)
314
			return null;
315
		TreeItem item = null;
316
		TreeItem children[] = tree.getItems();
317
		if (children != null && children.length > 0) {
318
			item = children[0];
319
		}
320
		return item;
321
	}
322
	
323
	private static TreeItem getLastItem(TreeViewer viewer) {
324
		Tree tree = viewer.getTree();
325
		if (tree == null)
326
			return null;
327
		TreeItem item = null;
328
		TreeItem children[] = tree.getItems();
329
		if (children != null && children.length > 0) {
330
			item = children[children.length-1];
312
		}
331
		}
313
		return item;
332
		return item;
314
	}
333
	}
315
	
334
	
316
	private static boolean hasChange(TreeViewer viewer, boolean next) {
335
	private static boolean hasChange(TreeViewer viewer, boolean next) {
317
		TreeItem item = getCurrentItem(viewer);
336
		TreeItem item = getCurrentItem(viewer);
337
		if (item == null) item = getFirstItem(viewer);
318
		if (item != null) {
338
		if (item != null) {
319
			return hasNextPrev(viewer, item, next);
339
			return hasNextPrev(viewer, item, next);
320
		}
340
		}

Return to bug 204157