org.eclipse.rap.demo.controls.DialogsTab.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.rap.demo.controls.DialogsTab.java

Source

/*******************************************************************************
 * Copyright (c) 2002, 2012 Innoopract Informationssysteme GmbH and others.
 * 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:
 *    Innoopract Informationssysteme GmbH - initial API and implementation
 *    EclipseSource - ongoing development
 ******************************************************************************/
package org.eclipse.rap.demo.controls;

import java.lang.reflect.InvocationTargetException;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.IInputValidator;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.window.Window;
import org.eclipse.rap.rwt.widgets.DialogCallback;
import org.eclipse.rap.rwt.widgets.DialogUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.ColorDialog;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.FontDialog;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.MessageBox;

public class DialogsTab extends ExampleTab {

    private Label inputDlgResLabel;
    private Label loginDlgResLabel;
    private Label messageDlgResLabel;
    private Label errorDlgResLabel;
    private Label messageBoxDlgResLabel;
    private Button okButton;
    private Button cancelButton;
    private Button yesButton;
    private Button noButton;
    private Button retryButton;
    private Button abortButton;
    private Button ignoreButton;
    private Button iconErrorButton;
    private Button iconInformationButton;
    private Button iconQuestionButton;
    private Button iconWarningButton;
    private Button iconWorkingButton;
    private Button noIconButton;
    private Button showMessageBoxDlgButton;
    private Button showColorDialogButton;
    private Button showFontDialogButton;
    protected boolean useDialogCallback;

    public DialogsTab() {
        super("Dialogs");
    }

    @Override
    protected void createStyleControls(final Composite parent) {
        parent.setLayout(new GridLayout(1, true));
        createMessageBoxStyleControls(parent);
    }

