org.eclipse.emf.eef.runtime.ui.widgets.EEFSelectionDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.emf.eef.runtime.ui.widgets.EEFSelectionDialog.java

Source

/*******************************************************************************
 * Copyright (c) 2012 Obeo.
 * 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:
 *     Obeo - initial API and implementation
 *******************************************************************************/
package org.eclipse.emf.eef.runtime.ui.widgets;

import java.util.Collection;

import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
import org.eclipse.emf.eef.runtime.EEFRuntimePlugin;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;

import com.google.common.collect.Lists;

/**
 * @author <a href="mailto:goulwen.lefur@obeo.fr">Goulwen Le Fur</a>
 *
 */
public class EEFSelectionDialog extends Dialog {

    private String title;
    private TreeViewer selectionViewer;
    private boolean multi;

    private AdapterFactory adapterFactory;
    private IContentProvider contentProvider;
    private IBaseLabelProvider labelProvider;
    private Object input;
    private Object selection;
    private Collection<ViewerFilter> filters;

    /**
     * @param parent
     */
    public EEFSelectionDialog(Shell parent, boolean multi) {
        super(parent);
        this.multi = multi;
        this.filters = Lists.newArrayList();
    }

    /**
     * {@inheritDoc}
     * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
     */
    @Override
    protected void configureShell(Shell newShell) {
        super.configureShell(newShell);
        if (title != null) {
            newShell.setText(title);
        }
        //newShell.setSize(UIConstants.EEF_SELECTION_DIALOG_WIDTH, UIConstants.EEF_SELECTION_DIALOG_HEIGHT);
        newShell.setSize(200, 200);
    }

    /**
     * @return the title
     */
    public String getTitle() {
        return title;
    }

    /**
     * @param title the title to set
     */
    public void setTitle(String title) {
        this.title = title;
    }

    /**
     * @param input the input to set
     */
    public void setInput(Object input) {
        this.input = input;
    }

    /**
     * @return the input
     */
    public Object getInput() {
        return input;
    }

    /**
     * {@inheritDoc}
     * @see org.eclipse.jface.dialogs.Dialog#isResizable()
     */
    protected boolean isResizable() {
        return true;
    }

    /**
     * {@inheritDoc}
     * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
     */
    protected Control createDialogArea(Composite parent) {
        Composite control = new Composite(parent, SWT.NONE);
        control.setLayoutData(new GridData(GridData.FILL_BOTH));
        control.setLayout(new GridLayout());
        Label message = new Label(control, SWT.NONE);
        message.setText("Select the element(s) to process:");
        int style = SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER;
        if (multi) {
            style |= SWT.MULTI;
        }
        selectionViewer = new TreeViewer(control, style);
        selectionViewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));

        for (ViewerFilter filter : filters) {
            selectionViewer.addFilter(filter);
        }

        selectionViewer.setContentProvider(getContentProvider());
        selectionViewer.setLabelProvider(getLabelProvider());
        selectionViewer.setInput(input);
        selectionViewer.addSelectionChangedListener(new ISelectionChangedListener() {

            public void selectionChanged(SelectionChangedEvent event) {
                StructuredSelection sSel = (StructuredSelection) selectionViewer.getSelection();
                if (sSel.size() == 0) {
                    EEFSelectionDialog.this.selection = null;
                } else if (sSel.size() == 1) {
                    EEFSelectionDialog.this.selection = sSel.getFirstElement();
                } else {
                    EEFSelectionDialog.this.selection = sSel.toList();
                }
            }
        });

        return control;
    }

    /**
     * @param adapterFactory the adapterFactory to set
     */
    public void setAdapterFactory(AdapterFactory adapterFactory) {
        this.adapterFactory = adapterFactory;
    }

    /**
     * @return the contentProvider
     */
    public IContentProvider getContentProvider() {
        if (contentProvider == null) {
            if (adapterFactory == null) {
                //adapterFactory = EEFRuntimeUI.getPlugin().getRegistryAdapterFactory();
                adapterFactory = EEFRuntimePlugin.getDefault().getAdapterFactory();
            }
            contentProvider = new AdapterFactoryContentProvider(adapterFactory);
        }
        return contentProvider;
    }

    /**
     * @param contentProvider the contentProvider to set
     */
    public void setContentProvider(IContentProvider contentProvider) {
        this.contentProvider = contentProvider;
    }

    /**
     * @return the labelProvider
     */
    public IBaseLabelProvider getLabelProvider() {
        if (labelProvider == null) {
            if (adapterFactory == null) {
                //            adapterFactory = EEFRuntimeUI.getPlugin().getRegistryAdapterFactory();
                adapterFactory = EEFRuntimePlugin.getDefault().getAdapterFactory();
            }
            labelProvider = new AdapterFactoryLabelProvider(adapterFactory);
        }
        return labelProvider;
    }

    /**
     * @param labelProvider the labelProvider to set
     */
    public void setLabelProvider(IBaseLabelProvider labelProvider) {
        this.labelProvider = labelProvider;
    }

    /**
     * @return the selection
     */
    public Object getSelection() {
        return selection;
    }

    /**
     * @param choiceOfValuesFilter
     */
    public void addFilter(ViewerFilter filter) {
        this.filters.add(filter);
    }

}