gov.redhawk.statistics.ui.internal.SettingsDialog.java Source code

Java tutorial

Introduction

Here is the source code for gov.redhawk.statistics.ui.internal.SettingsDialog.java

Source

/******************************************************************************
 * This file is protected by Copyright. 
 * Please refer to the COPYRIGHT file distributed with this source distribution.
 *
 * This file is part of REDHAWK IDE.
 *
 * 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
 *******************************************************************************/
package gov.redhawk.statistics.ui.internal;

import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
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 org.eclipse.swt.widgets.Text;

public class SettingsDialog extends TitleAreaDialog {

    private Text barText;
    private int numBars;
    private int numDims, selIndex;

    public SettingsDialog(Shell parentShell, int dimensions, int currentIndex, int currentBars) {
        super(parentShell);
        numDims = dimensions;
        selIndex = currentIndex;
        numBars = currentBars;
    }

    @Override
    public void create() {
        super.create();
        setDialogHelpAvailable(false);

        setTitle("Chart Options");

        String messageText = "Please set the number of bars " + ((numDims > 1) ? "and select dimension(s) " : "")
                + "to be shown.";
        setMessage(messageText, IMessageProvider.NONE);

        //resize dialog window to ideal size
        this.getShell().pack();
    }

    @Override
    protected Control createDialogArea(Composite parent) {

        Composite dialogComp = new Composite(parent, SWT.None);
        dialogComp.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).create());
        dialogComp.setLayout(GridLayoutFactory.fillDefaults().numColumns(2).create());

        Composite barComposite = new Composite(dialogComp, SWT.None);
        barComposite.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());
        barComposite.setLayout(GridLayoutFactory.fillDefaults().margins(10, 10).numColumns(2).create());

        Label label = new Label(barComposite, SWT.NONE);
        label.setText("Number of bars:");

        barText = new Text(barComposite, SWT.BORDER);
        barText.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).create());
        barText.setText(String.valueOf(numBars));
        barText.setSelection(0, barText.getText().length());
        barText.addModifyListener(new ModifyListener() {
            @Override
            public void modifyText(ModifyEvent e) {
                getButton(OK).setEnabled(isValidInput());
            }
        });

        if (numDims > 1) {
            Composite buttons = new Composite(dialogComp, SWT.None);
            buttons.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).create());
            buttons.setLayout(GridLayoutFactory.fillDefaults().margins(10, 10).create());

            for (int i = -1; i < numDims; i++) {
                final Button button = new Button(buttons, SWT.RADIO);
                button.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).create());
                button.setSelection(i == selIndex);
                button.setData(i);
                button.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(SelectionEvent e) {
                        selIndex = (Integer) button.getData();

                    }
                });

                if (i == -1) {
                    button.setText("Complex");
                } else if (numDims == 2) {
                    if (i == 0) {
                        button.setText("Real");
                    } else {
                        button.setText("Imaginary");
                    }
                } else {
                    button.setText("Dimension " + i);
                }
            }
        }

        return parent;
    }

    private boolean isValidInput() {
        try {
            if (Integer.parseInt(barText.getText()) < 1) {
                setMessage("Please enter a positive integer.", IMessageProvider.ERROR);
                return false;
            }
        } catch (NumberFormatException e) {
            setMessage("Please enter a positive integer.", IMessageProvider.ERROR);
            return false;
        }
        setMessage("Please set the number of bars " + ((numDims > 1) ? "and select dimension(s) " : "")
                + "to be shown.", IMessageProvider.NONE);
        return true;
    }

    @Override
    protected boolean isResizable() {
        return true;
    }

    // We need to have the textFields into Strings because the UI gets disposed
    // and the Text Fields are not accessible any more.
    private void saveInput() {
        numBars = Integer.parseInt(barText.getText());
    }

    @Override
    protected void okPressed() {
        saveInput();
        super.okPressed();
    }

    public int getNumBars() {
        return numBars;
    }

    public int getSelectedIndex() {
        return selIndex;
    }
}