// Copyright (c) 2009-2010 by the projectusus.org contributors
// This software is released under the terms and conditions
// of the Eclipse Public License (EPL) 1.0.
// See http://www.eclipse.org/legal/epl-v10.html for details.
package org.projectusus.ui.viewer;
import static org.eclipse.swt.layout.GridData.FILL_BOTH;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
public class UsusTreeViewer<T> extends TreeViewer {
private final static int STYLE = SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI | SWT.FULL_SELECTION;
public UsusTreeViewer( Composite parent, IColumnDesc<T>[] columns ) {
super( new Tree( parent, STYLE ) );
TableLayout layout = createTree();
createColumns( layout, columns );
}
private TableLayout createTree() {
TableLayout layout = new TableLayout();
Tree tree = getTree();
tree.setLayout( layout );
tree.setLayoutData( new GridData( FILL_BOTH ) );
tree.setLinesVisible( true );
tree.setHeaderVisible( true );
tree.layout( true );
return layout;
}
private void createColumns( TableLayout layout, IColumnDesc<T>[] columns ) {
for( int i = 0; i < columns.length; i++ ) {
IColumnDesc<T> desc = columns[i];
UsusTreeColumn ususTreeColumn = new AnnotationReader( desc ).compute();
TreeViewerColumn column = createColumn( ususTreeColumn.align().toSwtStyle() );
column.getColumn().setText( ususTreeColumn.header() );
if( ususTreeColumn.sortable() ) {
new ColumnByLabelSorter( this, column.getColumn(), i, ususTreeColumn.numeric() );
}
layout.addColumnData( new ColumnWeightData( ususTreeColumn.weight() ) );
}
}
private TreeViewerColumn createColumn( int style ) {
TreeViewerColumn column = new TreeViewerColumn( this, style );
column.getColumn().setResizable( true );
column.getColumn().setMoveable( true );
return column;
}
public void resetColumnSorting() {
getTree().setSortColumn( null );
getTree().setSortDirection( SWT.NONE );
}
}