| /******************************************************************************* |
| * Copyright (c) 2008, 2012 Ericsson AB 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 |
| * |
| * Description: |
| * |
| * This class extends the default viewer sorter to sort |
| * the items in TableViewers and TreeViewers |
| * |
| * Contributors: |
| * Jacques Bouthilier - Created for internal Ericsson R4E |
| * Sebastien Dubois - Updated for Mylyn Review R4E project |
| * |
| ******************************************************************************/ |
| |
| package org.eclipse.mylyn.reviews.r4e.ui.internal.sorters; |
| |
| import org.eclipse.jface.viewers.TableViewer; |
| import org.eclipse.jface.viewers.TreeViewer; |
| import org.eclipse.jface.viewers.Viewer; |
| import org.eclipse.jface.viewers.ViewerSorter; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.SelectionAdapter; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.widgets.Table; |
| import org.eclipse.swt.widgets.TableColumn; |
| import org.eclipse.swt.widgets.Tree; |
| import org.eclipse.swt.widgets.TreeColumn; |
| import org.eclipse.swt.widgets.TreeItem; |
| |
| /** |
| * @author Jacques Bouthillier |
| * @version $Revision: 1.0 $ |
| */ |
| public class FindUsersTableViewerSorter extends ViewerSorter { |
| |
| // ------------------------------------------------------------------------ |
| // Member variables |
| // ------------------------------------------------------------------------ |
| |
| /** |
| * Field fColumnIndex. |
| */ |
| private int fColumnIndex = 0; |
| |
| // ------------------------------------------------------------------------ |
| // Constructors |
| // ------------------------------------------------------------------------ |
| |
| /** |
| * Constructor |
| * |
| * @param aColumnIndex |
| * int |
| */ |
| public FindUsersTableViewerSorter(int aColumnIndex) { |
| super(); |
| fColumnIndex = aColumnIndex; |
| } |
| |
| // ------------------------------------------------------------------------ |
| // Methods |
| // ------------------------------------------------------------------------ |
| |
| /** |
| * Method compare. |
| * |
| * @param aViewer |
| * Viewer |
| * @param aObj1 |
| * Object |
| * @param aObj2 |
| * Object |
| * @return int |
| */ |
| @Override |
| public int compare(Viewer aViewer, Object aObj1, Object aObj2) { |
| if (aViewer instanceof TableViewer) { |
| |
| final TableViewer tv = (TableViewer) aViewer; |
| tv.getTable().setSortColumn(tv.getTable().getColumn(fColumnIndex)); |
| int idx1 = -1, idx2 = -1; |
| final int numItems = tv.getTable().getItemCount(); |
| Object obj = null; |
| for (int i = 0; i < numItems; i++) { |
| obj = tv.getElementAt(i); |
| if (obj.equals(aObj1)) { |
| idx1 = i; |
| } else if (obj.equals(aObj2)) { |
| idx2 = i; |
| } |
| if (idx1 > 0 && idx2 > 0) { |
| break; |
| } |
| } |
| |
| int order = 0; |
| if (idx1 > -1 && idx2 > -1) { |
| final String str1 = tv.getTable().getItems()[idx1].getText(fColumnIndex); |
| final String str2 = tv.getTable().getItems()[idx2].getText(fColumnIndex); |
| order = str1.compareTo(str2); |
| if (tv.getTable().getSortDirection() != SWT.UP) { |
| order *= -1; |
| } |
| } |
| return order; |
| } else if (aViewer instanceof TreeViewer) { |
| final TreeViewer tv = (TreeViewer) aViewer; |
| tv.getTree().setSortColumn(tv.getTree().getColumn(fColumnIndex)); |
| int idx1 = -1, idx2 = -1; |
| |
| final Object[] listObj = tv.getTree().getItems(); |
| Object obj = null; |
| for (int i = 0; i < listObj.length; i++) { |
| if (listObj[i] instanceof TreeItem) { |
| obj = ((TreeItem) listObj[i]).getData(); |
| ((TreeItem) listObj[i]).setExpanded(true); |
| } |
| if (null != obj) { |
| if (obj.equals(aObj1)) { |
| idx1 = i; |
| } else if (obj.equals(aObj2)) { |
| idx2 = i; |
| } |
| if (idx1 > 0 && idx2 > 0) { |
| break; |
| } |
| } |
| } |
| int order = 0; |
| if (idx1 > -1 && idx2 > -1) { |
| final String str1 = tv.getTree().getItems()[idx1].getText(fColumnIndex); |
| final String str2 = tv.getTree().getItems()[idx2].getText(fColumnIndex); |
| order = str1.compareTo(str2); |
| if (tv.getTree().getSortDirection() != SWT.UP) { |
| order *= -1; |
| } |
| } |
| return order; |
| } |
| return 0; |
| } |
| |
| /** |
| * Bind Sorter to tableViewer. |
| * |
| * @param aTableViewer |
| * TableViewer |
| */ |
| public static void bind(final TableViewer aTableViewer) { |
| final int numColumns = aTableViewer.getTable().getColumnCount(); |
| for (int i = 0; i < numColumns; i++) { |
| final int columnNum = i; |
| TableColumn column = aTableViewer.getTable().getColumn(i); |
| column.addSelectionListener(new SelectionAdapter() { |
| @Override |
| public void widgetSelected(final SelectionEvent e) { |
| FindUsersTableViewerSorter sorter = new FindUsersTableViewerSorter(columnNum); |
| Table table = aTableViewer.getTable(); |
| if (table.getSortDirection() == SWT.UP) { |
| table.setSortDirection(SWT.DOWN); |
| } else if (table.getSortDirection() == SWT.DOWN) { |
| table.setSortDirection(SWT.UP); |
| } else { |
| table.setSortDirection(SWT.UP); |
| } |
| aTableViewer.setComparator(sorter); |
| } |
| }); |
| } |
| } |
| |
| /** |
| * Bind Sorter to TreeViewer |
| * |
| * @param aTreeViewer |
| * TreeViewer |
| */ |
| public static void bind(final TreeViewer aTreeViewer) { |
| final int numColumns = aTreeViewer.getTree().getColumnCount(); |
| for (int i = 0; i < numColumns; i++) { |
| final int columnNum = i; |
| TreeColumn column = aTreeViewer.getTree().getColumn(i); |
| column.addSelectionListener(new SelectionAdapter() { |
| @Override |
| public void widgetSelected(final SelectionEvent e) { |
| FindUsersTableViewerSorter sorter = new FindUsersTableViewerSorter(columnNum); |
| Tree table = aTreeViewer.getTree(); |
| if (table.getSortDirection() == SWT.UP) { |
| table.setSortDirection(SWT.DOWN); |
| } else if (table.getSortDirection() == SWT.DOWN) { |
| table.setSortDirection(SWT.UP); |
| } else { |
| table.setSortDirection(SWT.UP); |
| } |
| aTreeViewer.setComparator(sorter); |
| } |
| }); |
| } |
| } |
| |
| /** |
| * table tree bind to Sorter with a specific column. |
| * |
| * @param aTreeViewer |
| * TreeViewer |
| * @param aColumnNum |
| * int |
| */ |
| public static void bind(final TreeViewer aTreeViewer, final int aColumnNum) { |
| final int maxColumn = aTreeViewer.getTree().getColumnCount(); |
| if (aColumnNum < maxColumn) { |
| final TreeColumn column = aTreeViewer.getTree().getColumn(aColumnNum); |
| column.addSelectionListener(new SelectionAdapter() { |
| @Override |
| public void widgetSelected(final SelectionEvent e) { |
| final FindUsersTableViewerSorter sorter = new FindUsersTableViewerSorter(aColumnNum); |
| final Tree table = aTreeViewer.getTree(); |
| if (table.getSortDirection() == SWT.UP) { |
| table.setSortDirection(SWT.DOWN); |
| } else if (table.getSortDirection() == SWT.DOWN) { |
| table.setSortDirection(SWT.UP); |
| } else { |
| table.setSortDirection(SWT.UP); |
| } |
| aTreeViewer.setComparator(sorter); |
| } |
| }); |
| } |
| } |
| |
| } |