org.eclipse.rap.examples.pages.DialogExamplePage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.rap.examples.pages.DialogExamplePage.java

Source

/*******************************************************************************
 * Copyright (c) 2009, 2012 EclipseSource 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:
 *    EclipseSource - initial API and implementation
 ******************************************************************************/
package org.eclipse.rap.examples.pages;

import java.lang.reflect.InvocationTargetException;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
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.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.window.Window;
import org.eclipse.rap.examples.ExampleUtil;
import org.eclipse.rap.examples.IExamplePage;
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.widgets.Button;
import org.eclipse.swt.widgets.ColorDialog;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FontDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;

public class DialogExamplePage implements IExamplePage {

    private Label resultsLabel;

    public void createControl(Composite parent) {
        parent.setLayout(ExampleUtil.createMainLayout(1));
        createSwtArea(parent);
        createJfaceArea(parent);
        createCustomArea(parent);
        createResultsComposite(parent);
    }

    private void createSwtArea(Composite parent) {
        Composite swtComp = new Composite(parent, SWT.NONE);
        swtComp.setLayoutData(ExampleUtil.createHorzFillData());
        swtComp.setLayout(ExampleUtil.createGridLayout(3, false, true, true));
        ExampleUtil.createHeading(swtComp, "SWT Dialogs", 3);
        createSwtDialogButtons(swtComp);
    }

    private void createJfaceArea(Composite parent) {
        Composite jFaceComp = new Composite(parent, SWT.NONE);
        jFaceComp.setLayoutData(ExampleUtil.createHorzFillData());
        jFaceComp.setLayout(ExampleUtil.createGridLayout(3, false, true, true));
        ExampleUtil.createHeading(jFaceComp, "JFace Dialogs", 3);
        createJfaceDialogButtons(jFaceComp);
    }

    private void createCustomArea(Composite parent) {
        Composite customComp = new Composite(parent, SWT.NONE);
        customComp.setLayoutData(ExampleUtil.createHorzFillData());
        customComp.setLayout(ExampleUtil.createGridLayout(3, false, true, true));
        ExampleUtil.createHeading(customComp, "Custom Dialogs", 3);
        createCustomDialogs(customComp);
    }

    private void createResultsComposite(Composite parent) {
        Composite composite = new Composite(parent, SWT.NONE);
        composite.setLayout(ExampleUtil.createGridLayout(3, false, true, true));
        composite.setLayoutData(ExampleUtil.createHorzFillData());
        resultsLabel = new Label(composite, SWT.WRAP);
        resultsLabel.setLayoutData(ExampleUtil.createFillData());
    }

    //////
    // SWT

    private void createSwtDialogButtons(Composite swtComp) {
        createMessageDialogButton(swtComp);
        createColorDialogButton(swtComp);
        createFontDialogButton(swtComp);
    }

