⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 deferredcontentprovider.java

📁 jfa2ce 源码帮助开发人员更好的理解运用
💻 JAVA
字号:
/******************************************************************************* * Copyright (c) 2004, 2005 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: *     IBM Corporation - initial API and implementation *******************************************************************************/package org.eclipse.jface.viewers.deferred;import java.util.Comparator;import org.eclipse.jface.util.Assert;import org.eclipse.jface.viewers.AcceptAllFilter;import org.eclipse.jface.viewers.IFilter;import org.eclipse.jface.viewers.ILazyContentProvider;import org.eclipse.jface.viewers.TableViewer;import org.eclipse.jface.viewers.Viewer;import org.eclipse.swt.widgets.Control;import org.eclipse.swt.widgets.Table;/** * Content provider that performs sorting and filtering in a background thread. * Requires a <code>TableViewer</code> created with the <code>SWT.VIRTUAL</code> * flag and an <code>IConcurrentModel</code> as input. * <p> * The sorter and filter must be set directly on the content provider. * Any sorter or filter on the TableViewer will be ignored.  * </p> *   * <p> * The real implementation is in <code>BackgroundContentProvider</code>. This  * object is a lightweight wrapper that adapts the algorithm to work with  * <code>TableViewer</code>. * </p> *  * @since 3.1 */public class DeferredContentProvider implements ILazyContentProvider {	private int limit = -1;	private BackgroundContentProvider provider;	private Comparator sortOrder;	private IFilter filter = AcceptAllFilter.getInstance();	private AbstractVirtualTable table;		private static final class TableViewerAdapter extends AbstractVirtualTable {				private TableViewer viewer;				public TableViewerAdapter(TableViewer viewer) {			this.viewer = viewer;		}				/* (non-Javadoc)		 * @see org.eclipse.jface.viewers.deferred.AbstractVirtualTable#flushCache(java.lang.Object)		 */		public void clear(int index) {			viewer.clear(index);		}				/* (non-Javadoc)		 * @see org.eclipse.jface.viewers.deferred.AbstractVirtualTable#replace(java.lang.Object, int)		 */		public void replace(Object element, int itemIndex) {			viewer.replace(element, itemIndex);		}				/* (non-Javadoc)		 * @see org.eclipse.jface.viewers.deferred.AbstractVirtualTable#setItemCount(int)		 */		public void setItemCount(int total) {			viewer.setItemCount(total);		}				/* (non-Javadoc)		 * @see org.eclipse.jface.viewers.deferred.AbstractVirtualTable#getItemCount()		 */		public int getItemCount() {			return viewer.getTable().getItemCount();		}				/* (non-Javadoc)		 * @see org.eclipse.jface.viewers.deferred.AbstractVirtualTable#getTopIndex()		 */		public int getTopIndex() {			return Math.max(viewer.getTable().getTopIndex() - 1, 0);		}				/* (non-Javadoc)		 * @see org.eclipse.jface.viewers.deferred.AbstractVirtualTable#getVisibleItemCount()		 */		public int getVisibleItemCount() {			int start = getTopIndex();			int itemCount = getItemCount();			Table table = viewer.getTable();			return Math.min(table.getBounds().height / table.getItemHeight() + 2, 					itemCount - start);		}				/* (non-Javadoc)		 * @see org.eclipse.jface.viewers.deferred.AbstractVirtualTable#getControl()		 */		public Control getControl() {			return viewer.getControl();		}			}	/**	 * Create a DeferredContentProvider with the given sort order.	 * @param sortOrder a comparator that sorts the content.	 */	public DeferredContentProvider(Comparator sortOrder) {		this.sortOrder = sortOrder;	}	/* (non-Javadoc)	 * @see org.eclipse.jface.viewers.IContentProvider#dispose()	 */	public void dispose() {		setProvider(null);	}	/* (non-Javadoc)	 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)	 */	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {		if (newInput == null) {			setProvider(null);			return;		}				Assert.isTrue(newInput instanceof IConcurrentModel);		Assert.isTrue(viewer instanceof TableViewer);		IConcurrentModel model = (IConcurrentModel)newInput;				this.table = new TableViewerAdapter((TableViewer)viewer);				BackgroundContentProvider newProvider = new BackgroundContentProvider(				table,				model, sortOrder); 				setProvider(newProvider);				newProvider.setLimit(limit);		newProvider.setFilter(filter);	}		/**	 * Sets the sort order for this content provider. This sort order takes priority	 * over anything that was supplied to the <code>TableViewer</code>.	 * 	 * @param sortOrder new sort order. The comparator must be able to support being	 * used in a background thread.	 */	public void setSortOrder(Comparator sortOrder) {		Assert.isNotNull(sortOrder);		this.sortOrder = sortOrder;		if (provider != null) {			provider.setSortOrder(sortOrder);		}	}		/**	 * Sets the filter for this content provider. This filter takes priority over	 * anything that was supplied to the <code>TableViewer</code>. The filter	 * must be capable of being used in a background thread.	 * 	 * @param toSet filter to set	 */	public void setFilter(IFilter toSet) {		this.filter = toSet;		if (provider != null) {			provider.setFilter(toSet);		}	}		/**	 * Sets the maximum number of rows in the table. If the model contains more	 * than this number of elements, only the top elements will be shown based on	 * the current sort order. 	 * 	 * @param limit maximum number of rows to show or -1 if unbounded	 */	public void setLimit(int limit) {		this.limit = limit;		if (provider != null) {			provider.setLimit(limit);		}	}		/**	 * Returns the current maximum number of rows or -1 if unbounded	 * 	 * @return the current maximum number of rows or -1 if unbounded	 */	public int getLimit() {		return limit;	}		/* (non-Javadoc)	 * @see org.eclipse.jface.viewers.ILazyContentProvider#updateElement(int)	 */	public void updateElement(int element) {		if (provider != null) {			provider.checkVisibleRange(element);		}	}		private void setProvider(BackgroundContentProvider newProvider) {		if (provider != null) {			provider.dispose();		}				provider = newProvider;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -