org.eclipse.swt.examples.addressbook.DataEntryDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.swt.examples.addressbook.DataEntryDialog.java

Source

/*******************************************************************************
 * Copyright (c) 2000, 2016 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.swt.examples.addressbook;

import static org.eclipse.swt.events.SelectionListener.widgetSelectedAdapter;

/* Imports */
import java.util.ResourceBundle;

import org.eclipse.swt.SWT;
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.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

/**
 * DataEntryDialog class uses <code>org.eclipse.swt</code>
 * libraries to implement a dialog that accepts basic personal information that
 * is added to a <code>Table</code> widget or edits a <code>TableItem</code> entry
 * to represent the entered data.
 */
public class DataEntryDialog {

    private static ResourceBundle resAddressBook = ResourceBundle.getBundle("examples_addressbook");

    Shell shell;
    String[] values;
    String[] labels;

    public DataEntryDialog(Shell parent) {
        shell = new Shell(parent, SWT.DIALOG_TRIM | SWT.PRIMARY_MODAL);
        shell.setLayout(new GridLayout());
    }

    private void addTextListener(final Text text) {
        text.addModifyListener(e -> {
            Integer index = (Integer) (text.getData("index"));
            values[index.intValue()] = text.getText();
        });
    }

    private void createControlButtons() {
        Composite composite = new Composite(shell, SWT.NONE);
        composite.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_CENTER));
        GridLayout layout = new GridLayout();
        layout.numColumns = 2;
        composite.setLayout(layout);

        Button okButton = new Button(composite, SWT.PUSH);
        okButton.setText(resAddressBook.getString("OK"));
        okButton.addSelectionListener(widgetSelectedAdapter(e -> shell.close()));

        Button cancelButton = new Button(composite, SWT.PUSH);
        cancelButton.setText(resAddressBook.getString("Cancel"));
        cancelButton.addSelectionListener(widgetSelectedAdapter(e -> {
            values = null;
            shell.close();
        }));

        shell.setDefaultButton(okButton);
    }

    private void createTextWidgets() {
        if (labels == null)
            return;

        Composite composite = new Composite(shell, SWT.NONE);
        composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        GridLayout layout = new GridLayout();
        layout.numColumns = 2;
        composite.setLayout(layout);

        if (values == null)
            values = new String[labels.length];

        for (int i = 0; i < labels.length; i++) {
            Label label = new Label(composite, SWT.RIGHT);
            label.setText(labels[i]);
            Text text = new Text(composite, SWT.BORDER);
            GridData gridData = new GridData();
            gridData.widthHint = 400;
            text.setLayoutData(gridData);
            if (values[i] != null) {
                text.setText(values[i]);
            }
            text.setData("index", Integer.valueOf(i));
            addTextListener(text);
        }
    }

    public String[] getLabels() {
        return labels;
    }

    public String getTitle() {
        return shell.getText();
    }

    /**
     * Returns the contents of the <code>Text</code> widgets in the dialog in a
     * <code>String</code> array.
     *
     * @return   String[]
     *         The contents of the text widgets of the dialog.
     *         May return null if all text widgets are empty.
     */
    public String[] getValues() {
        return values;
    }

    /**
     * Opens the dialog in the given state.  Sets <code>Text</code> widget contents
     * and dialog behaviour accordingly.
     *
     * @param    dialogState   int
     *               The state the dialog should be opened in.
     */
    public String[] open() {
        createTextWidgets();
        createControlButtons();
        shell.pack();
        shell.open();
        Display display = shell.getDisplay();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }

        return getValues();
    }

    public void setLabels(String[] labels) {
        this.labels = labels;
    }

    public void setTitle(String title) {
        shell.setText(title);
    }

    /**
     * Sets the values of the <code>Text</code> widgets of the dialog to
     * the values supplied in the parameter array.
     *
     * @param   itemInfo   String[]
     *                   The values to which the dialog contents will be set.
     */
    public void setValues(String[] itemInfo) {
        if (labels == null)
            return;

        if (values == null)
            values = new String[labels.length];

        int numItems = Math.min(values.length, itemInfo.length);
        for (int i = 0; i < numItems; i++) {
            values[i] = itemInfo[i];
        }
    }
}