Java tutorial
// 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); } }