blob: b3222fd54bddcecf160b6f094b1879736f26edaa [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013 Ericsson
*
* 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 implements the implementation of the R4E-Gerrit UI view column sorter.
*
* Contributors:
* Jacques Bouthillier - Initial Implementation of the view sorter
******************************************************************************/
package org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.model;
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.TreeItem;
/**
* @author Jacques Bouthillier
* @version $Revision: 1.0 $
*
*/
public class ReviewTableSorter extends ViewerSorter {
private int columnIndex = 0;
private static UIReviewTable fReviewTable = null;
public ReviewTableSorter(int columnIndex) {
super();
this.columnIndex = columnIndex;
}
/*
* public static void reverseOrder() { order *= -1; }
*/
public int compare(Viewer aViewer, Object aE1, Object aE2) {
if (aViewer instanceof TableViewer) {
TableViewer tv = (TableViewer) aViewer;
tv.getTable().setSortColumn(tv.getTable().getColumn(columnIndex));
int idx1 = -1, idx2 = -1;
for (int i = 0; i < tv.getTable().getItemCount(); i++) {
Object obj = tv.getElementAt(i);
if (obj.equals(aE1)) {
idx1 = i;
} else if (obj.equals(aE2)) {
idx2 = i;
}
if (idx1 > 0 && idx2 > 0) {
break;
}
}
int order = 0;
if (idx1 > -1 && idx2 > -1) {
String str1 = tv.getTable().getItems()[idx1]
.getText(this.columnIndex);
String str2 = tv.getTable().getItems()[idx2]
.getText(this.columnIndex);
order = str1.compareTo(str2);
if (tv.getTable().getSortDirection() != SWT.UP) {
order *= -1;
}
}
return order;
} else if (aViewer instanceof TreeViewer) {
TreeViewer tv = (TreeViewer) aViewer;
tv.getTree().setSortColumn(tv.getTree().getColumn(columnIndex));
int idx1 = -1, idx2 = -1;
Object[] listObj = tv.getTree().getItems();
for (int i = 0; i < listObj.length; i++) {
Object obj = null;
if (listObj[i] instanceof TreeItem) {
obj = ((TreeItem) listObj[i]).getData();
((TreeItem) listObj[i]).setExpanded(true);
} else {
}
if (obj != null) {
if (obj.equals(aE1)) {
idx1 = i;
} else if (obj.equals(aE2)) {
idx2 = i;
}
if (idx1 > 0 && idx2 > 0) {
break;
}
}
}
int order = 0;
if (idx1 > -1 && idx2 > -1) {
String str1 = tv.getTree().getItems()[idx1]
.getText(this.columnIndex);
String str2 = tv.getTree().getItems()[idx2]
.getText(this.columnIndex);
order = str1.compareTo(str2);
if (tv.getTree().getSortDirection() != SWT.UP) {
order *= -1;
}
}
return order;
}
return 0;
}
/**
* table is bind to Sorter.
*
* @param aTableViewer
*/
public static void bind(final TableViewer aTableViewer) {
for (int i = 0; i < aTableViewer.getTable().getColumnCount(); i++) {
final int columnNum = i;
TableColumn column = aTableViewer.getTable().getColumn(i);
column.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
ReviewTableSorter sorter = new ReviewTableSorter(
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);
}
});
}
}
}