    @Override
    protected void createExampleControls(final Composite parent) {
        parent.setLayout(new GridLayout());
        Group group1 = new Group(parent, SWT.NONE);
        group1.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        group1.setText("JFace Dialogs");
        group1.setLayout(new GridLayout(3, true));

        // JFace input dialog
        Button showInputDlgButton = new Button(group1, SWT.PUSH);
        showInputDlgButton.setText("Input Dialog");
        showInputDlgButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                showInputDialog();
            }
        });
        showInputDlgButton.setLayoutData(createGridDataFillBoth());
        Button showProgressDlgButton = new Button(group1, SWT.PUSH);
        showProgressDlgButton.setText("ProgressDialog");
        showProgressDlgButton.setLayoutData(createGridDataFillBoth());
        showProgressDlgButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent e) {
                showProgressDialog();
            }
        });
        insertSpaceLabels(group1, 1);

        inputDlgResLabel = new Label(group1, SWT.WRAP);
        inputDlgResLabel.setText("Result:");
        GridData gdInputDlgResLabel = new GridData();
        gdInputDlgResLabel.horizontalSpan = 3;
        inputDlgResLabel.setLayoutData(gdInputDlgResLabel);

        Button showMessageInfoDlgButton = new Button(group1, SWT.PUSH);
        showMessageInfoDlgButton.setLayoutData(createGridDataFillBoth());
        showMessageInfoDlgButton.setText("Info Message");
        showMessageInfoDlgButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                showMessageDialogInfo();
            }
        });

        Button showMessageWarningDlgButton = new Button(group1, SWT.PUSH);
        showMessageWarningDlgButton.setLayoutData(createGridDataFillBoth());
        showMessageWarningDlgButton.setText("Warning Dialog");
        showMessageWarningDlgButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                showMessageDialogWarning();
            }
        });
        Button showMessageErrorDlgButton = new Button(group1, SWT.PUSH);
        showMessageErrorDlgButton.setLayoutData(createGridDataFillBoth());
        showMessageErrorDlgButton.setText("Error Message");
        showMessageErrorDlgButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                showMessageDialogError();
            }
        });

        Button showMessageQuestionDlgButton = new Button(group1, SWT.PUSH);
        showMessageQuestionDlgButton.setLayoutData(createGridDataFillBoth());
        showMessageQuestionDlgButton.setText("Question Dialog");
        showMessageQuestionDlgButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                showMessageDialogQuestion();
            }
        });

        Button showMessageConfirmDlgButton = new Button(group1, SWT.PUSH);
        showMessageConfirmDlgButton.setLayoutData(createGridDataFillBoth());
        showMessageConfirmDlgButton.setText("Confirm Message");
        showMessageConfirmDlgButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                showMessageDialogConfirm();
            }
        });
        insertSpaceLabels(group1, 1);

        messageDlgResLabel = new Label(group1, SWT.WRAP);
        messageDlgResLabel.setText("Result:");
        insertSpaceLabels(group1, 2);

        Button showErrorDlgButton = new Button(group1, SWT.PUSH);
        showErrorDlgButton.setLayoutData(createGridDataFillBoth());
        showErrorDlgButton.setText("Error Dialog");
        showErrorDlgButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                showErrorDialog();
            }
        });
        insertSpaceLabels(group1, 2);

        errorDlgResLabel = new Label(group1, SWT.WRAP);
        errorDlgResLabel.setText("Result:");
        insertSpaceLabels(group1, 2);

        Group group2 = new Group(parent, SWT.NONE);
        group2.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        group2.setText("Custom Dialogs");
        group2.setLayout(new GridLayout(3, true));

        Button showLoginDlgButton = new Button(group2, SWT.PUSH);
        showLoginDlgButton.setText("Login Dialog");
        showLoginDlgButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                showLoginDialog();
            }
        });
        showLoginDlgButton.setLayoutData(createGridDataFillBoth());
        insertSpaceLabels(group2, 2);

        loginDlgResLabel = new Label(group2, SWT.WRAP);
        loginDlgResLabel.setText("Result:");

        Group swtDialogsGroup = new Group(parent, SWT.NONE);
        swtDialogsGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        swtDialogsGroup.setText("SWT Dialogs");
        swtDialogsGroup.setLayout(new GridLayout(3, true));

        final Button cbUseDialogCallback = new Button(swtDialogsGroup, SWT.CHECK);
        cbUseDialogCallback.setText("Use DialogCallback");
        cbUseDialogCallback.setSelection(useDialogCallback);
        cbUseDialogCallback.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
        cbUseDialogCallback.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent event) {
                useDialogCallback = cbUseDialogCallback.getSelection();
            }
        });

        showMessageBoxDlgButton = new Button(swtDialogsGroup, SWT.PUSH);
        showMessageBoxDlgButton.setText("MessageBox Dialog");
        showMessageBoxDlgButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                showMessageBoxDialog();
            }
        });
        showMessageBoxDlgButton.setLayoutData(createGridDataFillBoth());

        showColorDialogButton = new Button(swtDialogsGroup, SWT.PUSH);
        showColorDialogButton.setText("ColorDialog");
        showColorDialogButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent e) {
                showColorDialog();
            }
        });
        showColorDialogButton.setLayoutData(createGridDataFillBoth());
        showFontDialogButton = new Button(swtDialogsGroup, SWT.PUSH);
        showFontDialogButton.setText("FontDialog");
        showFontDialogButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent e) {
                showFontDialog();
            }
        });
        showFontDialogButton.setLayoutData(createGridDataFillBoth());

        messageBoxDlgResLabel = new Label(swtDialogsGroup, SWT.WRAP);
        messageBoxDlgResLabel.setText("Result:");
        GridData gdMessageBoxDlgResLabel = new GridData();
        gdMessageBoxDlgResLabel.horizontalSpan = 3;
        messageBoxDlgResLabel.setLayoutData(gdMessageBoxDlgResLabel);
    }

    private GridData createGridDataFillBoth() {
        return new GridData(GridData.FILL_BOTH);
    }

    private void insertSpaceLabels(final Group group, final int count) {
        for (int i = 0; i < count; i++) {
            new Label(group, SWT.NONE);
        }
    }

    private void showInputDialog() {
        final IInputValidator val = new IInputValidator() {
            public String isValid(final String newText) {
                String result = null;
                if (newText.length() < 5) {
                    result = "Input text too short!";
                }
                return result;
            }
        };
        String title = "Input Dialog";
        String mesg = "Enter at least five characters";
        String def = "default text";
        final InputDialog dlg;
        dlg = new InputDialog(getShell(), title, mesg, def, val);
        int returnCode = dlg.open();
        String resultText = "Result: " + getReturnCodeText(returnCode);
        if (returnCode == Window.OK) {
            resultText += ", value: " + dlg.getValue();
        }
        inputDlgResLabel.setText(resultText);
        inputDlgResLabel.pack();
    }

    private void showProgressDialog() {
        ProgressMonitorDialog dialog = new ProgressMonitorDialog(getShell());
        try {
            dialog.run(true, true, new IRunnableWithProgress() {
                public void run(final IProgressMonitor monitor)
                        throws InvocationTargetException, InterruptedException {
                    monitor.beginTask("Counting from one to 20...", 20);
                    for (int i = 1; !monitor.isCanceled() && i <= 20; i++) {
                        monitor.worked(1);
                        Thread.sleep(1000);
                    }
                    monitor.done();
                }
            });
        } catch (Exception e) {
            MessageDialog.openError(getShell(), "Error", e.getMessage());
        }
    }

    private void showMessageDialogInfo() {
        String title = "Information";
        String mesg = "RAP rocks!";
        MessageDialog.openInformation(getShell(), title, mesg);
        messageDlgResLabel.setText("Result: none");
        messageDlgResLabel.pack();
    }

    private void showMessageDialogError() {
        String title = "Error";
        String mesg = "An everyday error occured.\n " + "Nothing to get worried.";
        MessageDialog.openError(getShell(), title, mesg);
        messageDlgResLabel.setText("Result: none");
        messageDlgResLabel.pack();
    }

    private void showMessageDialogQuestion() {
        String title = "Question";
        String mesg = "Do you like the RAP technology?\n\n" + "Note that you can also press <Return> here. "
                + "The correct answer is automatically selected.";
        boolean result = MessageDialog.openQuestion(getShell(), title, mesg);
        messageDlgResLabel.setText("Result: " + result);
        messageDlgResLabel.pack();
    }

    private void showMessageDialogConfirm() {
        String title = "Confirmation";
        String mesg = "Nothing will be done. Ok?";
        boolean result = MessageDialog.openConfirm(getShell(), title, mesg);
        messageDlgResLabel.setText("Result: " + result);
        messageDlgResLabel.pack();
    }

    private void showMessageDialogWarning() {
        String title = "Warning";
        String mesg = "You have been warned.";
        MessageDialog.openWarning(getShell(), title, mesg);
        messageDlgResLabel.setText("Result: none");
        messageDlgResLabel.pack();
    }

    private void showErrorDialog() {
        String title = "Error";
        int code = 23;
        String mesg = "An absolutetly weird error occured";
        String reason = "Don't know, it just happened ...";
        Exception exception = new IndexOutOfBoundsException("negative index: -1");
        exception = new RuntimeException(exception);
        IStatus status = new Status(IStatus.ERROR, "org.eclipse.rap.demo", code, reason, exception);
        int returnCode = ErrorDialog.openError(getShell(), title, mesg, status);
        errorDlgResLabel.setText("Result: " + getReturnCodeText(returnCode));
        errorDlgResLabel.pack();
    }

    private void showLoginDialog() {
        String message = "Please sign in with your username and password:";
        final LoginDialog loginDialog = new LoginDialog(getShell(), "Login", message);
        loginDialog.setUsername("john");
        int returnCode = loginDialog.open();
        String resultText = "Result: " + getReturnCodeText(returnCode);
        if (returnCode == Window.OK) {
            String username = loginDialog.getUsername();
            String password = loginDialog.getPassword();
            String pwInfo = password == null ? "n/a" : password.length() + " chars";
            resultText += ", user: " + username + ", password: " + pwInfo;
        }
        loginDlgResLabel.setText(resultText);
        loginDlgResLabel.pack();
    }

    private String getReturnCodeText(final int code) {
        String result;
        if (code == Window.OK) {
            result = "OK";
        } else if (code == Window.CANCEL) {
            result = "CANCEL";
        } else {
            result = String.valueOf(code);
        }
        return result;
    }

    private void showMessageBoxDialog() {
        int style = getStyle();
        if (okButton.getEnabled() && okButton.getSelection()) {
            style |= SWT.OK;
        }
        if (cancelButton.getEnabled() && cancelButton.getSelection()) {
            style |= SWT.CANCEL;
        }
        if (yesButton.getEnabled() && yesButton.getSelection()) {
            style |= SWT.YES;
        }
        if (noButton.getEnabled() && noButton.getSelection()) {
            style |= SWT.NO;
        }
        if (retryButton.getEnabled() && retryButton.getSelection()) {
            style |= SWT.RETRY;
        }
        if (abortButton.getEnabled() && abortButton.getSelection()) {
            style |= SWT.ABORT;
        }
        if (ignoreButton.getEnabled() && ignoreButton.getSelection()) {
            style |= SWT.IGNORE;
        }
        if (iconErrorButton.getEnabled() && iconErrorButton.getSelection()) {
            style |= SWT.ICON_ERROR;
        }
        if (iconInformationButton.getEnabled() && iconInformationButton.getSelection()) {
            style |= SWT.ICON_INFORMATION;
        }
        if (iconQuestionButton.getEnabled() && iconQuestionButton.getSelection()) {
            style |= SWT.ICON_QUESTION;
        }
        if (iconWarningButton.getEnabled() && iconWarningButton.getSelection()) {
            style |= SWT.ICON_WARNING;
        }
        if (iconWorkingButton.getEnabled() && iconWorkingButton.getSelection()) {
            style |= SWT.ICON_WORKING;
        }
        String title = "MessageBox Title";
        String mesg = "Lorem ipsum dolor sit amet consectetuer adipiscing elit.";
        MessageBox mb = new MessageBox(getShell(), style);
        mb.setText(title);
        mb.setMessage(mesg);
        if (useDialogCallback) {
            DialogUtil.open(mb, new DialogCallback() {
                public void dialogClosed(int returnCode) {
                    String returnCodeText = returnCodeText(returnCode);
                    messageBoxDlgResLabel.setText("Result: " + returnCodeText);
                    messageBoxDlgResLabel.pack();
                }
            });
        } else {
            int result = mb.open();
            String returnCodeText = returnCodeText(result);
            messageBoxDlgResLabel.setText("Result: " + returnCodeText);
            messageBoxDlgResLabel.pack();
        }
    }

    private void showColorDialog() {
        final ColorDialog dialog = new ColorDialog(getShell());
        if (useDialogCallback) {
            DialogUtil.open(dialog, new DialogCallback() {
                public void dialogClosed(int returnCode) {
                    RGB result = dialog.getRGB();
                    messageBoxDlgResLabel.setText("Result: " + result);
                    messageBoxDlgResLabel.pack();
                }
            });
        } else {
            RGB result = dialog.open();
            messageBoxDlgResLabel.setText("Result: " + result);
            messageBoxDlgResLabel.pack();
        }
    }

    protected void showFontDialog() {
        final FontDialog dialog = new FontDialog(getShell(), SWT.SHELL_TRIM);
        if (useDialogCallback) {
            DialogUtil.open(dialog, new DialogCallback() {
                public void dialogClosed(int returnCode) {
                    FontData fontData = returnCode == SWT.OK ? dialog.getFontList()[0] : null;
                    RGB rgb = dialog.getRGB();
                    messageBoxDlgResLabel.setText("Result: " + fontData + " / " + rgb);
                    messageBoxDlgResLabel.pack();
                }
            });
        } else {
            FontData result = dialog.open();
            messageBoxDlgResLabel.setText("Result: " + result + " / " + dialog.getRGB());
            messageBoxDlgResLabel.pack();
        }
    }

    private void createMessageBoxStyleControls(final Composite parent) {
        createButtonStyleGroup(parent);
        createIconStyleGroup(parent);
    }

    private void createButtonStyleGroup(final Composite parent) {
        Group group = new Group(parent, SWT.NONE);
        group.setLayout(new GridLayout());
        GridData layoutData = new GridData(SWT.FILL, SWT.FILL, false, false);
        group.setLayoutData(layoutData);
        group.setText("SWT MessageBox Styles");
        okButton = new Button(group, SWT.CHECK);
        okButton.setText("SWT.OK");
        cancelButton = new Button(group, SWT.CHECK);
        cancelButton.setText("SWT.CANCEL");
        yesButton = new Button(group, SWT.CHECK);
        yesButton.setText("SWT.YES");
        noButton = new Button(group, SWT.CHECK);
        noButton.setText("SWT.NO");
        retryButton = new Button(group, SWT.CHECK);
        retryButton.setText("SWT.RETRY");
        abortButton = new Button(group, SWT.CHECK);
        abortButton.setText("SWT.ABORT");
        ignoreButton = new Button(group, SWT.CHECK);
        ignoreButton.setText("SWT.IGNORE");
    }

    private void createIconStyleGroup(final Composite parent) {
        Group group = new Group(parent, SWT.NONE);
        group.setLayout(new GridLayout());
        GridData iconGroupData = new GridData(SWT.FILL, SWT.FILL, false, false);
        group.setLayoutData(iconGroupData);
        group.setText("SWT MessageBox Icon Styles");
        iconErrorButton = new Button(group, SWT.RADIO);
        iconErrorButton.setText("SWT.ICON_ERROR");
        iconInformationButton = new Button(group, SWT.RADIO);
        iconInformationButton.setText("SWT.ICON_INFORMATION");
        iconQuestionButton = new Button(group, SWT.RADIO);
        iconQuestionButton.setText("SWT.ICON_QUESTION");
        iconWarningButton = new Button(group, SWT.RADIO);
        iconWarningButton.setText("SWT.ICON_WARNING");
        iconWorkingButton = new Button(group, SWT.RADIO);
        iconWorkingButton.setText("SWT.ICON_WORKING");
        noIconButton = new Button(group, SWT.RADIO);
        noIconButton.setText("No Icon");
        noIconButton.setSelection(true);
    }

    private static String returnCodeText(int result) {
        String strResult = "";
        switch (result) {
        case SWT.OK:
            strResult = "SWT.OK";
            break;
        case SWT.YES:
            strResult = "SWT.YES";
            break;
        case SWT.NO:
            strResult = "SWT.NO";
            break;
        case SWT.CANCEL:
            strResult = "SWT.CANCEL";
            break;
        case SWT.ABORT:
            strResult = "SWT.ABORT";
            break;
        case SWT.RETRY:
            strResult = "SWT.RETRY";
            break;
        case SWT.IGNORE:
            strResult = "SWT.IGNORE";
            break;
        default:
            strResult = "" + result;
            break;
        }
        return strResult;
    }
}