    private void createMessageDialogButton(Composite parent) {
        Button button = new Button(parent, SWT.PUSH);
        button.setText("MessageBox");
        button.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent event) {
                showMessageBox();
            }
        });
        button.setLayoutData(createButtonGridData());
    }

    private void createColorDialogButton(Composite parent) {
        Button button = new Button(parent, SWT.PUSH);
        button.setText("ColorDialog");
        button.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                showColorDialog();
            }
        });
        button.setLayoutData(createButtonGridData());
    }

    private void createFontDialogButton(Composite parent) {
        Button button = new Button(parent, SWT.PUSH);
        button.setText("FontDialog");
        button.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                showFontDialog();
            }
        });
        button.setLayoutData(createButtonGridData());
    }

    ////////
    // JFace

    private void createJfaceDialogButtons(Composite parent) {
        createInputDialogButton(parent);
        createProgressDialogButton(parent);
        createErrorDialogButton(parent);
        createInfoMessageDialogButton(parent);
        createWarningMessageDialogButton(parent);
        createErrorMessageDialogButton(parent);
        createQuestionMessageDialogButton(parent);
        createConfirmMessageDialogButton(parent);
    }

    private void createInputDialogButton(Composite parent) {
        Button button = new Button(parent, SWT.PUSH);
        button.setText("Input Dialog");
        button.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent event) {
                showInputDialog();
            }
        });
        button.setLayoutData(createButtonGridData());
    }

    private void createProgressDialogButton(Composite parent) {
        Button button = new Button(parent, SWT.PUSH);
        button.setText("ProgressDialog");
        button.setLayoutData(createButtonGridData());
        button.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent e) {
                showProgressDialog();
            }
        });
    }

    private void createErrorDialogButton(Composite parent) {
        Button button = new Button(parent, SWT.PUSH);
        button.setLayoutData(createButtonGridData());
        button.setText("Error Dialog");
        button.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent event) {
                showErrorDialog();
            }
        });
    }

    private void createInfoMessageDialogButton(Composite parent) {
        Button showMessageInfoDlgButton = new Button(parent, SWT.PUSH);
        showMessageInfoDlgButton.setLayoutData(createButtonGridData());
        showMessageInfoDlgButton.setText("Info Message");
        showMessageInfoDlgButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent event) {
                showMessageDialogInfo();
            }
        });
    }

    private void createWarningMessageDialogButton(Composite parent) {
        Button showMessageWarningDlgButton = new Button(parent, SWT.PUSH);
        showMessageWarningDlgButton.setLayoutData(createButtonGridData());
        showMessageWarningDlgButton.setText("Warning Dialog");
        showMessageWarningDlgButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent event) {
                showMessageDialogWarning();
            }
        });
    }

    private void createErrorMessageDialogButton(Composite parent) {
        Button showMessageErrorDlgButton = new Button(parent, SWT.PUSH);
        showMessageErrorDlgButton.setLayoutData(createButtonGridData());
        showMessageErrorDlgButton.setText("Error Message");
        showMessageErrorDlgButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent event) {
                showMessageDialogError();
            }
        });
    }

    private void createQuestionMessageDialogButton(Composite parent) {
        Button showMessageQuestionDlgButton = new Button(parent, SWT.PUSH);
        showMessageQuestionDlgButton.setLayoutData(createButtonGridData());
        showMessageQuestionDlgButton.setText("Question Dialog");
        showMessageQuestionDlgButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent event) {
                showMessageDialogQuestion();
            }
        });
    }

    private void createConfirmMessageDialogButton(Composite parent) {
        Button showMessageConfirmDlgButton = new Button(parent, SWT.PUSH);
        showMessageConfirmDlgButton.setLayoutData(createButtonGridData());
        showMessageConfirmDlgButton.setText("Confirm Message");
        showMessageConfirmDlgButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent event) {
                showMessageDialogConfirm();
            }
        });
    }

    /////////
    // Custom

    private void createCustomDialogs(Composite parent) {
        Button button = new Button(parent, SWT.PUSH);
        button.setText("Login Dialog");
        button.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent event) {
                showLoginDialog();
            }
        });
        button.setLayoutData(createButtonGridData());
    }

    private void showInputDialog() {
        final IInputValidator val = new IInputValidator() {
            public String isValid(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 dialog = new InputDialog(getShell(), title, mesg, def, val) {
            @Override
            public boolean close() {
                boolean result = super.close();
                int returnCode = getReturnCode();
                String resultText = "Result: " + getReturnCodeText(returnCode);
                if (returnCode == Window.OK) {
                    resultText += ", value: " + getValue();
                }
                showResult(resultText);
                return result;
            }
        };
        dialog.setBlockOnOpen(false);
        dialog.open();
    }

    private void showProgressDialog() {
        ProgressMonitorDialog dialog = new ProgressMonitorDialog(getShell()) {
            @Override
            public boolean close() {
                return super.close();
            }
        };
        dialog.setBlockOnOpen(false);
        try {
            dialog.run(true, true, new IRunnableWithProgress() {
                public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
                    monitor.beginTask("Counting to 12...", 12);
                    for (int i = 1; !monitor.isCanceled() && i <= 12; i++) {
                        monitor.worked(1);
                        Thread.sleep(300);
                    }
                    monitor.done();
                }
            });
        } catch (Exception e) {
            MessageDialogUtil.openError(getShell(), "Error", e.getMessage(), null);
        }
    }

    private void showMessageDialogInfo() {
        String title = "Information";
        String message = "This is a RAP MessageDialog.";
        DialogCallback callback = new DialogCallback() {
            public void dialogClosed(int returnCode) {
                showResult("Result: none");
            }
        };
        MessageDialogUtil.openInformation(getShell(), title, message, callback);
    }

    private void showMessageDialogError() {
        String title = "Error";
        String message = "A weird error occured.\n " + "Please reboot.";
        DialogCallback callback = new DialogCallback() {
            public void dialogClosed(int returnCode) {
                showResult("Result: none");
            }
        };
        MessageDialogUtil.openError(getShell(), title, message, callback);
    }

    private void showMessageDialogQuestion() {
        String title = "Question";
        String message = "Would you like to see the demo?\n\n" + "You can have multiple lines of text here. "
                + "Note that pressing <Return> here selects the default button.";
        DialogCallback callback = new DialogCallback() {
            public void dialogClosed(int returnCode) {
                showResult("Result: " + returnCode);
            }
        };
        MessageDialogUtil.openQuestion(getShell(), title, message, callback);
    }

    private void showMessageDialogConfirm() {
        String title = "Confirmation";
        String message = "Nothing will be done. Ok?";
        DialogCallback callback = new DialogCallback() {
            public void dialogClosed(int returnCode) {
                showResult("Result: " + returnCode);
            }
        };
        MessageDialogUtil.openConfirm(getShell(), title, message, callback);
    }

    private void showMessageDialogWarning() {
        String title = "Warning";
        String message = "You have been warned.";
        DialogCallback callback = new DialogCallback() {
            public void dialogClosed(int returnCode) {
                showResult("Result: " + returnCode);
            }
        };
        MessageDialogUtil.openWarning(getShell(), title, message, callback);
    }

    private void showErrorDialog() {
        MultiStatus status = createStatus();
        String title = "Error";
        String message = "An error occured while processing this command";
        int displayMask = IStatus.OK | IStatus.INFO | IStatus.WARNING | IStatus.ERROR;
        ErrorDialog errorDialog = new ErrorDialog(getShell(), title, message, status, displayMask) {
            @Override
            public boolean close() {
                boolean result = super.close();
                int returnCode = getReturnCode();
                showResult("Result: " + getReturnCodeText(returnCode));
                return result;
            }
        };
        errorDialog.setBlockOnOpen(false);
        errorDialog.open();
    }

    private static MultiStatus createStatus() {
        String pluginId = "org.eclipse.rap.demo";
        int code = 23;
        String message = "Illegal array offset";
        MultiStatus multiStatus = new MultiStatus(pluginId, code, message, new RuntimeException());
        Exception exception = new IndexOutOfBoundsException("negative index: -1");
        multiStatus.add(new Status(IStatus.ERROR, pluginId, code, message, exception));
        return multiStatus;
    }

    private void showLoginDialog() {
        String message = "Please sign in with your username and password:";
        final LoginDialog loginDialog = new LoginDialog(getShell(), "Login", message) {
            @Override
            public boolean close() {
                boolean result = super.close();
                int returnCode = getReturnCode();
                String resultText = "Result: " + getReturnCodeText(returnCode);
                if (returnCode == Window.OK) {
                    String pwInfo = getPassword() == null ? "n/a" : getPassword().length() + " chars";
                    resultText += ", user: " + getUsername() + ", password: " + pwInfo;
                }
                showResult(resultText);
                return result;
            }
        };
        loginDialog.setUsername("john");
        loginDialog.setBlockOnOpen(false);
        loginDialog.open();
    }

    private Shell getShell() {
        return Display.getCurrent().getActiveShell();
    }

    private String getReturnCodeText(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 showMessageBox() {
        String title = "MessageBox Title";
        String mesg = "Lorem ipsum dolor sit amet consectetuer adipiscing elit.";
        MessageBox messageBox = new MessageBox(getShell(), SWT.YES | SWT.NO);
        messageBox.setText(title);
        messageBox.setMessage(mesg);
        DialogUtil.open(messageBox, new DialogCallback() {
            public void dialogClosed(int returnCode) {
                String strResult = "";
                switch (returnCode) {
                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 = "" + returnCode;
                    break;
                }
                showResult("Result: " + strResult);
            }
        });
    }

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

    protected void showFontDialog() {
        final FontDialog dialog = new FontDialog(getShell(), SWT.SHELL_TRIM);
        DialogUtil.open(dialog, new DialogCallback() {
            public void dialogClosed(int returnCode) {
                FontData[] fontList = dialog.getFontList();
                FontData fontData = null;
                if (fontList != null) {
                    fontData = fontList[0];
                }
                showResult("Result: " + fontData + " / " + dialog.getRGB());
            }
        });
    }

    private void showResult(String resultText) {
        resultsLabel.setText(resultText);
        resultsLabel.getParent().pack();
    }

    private static GridData createButtonGridData() {
        return new GridData(200, 28);
    }

}