org.roda.wui.client.common.dialogs.Dialogs.java Source code

Java tutorial

Introduction

Here is the source code for org.roda.wui.client.common.dialogs.Dialogs.java

Source

/**
 * The contents of this file are subject to the license and copyright
 * detailed in the LICENSE file at the root of the source
 * tree and available online at
 *
 * https://github.com/keeps/roda
 */
package org.roda.wui.client.common.dialogs;

import org.roda.wui.client.common.NoAsyncCallback;
import org.roda.wui.client.common.search.SearchSuggestBox;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyDownEvent;
import com.google.gwt.event.dom.client.KeyDownHandler;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.event.dom.client.KeyUpHandler;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.regexp.shared.RegExp;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;

import config.i18n.client.ClientMessages;

public class Dialogs {

    private static final ClientMessages messages = GWT.create(ClientMessages.class);

    private Dialogs() {
        // do nothing
    }

    public static void showConfirmDialog(String title, String message, String cancelButtonText,
            String confirmButtonText, final AsyncCallback<Boolean> callback) {
        final DialogBox dialogBox = new DialogBox(false, true);
        dialogBox.setText(title);

        FlowPanel layout = new FlowPanel();
        Label messageLabel = new Label(message);
        Button cancelButton = new Button(cancelButtonText);
        Button confirmButton = new Button(confirmButtonText);
        FlowPanel footer = new FlowPanel();

        layout.add(messageLabel);
        layout.add(footer);
        footer.add(cancelButton);
        footer.add(confirmButton);

        dialogBox.setWidget(layout);

        dialogBox.setGlassEnabled(true);
        dialogBox.setAnimationEnabled(false);

        cancelButton.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                dialogBox.hide();
                callback.onSuccess(false);
            }
        });

        confirmButton.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                dialogBox.hide();
                callback.onSuccess(true);
            }
        });

        dialogBox.addStyleName("wui-dialog-confirm");
        layout.addStyleName("wui-dialog-layout");
        footer.addStyleName("wui-dialog-layout-footer");
        messageLabel.addStyleName("wui-dialog-message");
        cancelButton.addStyleName("btn btn-link");
        confirmButton.addStyleName("btn btn-play");

        dialogBox.center();
        dialogBox.show();
    }

    public static void showInformationDialog(String title, String message, String continueButtonText) {
        showInformationDialog(title, message, continueButtonText, new NoAsyncCallback<Void>());
    }

    public static void showInformationDialog(String title, String message, String continueButtonText,
            final AsyncCallback<Void> callback) {
        final DialogBox dialogBox = new DialogBox(false, true);
        dialogBox.setText(title);

        FlowPanel layout = new FlowPanel();
        HTML messageLabel = new HTML(message);
        Button continueButton = new Button(continueButtonText);

        layout.add(messageLabel);
        layout.add(continueButton);

        dialogBox.setWidget(layout);

        dialogBox.setGlassEnabled(true);
        dialogBox.setAnimationEnabled(false);

        continueButton.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                dialogBox.hide();
                callback.onSuccess(null);
            }
        });

        dialogBox.addStyleName("wui-dialog-information");
        layout.addStyleName("wui-dialog-layout");
        messageLabel.addStyleName("wui-dialog-message");
        continueButton.addStyleName("btn btn-play");

        dialogBox.center();
        dialogBox.show();
    }

    public static void showPromptDialog(String title, String message, String value, String placeHolder,
            final RegExp validator, String cancelButtonText, String confirmButtonText, boolean mandatory,
            final AsyncCallback<String> callback) {
        final DialogBox dialogBox = new DialogBox(false, true);
        dialogBox.setText(title);

        final FlowPanel layout = new FlowPanel();

        if (message != null) {
            final Label messageLabel = new Label(message);
            layout.add(messageLabel);
            messageLabel.addStyleName("wui-dialog-message");
        }

        final TextBox inputBox = new TextBox();
        inputBox.setTitle("input box");

        if (value != null) {
            inputBox.setText(value);
        }

        if (placeHolder != null) {
            inputBox.getElement().setPropertyString("placeholder", placeHolder);
        }

        final Button cancelButton = new Button(cancelButtonText);
        final Button confirmButton = new Button(confirmButtonText);
        confirmButton.setEnabled(!mandatory);

        layout.add(inputBox);
        layout.add(cancelButton);
        layout.add(confirmButton);

        dialogBox.setWidget(layout);
        dialogBox.setGlassEnabled(true);
        dialogBox.setAnimationEnabled(false);

        cancelButton.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                dialogBox.hide();
                callback.onFailure(null);
            }
        });

        confirmButton.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                if (validator.test(inputBox.getText())) {
                    dialogBox.hide();
                    callback.onSuccess(inputBox.getText());
                }
            }
        });

        inputBox.addValueChangeHandler(new ValueChangeHandler<String>() {
            @Override
            public void onValueChange(ValueChangeEvent<String> event) {
                boolean isValid = validator.test(event.getValue());
                confirmButton.setEnabled(isValid);
                if (isValid) {
                    inputBox.removeStyleName("error");
                } else {
                    inputBox.addStyleName("error");
                }
            }
        });

        inputBox.addKeyPressHandler(new KeyPressHandler() {
            @Override
            public void onKeyPress(KeyPressEvent event) {
                TextBox box = (TextBox) event.getSource();
                confirmButton.setEnabled(validator.test(box.getText()));
            }
        });

        inputBox.addKeyDownHandler(new KeyDownHandler() {
            @Override
            public void onKeyDown(KeyDownEvent event) {
                TextBox box = (TextBox) event.getSource();
                confirmButton.setEnabled(validator.test(box.getText()));
            }
        });

        inputBox.addKeyUpHandler(new KeyUpHandler() {
            @Override
            public void onKeyUp(KeyUpEvent event) {
                if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
                    if (validator.test(inputBox.getText())) {
                        dialogBox.hide();
                        callback.onSuccess(inputBox.getText());
                    }
                } else {
                    TextBox box = (TextBox) event.getSource();
                    confirmButton.setEnabled(validator.test(box.getText()));
                }
            }
        });

        dialogBox.addStyleName("wui-dialog-prompt");
        layout.addStyleName("wui-dialog-layout");
        inputBox.addStyleName("form-textbox wui-dialog-message");
        cancelButton.addStyleName("btn btn-link");
        confirmButton.addStyleName("pull-right btn btn-play");

        dialogBox.center();
        dialogBox.show();
        inputBox.setFocus(true);
    }

    public static void showPromptDialogSuggest(String title, String message, String placeHolder,
            String cancelButtonText, String confirmButtonText, SearchSuggestBox<?> suggestBox,
            final AsyncCallback<String> callback) {
        final DialogBox dialogBox = new DialogBox(false, true);
        dialogBox.setText(title);

        final FlowPanel layout = new FlowPanel();

        if (message != null) {
            final Label messageLabel = new Label(message);
            layout.add(messageLabel);
            messageLabel.addStyleName("wui-dialog-message");
        }

        final SearchSuggestBox<?> inputBox = suggestBox;

        if (placeHolder != null) {
            inputBox.getElement().setPropertyString("placeholder", placeHolder);
        }

        final Button cancelButton = new Button(cancelButtonText);
        final Button confirmButton = new Button(confirmButtonText);

        layout.add(inputBox);
        layout.add(cancelButton);
        layout.add(confirmButton);

        dialogBox.setWidget(layout);

        dialogBox.setGlassEnabled(true);
        dialogBox.setAnimationEnabled(false);

        cancelButton.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                dialogBox.hide();
                callback.onFailure(null);
            }
        });

        confirmButton.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                dialogBox.hide();
                callback.onSuccess(inputBox.getValue());
            }
        });

        dialogBox.addStyleName("wui-dialog-prompt");
        layout.addStyleName("wui-dialog-layout");
        inputBox.addStyleName("form-textbox wui-dialog-message");
        cancelButton.addStyleName("btn btn-link");
        confirmButton.addStyleName("pull-right btn btn-play");

        dialogBox.center();
        dialogBox.show();
        inputBox.setFocus(true);
    }

    public static DialogBox showLoadingModel() {
        final DialogBox dialogBox = new DialogBox(false, true);
        dialogBox.setText("Loading...");

        FlowPanel layout = new FlowPanel();
        Label messageLabel = new Label(messages.executingTaskMessage());

        layout.add(messageLabel);

        dialogBox.setWidget(layout);

        dialogBox.setGlassEnabled(true);
        dialogBox.setAnimationEnabled(false);

        dialogBox.addStyleName("wui-dialog-information");
        layout.addStyleName("wui-dialog-layout");
        messageLabel.addStyleName("wui-dialog-message");

        dialogBox.center();
        dialogBox.show();
        return dialogBox;
    }

}