Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 175507 | Differences between
and this patch

Collapse All | Expand All

(-)Eclipse UI/org/eclipse/ui/dialogs/FilteredItemsSelectionDialog.java (-2 / +56 lines)
Lines 87-92 Link Here
87
import org.eclipse.swt.widgets.Label;
87
import org.eclipse.swt.widgets.Label;
88
import org.eclipse.swt.widgets.Menu;
88
import org.eclipse.swt.widgets.Menu;
89
import org.eclipse.swt.widgets.Shell;
89
import org.eclipse.swt.widgets.Shell;
90
import org.eclipse.swt.widgets.Table;
90
import org.eclipse.swt.widgets.Text;
91
import org.eclipse.swt.widgets.Text;
91
import org.eclipse.swt.widgets.ToolBar;
92
import org.eclipse.swt.widgets.ToolBar;
92
import org.eclipse.swt.widgets.ToolItem;
93
import org.eclipse.swt.widgets.ToolItem;
Lines 808-815 Link Here
808
	public void refresh() {
809
	public void refresh() {
809
		if (list != null && !list.getTable().isDisposed()) {
810
		if (list != null && !list.getTable().isDisposed()) {
810
811
811
			list.setItemCount(contentProvider.getElements(null).length);
812
			contentProvider.internalRefresh();
812
			list.refresh();
813
813
814
			if (list.getTable().getItemCount() > 0) {
814
			if (list.getTable().getItemCount() > 0) {
815
				list.getTable().setSelection(0);
815
				list.getTable().setSelection(0);
Lines 2369-2374 Link Here
2369
		 * <code>items -> lastSortedItems -> lastFilteredItems</code>
2369
		 * <code>items -> lastSortedItems -> lastFilteredItems</code>
2370
		 */
2370
		 */
2371
		private List lastSortedItems;
2371
		private List lastSortedItems;
2372
		
2373
		/**
2374
		 * Next to result od lastfiltering.
2375
		 * <p> 
2376
		 * Standard object flow:
2377
		 * <code>items -> lastSortedItems -> lastFilteredItems -> nextToLastFilteredItems</code>
2378
		 */
2379
		private List nextToLastFilteredItems;
2372
2380
2373
		/**
2381
		/**
2374
		 * Used for <code>getFilteredItems()</code> method canceling (when the
2382
		 * Used for <code>getFilteredItems()</code> method canceling (when the
Lines 2401-2406 Link Here
2401
					.synchronizedList(new ArrayList(2048));
2409
					.synchronizedList(new ArrayList(2048));
2402
			this.lastSortedItems = Collections.synchronizedList(new ArrayList(
2410
			this.lastSortedItems = Collections.synchronizedList(new ArrayList(
2403
					2048));
2411
					2048));
2412
			this.nextToLastFilteredItems = Collections.synchronizedList(new ArrayList(
2413
					2048));
2404
		}
2414
		}
2405
2415
2406
		/**
2416
		/**
Lines 2488-2493 Link Here
2488
		public void refresh() {
2498
		public void refresh() {
2489
			scheduleRefresh();
2499
			scheduleRefresh();
2490
		}
2500
		}
2501
		
2502
		/**
2503
		 * Refresh filtered items.
2504
		 */	
2505
		private void internalRefresh() {
2506
2507
			int lastFilteredItemsSize = lastFilteredItems.size();
2508
2509
			if (lastFilteredItemsSize != items.size())
2510
				reloadCache(false, null);
2511
2512
			Table table = list.getTable();
2513
			
2514
			if (table.getItemCount() == 0 || lastFilteredItemsSize == 0
2515
					|| lastCompletedFilter == null) {
2516
				list.refresh(true);
2517
			} else {
2518
				for (int index = 0; index < lastFilteredItems.size(); index++) {
2519
					Object element = lastFilteredItems.get(index);
2520
					if (element != null) {
2521
						if (nextToLastFilteredItems.contains(element) && nextToLastFilteredItems.size() >= lastFilteredItems.size()) {
2522
							for (int i = nextToLastFilteredItems.indexOf(element) - 1; i >= index; i--) {
2523
								Object elementToRemove = nextToLastFilteredItems.get(i);
2524
								list.remove(elementToRemove);
2525
								nextToLastFilteredItems.remove(i);
2526
								list.setItemCount(nextToLastFilteredItems.size());
2527
							}
2528
						} else {
2529
							if (index >= table.getItemCount()) {
2530
								list.add(element);
2531
							} else {
2532
								list.replace(element, index);
2533
							}
2534
						}
2535
					}
2536
				}
2537
			}
2538
			
2539
			list.setItemCount(lastFilteredItems.size());
2540
			table.update();
2541
	
2542
			nextToLastFilteredItems.clear();
2543
			nextToLastFilteredItems.addAll(lastFilteredItems);
2544
		}
2491
2545
2492
		/**
2546
		/**
2493
		 * Sets progress message.
2547
		 * Sets progress message.

Return to bug 175507