/** * 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; } }