/*******************************************************************************
* Copyright (c) 2008 Dennis Schenk, Peter Siska.
* 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:
* Dennis Schenk - initial implementation
* Peter Siska - initial implementation
*******************************************************************************/
package ch.unibe.iam.scg.archie.model;
import org.eclipse.jface.viewers.TableViewer;
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;
/**
* <p>Sorts the columns of a TableViewer in a simple manner. It does not consider
* any sorting done before.</p>
*
* $Id: ColumnSorterAdapter.java 747 2009-07-23 09:14:53Z peschehimself $
*
* @author Peter Siska
* @author Dennis Schenk
* @version $Rev: 747 $
*/
public class ColumnSorterAdapter extends SelectionAdapter {
/**
* Table viewer the sorter is acting on.
*/
private TableViewer viewer;
/**
* Index of the column that should be sorted.
*/
private int index;
/**
* Public constructor.
*
* @param viewer
* A tableViewer object.
* @param index
* Index of the current column.
*/
public ColumnSorterAdapter(TableViewer viewer, int index) {
this.viewer = viewer;
this.index = index;
}
/**
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
@Override
public void widgetSelected(final SelectionEvent event) {
// determine new sort column and direction
Table table = this.viewer.getTable();
TableColumn sortColumn = table.getSortColumn();
TableColumn currentColumn = (TableColumn) event.widget;
// compute sort direction
int dir = table.getSortDirection();
if (sortColumn == currentColumn) {
dir = (dir == SWT.UP) ? SWT.DOWN : SWT.UP; // reverse
} else {
table.setSortColumn(currentColumn);
dir = SWT.UP; // up by default
}
// add a sorter if not already present
ColumnSorter sorter = (ColumnSorter) this.viewer.getSorter();
if (sorter == null) {
sorter = new ColumnSorter(this.index);
this.viewer.setSorter(sorter);
}
// set index and sort direction in sorter
sorter.setIndex((sorter.getIndex() != this.index) ? this.index : sorter.getIndex());
sorter.setSortDirection(dir);
// update data displayed in table
table.setSortDirection(dir);
table.clearAll();
this.viewer.refresh(); // sort
}
}