org.absmodels.abs.plugin.wizards.composites.CompositeGroup.java Source code

Java tutorial

Introduction

Here is the source code for org.absmodels.abs.plugin.wizards.composites.CompositeGroup.java

Source

/** 
 * Copyright (c) 2009-2011, The HATS Consortium. All rights reserved. 
 * This file is licensed under the terms of the Modified BSD License.
 */
package org.absmodels.abs.plugin.wizards.composites;

import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.ui.part.DrillDownComposite;

public abstract class CompositeGroup extends Composite {
    /**
     *  The listener to notify of events
     */
    protected Listener listener;

    /**
     * The internal tree viewer component
     */
    protected TreeViewer treeViewer;

    /**
     *  the message to display at the top of this dialog
     */
    protected String DISPLAY_MSG = "Select a file:";

    /**
     * Width sizing constant
     */
    protected static final int SIZING_SELECTION_PANE_WIDTH = 320;

    /**
     * Height sizing constant
     */
    protected static final int SIZING_SELECTION_PANE_HEIGHT = 300;

    /**
     * Creates a new instance of the widget.
     * 
     * @param parent
     *            The parent widget of the group.
     * @param listener
     *            A listener to forward events to. Can be null if no listener is
     *            required.
     */
    public CompositeGroup(Composite parent, Listener listener) {
        this(parent, listener, null);
    }

    /**
     * Creates a new instance of the widget.
     * 
     * @param parent
     *            The parent widget of the group.
     * @param listener
     *            A listener to forward events to. Can be null if no listener is
     *            required.
     * @param message
     *            The text to present to the user.
     */
    public CompositeGroup(Composite parent, Listener listener, String message) {
        this(parent, listener, message, SIZING_SELECTION_PANE_HEIGHT, SIZING_SELECTION_PANE_WIDTH);
    }

    /**
     * Creates a new instance of the widget.
     * 
     * @param parent
     *            The parent widget of the group.
     * @param listener
     *            A listener to forward events to. Can be null if no listener is
     *            required.
     * @param message
     *            The text to present to the user.
     * @param heightHint
     *            height hint for the drill down composite
     * @param widthHint
     *            width hint for the drill down composite
     */
    public CompositeGroup(Composite parent, Listener listener, String message, int heightHint, int widthHint) {
        super(parent, SWT.NONE);
        this.listener = listener;
        if (message != null) {
            createContents(message, heightHint, widthHint);
        } else {
            createContents(DISPLAY_MSG, heightHint, widthHint);
        }
    }

    /**
     * The resource selection has changed in the tree view. Update the
     * container name field value and notify all listeners.
     * 
     * @param o
     *            The container that changed
     */
    protected abstract void resourceSelectionChanged(Object o);

    protected void fireSelectionChangedEvent() {
        // fire an event so the parent can update its controls
        if (listener != null) {
            Event changeEvent = new Event();
            changeEvent.type = SWT.Selection;
            changeEvent.widget = this;
            listener.handleEvent(changeEvent);
        }
    }

    /**
     * Creates the contents of the composite.
     * 
     * @param message
     */
    protected final void createContents(String message) {
        createContents(message, SIZING_SELECTION_PANE_HEIGHT, SIZING_SELECTION_PANE_WIDTH);
    }

    /**
     * Creates the contents of the composite.
     * 
     * @param message
     * @param heightHint
     * @param widthHint
     */
    protected abstract void createContents(String message, int heightHint, int widthHint);

    protected DrillDownComposite createDrillDown(int heightHint) {
        DrillDownComposite drillDown = new DrillDownComposite(this, SWT.BORDER);
        GridData spec = new GridData(SWT.FILL, SWT.FILL, true, true);
        spec.widthHint = SIZING_SELECTION_PANE_WIDTH;
        spec.heightHint = heightHint;
        drillDown.setLayoutData(spec);
        return drillDown;
    }

    protected void setUpTreeViewer() {
        treeViewer.setComparator(new ViewerComparator());
        treeViewer.setUseHashlookup(true);
        setUpTreeListeners();

        // This has to be done after the viewer has been laid out
        treeViewer.setInput(ResourcesPlugin.getWorkspace());
    }

    /**
     * 
     */
    private void setUpTreeListeners() {
        treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
            @Override
            public void selectionChanged(SelectionChangedEvent event) {
                IStructuredSelection selection = (IStructuredSelection) event.getSelection();
                Object firstElement = selection.getFirstElement();
                resourceSelectionChanged(firstElement);

            }
        });
        treeViewer.addDoubleClickListener(new IDoubleClickListener() {
            @Override
            public void doubleClick(DoubleClickEvent event) {
                ISelection selection = event.getSelection();
                if (selection instanceof IStructuredSelection) {
                    Object item = ((IStructuredSelection) selection).getFirstElement();
                    if (item == null) {
                        return;
                    }
                    if (treeViewer.getExpandedState(item)) {
                        treeViewer.collapseToLevel(item, 1);
                    } else {
                        treeViewer.expandToLevel(item, 1);
                    }
                }
            }
        });
    }

    /**
     * Returns a new drill down viewer for this dialog.
     * 
     * @param heightHint
     *            height hint for the drill down composite
     */
    protected abstract void createTreeViewer(int heightHint);
}