if (monitor.isCanceled()) break; contentProvider.add(item, itemsFilter); contentProvider.rememberResult(itemsFilter); subMonitor.worked(3);
Object[] filteredElements = getSortedItems(); Object item = filteredElements[i]; if (filter != null && filter.getPattern().equals(getElementName(item))) { if (isHistoryElement(item)) { preparedElements.add(0, item); hasHistory = true; if (isHistoryElement(filteredElements[i])) { hasHistory = true; if (hasHistory && !isHistoryElement(item)) { setSeparatorLabel(WorkbenchMessages.FilteredItemsSelectionDialog_separatorLabel); preparedElements.add(itemsListSeparator);
list.setLabelProvider(getItemsListLabelProvider()); list.setInput(new Object[0]); list.setItemCount(contentProvider.getNumberOfElements()); gd = new GridData(GridData.FILL_BOTH); applyDialogFont(list.getTable());
/** * Refreshes the dialog - has to be called in UI thread. */ public void refresh() { if (list != null && !list.getTable().isDisposed()) { List<?> lastRefreshSelection = ((StructuredSelection) list .getSelection()).toList(); list.getTable().deselectAll(); list.setItemCount(contentProvider.getNumberOfElements()); list.refresh(); if (list.getTable().getItemCount() > 0) { // preserve previous selection if (refreshWithLastSelection && lastRefreshSelection != null && lastRefreshSelection.size() > 0) { list.setSelection(new StructuredSelection( lastRefreshSelection)); } else { refreshWithLastSelection = true; list.getTable().setSelection(0); list.getTable().notifyListeners(SWT.Selection, new Event()); } } else { list.setSelection(StructuredSelection.EMPTY); } } scheduleProgressMessageRefresh(); }
/** * Main method responsible for getting the filtered items and checking * for duplicates. It is based on the * {@link FilteredItemsSelectionDialog.ContentProvider#getFilteredItems(Object, IProgressMonitor)}. * * @param checkDuplicates * <code>true</code> if data concerning elements * duplication should be computed - it takes much more time * than standard filtering * * @param monitor * progress monitor */ public void reloadCache(boolean checkDuplicates, IProgressMonitor monitor) { reset = false; currentlyCompletingFilter = filter; // the work is divided into two actions of the same length int totalWork = checkDuplicates ? 200 : 100; SubMonitor subMonitor = SubMonitor.convert(monitor, WorkbenchMessages.FilteredItemsSelectionDialog_cacheRefreshJob, totalWork); // the TableViewer's root (the input) is treated as parent lastFilteredItems = Arrays.asList(getFilteredItems(list.getInput(), subMonitor.split(100))); if (reset || subMonitor.isCanceled()) { return; } if (checkDuplicates) { checkDuplicates(subMonitor.split(100)); } }
/** * Creates a new instance of the class. * * @param shell * shell to parent the dialog on * @param multi * indicates whether dialog allows to select more than one * position in its list of items */ public FilteredItemsSelectionDialog(Shell shell, boolean multi) { super(shell); this.multi = multi; filterHistoryJob = new FilterHistoryJob(); filterJob = new FilterJob(); contentProvider = new ContentProvider(); refreshCacheJob = new RefreshCacheJob(); itemsListSeparator = new ItemsListSeparator( WorkbenchMessages.FilteredItemsSelectionDialog_separatorLabel); selectionMode = NONE; }
/** * Remember result of filtering. * * @param itemsFilter */ public void rememberResult(ItemsFilter itemsFilter) { List<Object> itemsList = Collections.synchronizedList(Arrays .asList(getSortedItems())); // synchronization if (itemsFilter == filter) { lastCompletedFilter = itemsFilter; lastCompletedResult = itemsList; } }
@Override protected IStatus run(IProgressMonitor monitor) { this.itemsFilter = filter; contentProvider.reset(); refreshWithLastSelection = false; contentProvider.addHistoryItems(itemsFilter); if (!(lastCompletedFilter != null && lastCompletedFilter .isSubFilter(this.itemsFilter))) contentProvider.refresh(); filterJob.schedule(); return Status.OK_STATUS; }
/** * Adds item to history. * * @param item * the item to be added */ protected void accessedHistoryItem(Object item) { contentProvider.addHistoryElement(item); }
/** * Adds viewer filter to the dialog items list. * * @param filter * the new filter */ protected void addListFilter(ViewerFilter filter) { contentProvider.addFilter(filter); }
/** * Returns the history of selected elements. * * @return history of selected elements, or <code>null</code> if it is not * set */ protected SelectionHistory getSelectionHistory() { return this.contentProvider.getSelectionHistory(); }