eu.geclipse.ui.views.TreeControlViewPart.java Source code

Java tutorial

Introduction

Here is the source code for eu.geclipse.ui.views.TreeControlViewPart.java

Source

/*****************************************************************************
 * Copyright (c) 2006, 2007 g-Eclipse Consortium 
 * 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
 *
 * Initial development of the original code was made for the
 * g-Eclipse project founded by European Union
 * project number: FP6-IST-034327  http://www.geclipse.eu/
 *
 * Contributors:
 *    Mathias Stuempert - initial API and implementation
 *****************************************************************************/

package eu.geclipse.ui.views;

import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;

import eu.geclipse.core.model.IGridContainer;
import eu.geclipse.core.model.IGridElement;
import eu.geclipse.ui.comparators.TreeColumnComparator;
import eu.geclipse.ui.listeners.TreeColumnListener;

public abstract class TreeControlViewPart extends GridModelViewPart {

    @Override
    public void refreshViewer(final IGridElement element) {
        if ((element != null) && (element instanceof IGridContainer)) {
            final IGridContainer container = (IGridContainer) element;
            if (container.isLazy() && container.isDirty()) {
                Control control = this.viewer.getControl();
                if (!control.isDisposed()) {
                    Display display = control.getDisplay();
                    display.syncExec(new Runnable() {
                        public void run() {
                            TreeViewer tViewer = (TreeViewer) getViewer();
                            tViewer.setChildCount(container, container.getChildCount());
                        }
                    });
                }
            }
        }
        super.refreshViewer(element);
    }

    /* (non-Javadoc)
     * @see eu.geclipse.ui.views.GridModelViewPart#createViewer(org.eclipse.swt.widgets.Composite)
     */
    @Override
    protected StructuredViewer createViewer(final Composite parent) {
        TreeViewer tViewer = new TreeViewer(parent, SWT.VIRTUAL | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
        Tree tree = tViewer.getTree();
        boolean hasColumns = createTreeColumns(tree);
        if (hasColumns) {
            tree.setHeaderVisible(true);

            // Add listener for column sorting
            TreeColumnListener columnListener = new TreeColumnListener(tViewer);
            for (TreeColumn column : tree.getColumns()) {
                column.addSelectionListener(columnListener);
            }

            // Initially sort by the first column, ascending
            TreeColumn firstColumn = tree.getColumn(0);
            tree.setSortColumn(firstColumn);
            tree.setSortDirection(SWT.UP);
            // Set also the first column as fallback sorting column
            tViewer.setComparator(new TreeColumnComparator(firstColumn));
        }

        return tViewer;
    }

    protected boolean createTreeColumns(@SuppressWarnings("unused") final Tree tree) {
        return false;
    }

}