blob: 079a44ddb49fc0b63c7e7f62b3b6d05c5fec4d73 [file] [log] [blame]
/*******************************************************************************
* 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);
}
});
}
}
}