org.projectusus.ui.viewer.UsusTreeViewer.java Source code

Java tutorial

Introduction

Here is the source code for org.projectusus.ui.viewer.UsusTreeViewer.java

Source

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