/* * * Copyright (C) 2007-2015 Licensed to the Comunes Association (CA) under * one or more contributor license agreements (see COPYRIGHT for details). * The CA licenses this file to you under the GNU Affero General Public * License version 3, (the "License"); you may not use this file except in * compliance with the License. This file is part of kune. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ package org.ourproject.massmob.client.actions; import cc.kune.common.client.ui.dialogs.BasicTopDialog; import cc.kune.common.shared.utils.TextUtils; import com.extjs.gxt.ui.client.event.Events; import com.extjs.gxt.ui.client.event.FieldEvent; import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.widget.form.TextArea; import com.extjs.gxt.ui.client.widget.form.TextField; import com.google.gwt.i18n.client.HasDirection.Direction; import com.google.gwt.user.client.ui.Label; // TODO: Auto-generated Javadoc /** * The Class PromptTopDialog shows a top dialog with some textfield and two * buttons. * * @author vjrj@ourproject.org (Vicente J. Ruiz Jurado) */ public class PromptTopDialog extends BasicTopDialog { /** * The Class Builder. * * @author vjrj@ourproject.org (Vicente J. Ruiz Jurado) */ public static class Builder extends BasicTopDialog.Builder { /** The allow blank. */ private boolean allowBlank = false; /** The empty text. */ private String emptyText; /** The max length. */ private int maxLength = 0; /** The max length text. */ private String maxLengthText; /** The min length. */ private int minLength = 0; /** The min length text. */ private String minLengthText; /** The on enter. */ private final OnEnter onEnter; /** The prompt lines. */ private int promptLines = 1; /** The prompt text. */ private String promptText; /** The field width. */ private int promptWidth; /** The regex. */ private String regex; /** The regex text. */ private String regexText; /** The textbox id. */ private String textboxId; private String textFieldStyle; private int textFieldWidth; /** * Instantiates a new builder. * * @param dialogId * the dialog id (used for debuggin) * @param title * the title * @param autohide * the autohide * @param modal * the modal * @param direction * the direction * @param onEnter * the on enter */ public Builder(final String dialogId, final String title, final boolean autohide, final boolean modal, final Direction direction, final OnEnter onEnter) { super(dialogId, autohide, modal, direction); this.onEnter = onEnter; super.title(title); super.tabIndexStart(1); } /** * Allow blank. * * @param allowBlank * the allow blank * @return the builder */ public Builder allowBlank(final boolean allowBlank) { this.allowBlank = allowBlank; return this; } /* * (non-Javadoc) * * @see cc.kune.common.client.ui.dialogs.BasicTopDialog.Builder#build() */ @Override public PromptTopDialog build() { final PromptTopDialog dialog = new PromptTopDialog(this); return dialog; } /** * Empty text showed when the prompt field is empty. * * @param emptyText * the empty text * @return the builder */ public Builder emptyTextField(final String emptyText) { this.emptyText = emptyText; return this; } /** * Max length. * * @param maxLength * the max length * @return the builder */ public Builder maxLength(final int maxLength) { this.maxLength = maxLength; return this; } /** * Max length text. * * @param maxLengthText * the max length text * @return the builder */ public Builder maxLengthText(final String maxLengthText) { this.maxLengthText = maxLengthText; return this; } /** * Min length. * * @param minLength * the min length * @return the builder */ public Builder minLength(final int minLength) { this.minLength = minLength; return this; } /** * Min length text. * * @param minLengthText * the min length text * @return the builder */ public Builder minLengthText(final String minLengthText) { this.minLengthText = minLengthText; return this; } /** * The number of lines that the prompt has. If > 1 will be a textarea, if * not a textfield * * @param promptLines * the prompt lines * @return the builder */ public Builder promptLines(final int promptLines) { this.promptLines = promptLines; return this; } /** * Prompt text showed just before the text field. * * @param promptText * the prompt text * @return the builder */ public Builder promptText(final String promptText) { this.promptText = promptText; return this; } /** * Field width. * * @param promptWidth * the field width * @return the builder */ public Builder promptWidth(final int promptWidth) { this.promptWidth = promptWidth; return this; } /** * Regex. * * @param regex * the regex * @return the builder */ public Builder regex(final String regex) { this.regex = regex; return this; } /** * Regex text. * * @param regexText * the regex text * @return the builder */ public Builder regexText(final String regexText) { this.regexText = regexText; return this; } /** * Textbox id. * * @param textboxId * the textbox id * @return the builder */ public Builder textboxId(final String textboxId) { this.textboxId = textboxId; return this; } public Builder textFieldWidth(final int width) { this.textFieldWidth = width; return this; } public void withTextFieldStyle(String textFieldStyle) { this.textFieldStyle = textFieldStyle; } } /** * The Interface OnEnter. * * @author vjrj@ourproject.org (Vicente J. Ruiz Jurado) */ public interface OnEnter { /** * On enter what to do. */ void onEnter(); } /** The prompt label. */ private final Label promptLabel; /** The text field of the Prompt. */ private TextField<String> textField; /** * Instantiates a new prompt top dialog. * * @param builder * the builder */ protected PromptTopDialog(final Builder builder) { super(builder); promptLabel = new Label(); promptLabel.addStyleName("kune-Margin-Medium-b"); if (builder.promptLines > 1) { textField = new TextArea(); textField.setHeight(20 * builder.promptLines); } else { textField = new TextField<String>(); } if (TextUtils.notEmpty(builder.textFieldStyle)) { textField.addStyleName(builder.textFieldStyle); } textField.setRegex(builder.regex); textField.getMessages().setRegexText(builder.regexText); textField.getMessages().setMinLengthText(builder.minLengthText); textField.getMessages().setMaxLengthText(builder.maxLengthText); textField.setTabIndex(1); textField.setId(builder.textboxId); if (TextUtils.notEmpty(builder.emptyText)) { textField.setEmptyText(builder.emptyText); } if (builder.textFieldWidth != 0) { textField.setWidth(builder.textFieldWidth); } if (builder.minLength != 0) { textField.setMinLength(builder.minLength); } if (builder.maxLength != 0) { textField.setMaxLength(builder.maxLength); } if (builder.promptWidth != 0) { textField.setWidth(builder.promptWidth); } textField.setAllowBlank(builder.allowBlank); textField.addListener(Events.OnKeyPress, new Listener<FieldEvent>() { @Override public void handleEvent(final FieldEvent fe) { if (fe.getEvent().getKeyCode() == 13) { builder.onEnter.onEnter(); } } }); if (TextUtils.notEmpty(builder.promptText)) { promptLabel.setText(builder.promptText); } super.getInnerPanel().add(promptLabel); super.getInnerPanel().add(textField); } public void addStyleToTextField(final String style) { textField.addStyleName(style); } /** * Clear text field value. */ public void clearTextFieldValue() { textField.reset(); } /** * Focus on text box. */ public void focusOnTextBox() { textField.focus(); } /** * Gets the text field value. * * @return the text field value */ public String getTextFieldValue() { return textField.getValue(); } /** * Checks if is valid. * * @return true, if is valid */ public boolean isValid() { return textField.isValid(); } /** * Sets the prompt label. * * @param promptText * the new prompt label */ public void setPromptLabel(final String promptText) { promptLabel.setText(promptText); } /** * Sets the text field focus. * */ public void setTextFieldFocus() { textField.focus(); } public void setTextFieldFocusOnClick() { textField.addListener(Events.OnClick, new Listener<FieldEvent>() { @Override public void handleEvent(final FieldEvent fe) { textField.focus(); } }); } public void setTextFieldReadOnly(final boolean readonly) { textField.setReadOnly(readonly); } /** * Sets the text field select on focus. * * @param selectOnFocus * the new text field select on focus */ public void setTextFieldSelectOnFocus(final boolean selectOnFocus) { textField.setSelectOnFocus(selectOnFocus); } /** * Sets the text field value. * * @param text * the new text field value */ public void setTextFieldValue(final String text) { textField.setRawValue(text); } }