org.eclipse.papyrus.diagram.common.dialogs.AbstractCheckedTreeColumnViewerSelectionDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.papyrus.diagram.common.dialogs.AbstractCheckedTreeColumnViewerSelectionDialog.java

Source

/*****************************************************************************
 * Copyright (c) 2011 CEA LIST.
 *
 *    
 * 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:
 *  Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
 *
 *****************************************************************************/
package org.eclipse.papyrus.diagram.common.dialogs;

import java.util.Arrays;
import java.util.List;

import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.viewers.CellLabelProvider;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;

/**
 * This abstract class allows to create columns with a tree viewer.
 * A double Click on an element of the tree allows to expand/collapse the node!
 * 
 * 
 */
public abstract class AbstractCheckedTreeColumnViewerSelectionDialog extends CustomCheckedTreeSelectionDialog {

    /** the number of columns */
    private int nbColumns = 0;

    /** the title of the columns */
    private String[] columnTitles = null;

    /** the width of the columns */
    private int[] columnWidths = null;

    /** the label provider for the columns */
    private CellLabelProvider[] columnCellLabelProvider;

    /**
     * 
     * Constructor.
     * 
     * @param parent
     *        the parent shell
     * @param labelProvider
     *        the label provider for the tree
     * @param contentProvider
     *        the content provider for the tree
     * @param style
     *        the style for the viewer
     * @param nbColumns
     *        the nomber of columns
     */
    public AbstractCheckedTreeColumnViewerSelectionDialog(Shell parent, ILabelProvider labelProvider,
            ITreeContentProvider contentProvider, int style, int nbColumns) {
        super(parent, labelProvider, contentProvider, style);
        this.nbColumns = nbColumns;
        setSize(100, 20);

    }

    /**
     * Setter for {@link #columnWidths}
     * 
     * @param widths
     *        The array owning the widths of the columns
     */
    public void setColumnWidths(int[] widths) {
        Assert.isTrue(widths.length == nbColumns);
        this.columnWidths = widths;
    }

    /**
     * Setter for {@link #columnTitles}
     * 
     * @param titles
     *        the titles of the columns
     */
    public void setColumnTitles(String[] titles) {
        Assert.isTrue(titles.length == nbColumns);
        this.columnTitles = titles;
    }

    /**
     * Setter for {@link #columnCellLabelProvider}
     * 
     * @param providers
     *        the labels providers for the columns
     */
    public void setColumnCellLabelProvider(CellLabelProvider[] providers) {
        Assert.isTrue(providers.length == nbColumns);
        this.columnCellLabelProvider = providers;
    }

    /**
     * 
     * @see org.eclipse.papyrus.diagram.common.dialogs.CustomCheckedTreeSelectionDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
     * 
     * @param parent
     * @return
     */
    @Override
    protected Control createDialogArea(Composite parent) {
        Control ctrl = super.createDialogArea(parent);
        for (int i = 0; i < nbColumns; i++) {
            TreeViewerColumn column = new TreeViewerColumn(getTreeViewer(), SWT.NONE);
            column.getColumn().setText(columnTitles[i]);
            column.getColumn().setWidth(columnWidths[i]);
            column.setLabelProvider(columnCellLabelProvider[i]);
            EditingSupport support = getEditingSupport(i);
            if (support != null) {
                column.setEditingSupport(support);
            }
        }

        getTreeViewer().getTree().setLinesVisible(true);
        getTreeViewer().getTree().setHeaderVisible(true);
        getTreeViewer().getTree().addMouseListener(new MouseListener() {

            /**
             * 
             * @see org.eclipse.swt.events.MouseListener#mouseUp(org.eclipse.swt.events.MouseEvent)
             * 
             * @param e
             */
            public void mouseUp(MouseEvent e) {
                //nothing to do
            }

            /**
             * 
             * @see org.eclipse.swt.events.MouseListener#mouseDown(org.eclipse.swt.events.MouseEvent)
             * 
             * @param e
             */
            public void mouseDown(MouseEvent e) {
                //nothing to do

            }

            /**
             * 
             * @see org.eclipse.swt.events.MouseListener#mouseDoubleClick(org.eclipse.swt.events.MouseEvent)
             * 
             * @param e
             */
            public void mouseDoubleClick(MouseEvent e) {
                //we expand the selected element
                Tree source = (Tree) e.getSource();
                TreeItem[] item = source.getSelection();
                List<?> expandedElements = Arrays.asList(getTreeViewer().getExpandedElements());
                if (getTreeViewer().isExpandable(item[0].getData())) {
                    boolean isExpanded = expandedElements.contains(item[0].getData());
                    item[0].setExpanded(!isExpanded);
                }
            }
        });
        return ctrl;
    }

    /**
     * Returns the {@link EditingSupport} for the column.
     * 
     * @param columnIndex
     * @return
     *         the {@link EditingSupport} for the column or <code>null</code>
     */
    abstract protected EditingSupport getEditingSupport(int columnIndex);
}