es.cv.gvcase.fefem.common.widgets.ChooseDialog.java Source code

Java tutorial

Introduction

Here is the source code for es.cv.gvcase.fefem.common.widgets.ChooseDialog.java

Source

/***********************************************************************
 * Copyright (c) 2007 Anyware Technologies
 * 
 * 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:
 *    Anyware Technologies - initial API and implementation
 * 
 * $Id: ChooseDialog.java,v 1.1 2008/05/26 12:25:13 jlescot Exp $
 **********************************************************************/

package es.cv.gvcase.fefem.common.widgets;

import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.IOpenListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.OpenEvent;
import org.eclipse.jface.viewers.StructuredSelection;
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.Shell;
import org.eclipse.ui.dialogs.SelectionDialog;

import es.cv.gvcase.fefem.common.internal.Messages;

/**
 * The dialog used to choose between the different objects
 * 
 * @author <a href="david.sciamma@anyware-tech.com">David Sciamma</a>
 */
public class ChooseDialog extends SelectionDialog {

    /**
     * The default width of a dialog
     */
    private int DEFAULT_DIALOG_WIDTH = 400;

    /**
     * The default height of a dialog
     */
    private int DEFAULT_DIALOG_HEIGHT = 300;

    /**
     * The minimum width of a dialog
     */
    private int MIN_DIALOG_WIDTH = 300;

    /**
     * The minimum height of a dialog
     */
    private int MIN_DIALOG_HEIGHT = 300;

    private SearchableTree tree;

    private ILabelProvider labelProvider;

    private Object[] objects;

    /**
     * Wrapper to adapt the ArrayContentProvider to a TreeViewer
     * 
     * @author <a href="david.sciamma@anyware-tech.com">David Sciamma</a>
     */
    private class TreeArrayContentProvider extends ArrayContentProvider implements ITreeContentProvider {

        /**
         * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
         */
        public Object[] getChildren(Object parentElement) {
            return new Object[0];
        }

        /**
         * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
         */
        public Object getParent(Object element) {
            return null;
        }

        /**
         * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
         */
        public boolean hasChildren(Object element) {
            return false;
        }

    }

    /**
     * Constructor
     * 
     * @param parentShell
     *            the paren shell
     * @param objects
     *            The available objects
     */
    public ChooseDialog(Shell parentShell, Object[] objects) {
        super(parentShell);
        this.objects = objects;

        setTitle(Messages.ChooseDialog_Title);
        setMessage(Messages.ChooseDialog_Message);
        setShellStyle(getShellStyle() | SWT.RESIZE);
    }

    /**
     * @see org.eclipse.ui.dialogs.SelectionDialog#configureShell(org.eclipse.swt.widgets.Shell)
     */
    protected void configureShell(Shell shell) {
        shell.setMinimumSize(MIN_DIALOG_WIDTH, MIN_DIALOG_HEIGHT);

        super.configureShell(shell);
    }

    /**
     * Create the Dialog area
     * 
     * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
     */
    protected Control createDialogArea(Composite parent) {
        // Dialog
        Composite dialogComposite = (Composite) super.createDialogArea(parent);

        GridLayout dialogLayout = new GridLayout();
        dialogLayout.marginWidth = 10;
        dialogLayout.marginHeight = 10;
        GridData dialogLayoutData = new GridData(GridData.FILL_BOTH);
        dialogLayoutData.widthHint = DEFAULT_DIALOG_WIDTH;
        dialogLayoutData.heightHint = DEFAULT_DIALOG_HEIGHT;
        dialogComposite.setLayout(dialogLayout);
        dialogComposite.setLayoutData(dialogLayoutData);

        tree = new SearchableTree(dialogComposite, SWT.SINGLE);
        tree.setLayoutData(new GridData(GridData.FILL_BOTH));
        tree.setContentProvider(new TreeArrayContentProvider());
        tree.setLabelProvider(this.labelProvider);

        tree.setInput(this.objects);
        tree.setInitialSelection(new StructuredSelection(getInitialElementSelections()));

        hookListeners();

        return dialogComposite;
    }

    /**
     * This method had the UI listeners on the SWT widgets
     */
    private void hookListeners() {
        tree.getTreeViewer().addOpenListener(new IOpenListener() {

            /**
             * @see org.eclipse.jface.viewers.IOpenListener#open(org.eclipse.jface.viewers.OpenEvent)
             */
            public void open(OpenEvent event) {
                okPressed();
            }
        });
    }

    /**
     * Set the provider that displays the objects
     * 
     * @param provider
     *            the LabelProvider
     */
    public void setLabelProvider(ILabelProvider provider) {
        this.labelProvider = provider;
    }

    /**
     * @see org.eclipse.jface.dialogs.Dialog#okPressed()
     */
    protected void okPressed() {
        IStructuredSelection selection = (IStructuredSelection) tree.getTreeViewer().getSelection();
        setResult(selection.toList());
        super.okPressed();
    }

}