MailDialog.java Source code

Java tutorial

Introduction

Here is the source code for MailDialog.java

Source

import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Shell;

public class MailDialog extends TitleAreaDialog {
    // IDs for MailDialog buttons
    // We use large integers because we don't want
    // to conflict with system constants
    public static final int OPEN = 9999;

    public static final int DELETE = 9998;

    // List widget
    List list;

    // Initial content of the list
    String[] items;

    // Selected items
    String[] itemsToOpen;

    /**
     * Constructor for MailDialog.
     * 
     * @param shell -
     *            Containing shell
     * @param items -
     *            Mail messages passed to the dialog
     */
    public MailDialog(Shell shell, String[] items) {
        super(shell);
        this.items = items;
    }

    /**
     * @see org.eclipse.jface.window.Window#create() We complete the dialog with
     *      a title and a message
     */
    public void create() {
        super.create();
        setTitle("Mail");
        setMessage("You have mail! \n It could be vital for this evening...");
    }

    /**
     * @see org.eclipse.jface.dialogs.Dialog#
     *      createDialogArea(org.eclipse.swt.widgets.Composite) Here we fill the
     *      center area of the dialog
     */
    protected Control createDialogArea(Composite parent) {
        // Create new composite as container
        final Composite area = new Composite(parent, SWT.NULL);
        // We use a grid layout and set the size of the margins
        final GridLayout gridLayout = new GridLayout();
        gridLayout.marginWidth = 15;
        gridLayout.marginHeight = 10;
        area.setLayout(gridLayout);
        // Now we create the list widget
        list = new List(area, SWT.BORDER | SWT.MULTI);
        // We define a minimum width for the list
        final GridData gridData = new GridData();
        gridData.widthHint = 200;
        list.setLayoutData(gridData);
        // We add a SelectionListener
        list.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                // When the selection changes, we re-validate the list
                validate();
            }
        });
        // We add the initial mail messages to the list
        for (int i = 0; i < items.length; i++) {
            list.add(items[i]);
        }
        return area;
    }

    private void validate() {
        // We select the number of selected list entries
        boolean selected = (list.getSelectionCount() > 0);
        // We enable/disable the Open and Delete buttons
        getButton(OPEN).setEnabled(selected);
        getButton(DELETE).setEnabled(selected);
        if (!selected)
            // If nothing was selected, we set an error message
            setErrorMessage("Select at least one entry!");
        else
            // Otherwise we set the error message to null
            // to show the intial content of the message area
            setErrorMessage(null);
    }

    /**
     * @see org.eclipse.jface.dialogs.Dialog#
     *      createButtonsForButtonBar(org.eclipse.swt.widgets.Composite) We
     *      replace the OK and Cancel buttons by our own creations We use the
     *      method createButton() (from Dialog), to create the new buttons
     */
    protected void createButtonsForButtonBar(Composite parent) {
        // Create Open button
        Button openButton = createButton(parent, OPEN, "Open", true);
        // Initially deactivate it
        openButton.setEnabled(false);
        // Add a SelectionListener
        openButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                // Retrieve selected entries from list
                itemsToOpen = list.getSelection();
                // Set return code
                setReturnCode(OPEN);
                // Close dialog
                close();
            }
        });
        // Create Delete button
        Button deleteButton = createButton(parent, DELETE, "Delete", false);
        deleteButton.setEnabled(false);
        // Add a SelectionListener
        deleteButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                // Get the indices of the selected entries
                int selectedItems[] = list.getSelectionIndices();
                // Remove all these entries
                list.remove(selectedItems);
                // Now re-validate the list because it has changed
                validate();
            }
        });
        // Create Cancel button
        Button cancelButton = createButton(parent, CANCEL, "Cancel", false);
        // Add a SelectionListener
        cancelButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                setReturnCode(CANCEL);
                close();
            }
        });
    }

    /**
     * Method getItemsToOpen.
     * 
     * @return String[] - the selected items
     */
    public String[] getItemsToOpen() {
        return itemsToOpen;
    }
}