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

📄 contactcomparator2.java

📁 eclipse开发笔记
💻 JAVA
字号:
package rcpdev.contact.ui.views.common;

import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;

import rcpdev.common.core.utils.StringUtils;

public class ContactComparator2 extends ViewerComparator implements Listener {

	private static final int SORT_ASC = 0;

	private static final int SORT_DESC = 1;

	private static final int SORT_NONE = 2;

	private static final String SORT_KEY = "cc2SortKey";

	private TableViewer viewer;

	private TableColumn sortColumn;

	public ContactComparator2(TableViewer viewer) {
		this.viewer = viewer;
		Table table = viewer.getTable();
		int columnCount = table.getColumnCount();
		assert columnCount != 0;

		for (int i = 0; i < columnCount; i++) {
			table.getColumn(i).addListener(SWT.Selection, this);
			table.getColumn(i).setData(SORT_KEY, SORT_NONE);
		}
	}

	public int compare(Viewer viewer, Object e1, Object e2) {
		assert viewer instanceof TableViewer;
		
		Table table = ((TableViewer) viewer).getTable();
		ITableLabelProvider labelProvider = ((ITableLabelProvider) ((TableViewer) viewer)
				.getLabelProvider());
		if (sortColumn == null
				|| SORT_NONE == (Integer) sortColumn.getData(SORT_KEY))
			return 0;
		int columnIndex = table.indexOf(sortColumn);
		String a = labelProvider.getColumnText(e1, columnIndex);
		String b = labelProvider.getColumnText(e2, columnIndex);
		int result = StringUtils.compare(a, b);
		int dir = (Integer) sortColumn.getData(SORT_KEY);
		return dir == SORT_ASC ? result : -result;
	}

	public void handleEvent(Event event) {
		assert event.widget instanceof TableColumn;
		TableColumn column = (TableColumn) event.widget;
		int newStatus = ((Integer) column.getData(SORT_KEY) + 1) % 3;
		column.setData(SORT_KEY, newStatus);
		if (!column.equals(sortColumn)) {
			if (sortColumn != null)
				sortColumn.setData(SORT_KEY, SORT_NONE);
			sortColumn = column;
			viewer.getTable().setSortColumn(sortColumn);
		}
		int dir = 0;
		switch (newStatus) {
		case SORT_ASC:
			dir = SWT.UP;
			break;
		case SORT_DESC:
			dir = SWT.DOWN;
			break;
		case SORT_NONE:
			dir = SWT.NONE;
			break;
		}
		viewer.getTable().setSortDirection(dir);
		viewer.refresh();
	}

	public void dispose() {
		Table table = viewer.getTable();
		for (int i = table.getColumnCount() - 1; i >= 0; i--) {
			table.getColumn(i).removeListener(SWT.Selection, this);
		}
		table.setSortColumn(null);
	}
}

⌨️ 快捷键说明

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