/** * Copyright 2008-2016 Qualogy Solutions B.V. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.qualogy.qafe.gwt.client.component; import com.google.gwt.event.dom.client.BlurEvent; import com.google.gwt.event.dom.client.BlurHandler; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.FocusHandler; import com.google.gwt.event.dom.client.HasAllFocusHandlers; import com.google.gwt.event.dom.client.HasAllKeyHandlers; import com.google.gwt.event.dom.client.HasClickHandlers; import com.google.gwt.event.dom.client.KeyDownHandler; import com.google.gwt.event.dom.client.KeyPressHandler; import com.google.gwt.event.dom.client.KeyUpHandler; import com.google.gwt.event.logical.shared.HasValueChangeHandlers; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.user.client.EventListener; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.Focusable; import com.google.gwt.user.client.ui.HasName; import com.google.gwt.user.client.ui.HasText; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.TextBoxBase; import com.google.gwt.user.client.ui.UIObject; import com.google.gwt.user.client.ui.Widget; import com.qualogy.qafe.gwt.client.context.ClientApplicationContext; import com.qualogy.qafe.gwt.client.ui.renderer.RendererHelper; import com.qualogy.qafe.gwt.client.vo.ui.TextFieldGVO; /** * This class is a SimplePanel, but implements all the interfaces of the * TextBox class,so that it can be used a special kind of textbox. * @author rjankie * */ public class LabeledTextFieldWidget extends SimplePanel implements HasPrompt, TitledComponent, EventListener, Focusable, HasName, HasText, HasEditable, HasValueChangeHandlers, HasClickHandlers, HasAllFocusHandlers, HasAllKeyHandlers, HasRequiredValidationMessage { private Label label = new Label(); private UIObject textbox ; private final static String ORIENTATION_UPDOWN="updown"; private final static String ORIENTATION_LEFTRIGHT="leftright"; public LabeledTextFieldWidget(TextFieldGVO gvo, String labelText, String orientation,String type,String format){ if (type != null) { if (TextFieldGVO.TYPE_DATE.equals(type)) { textbox = new QDatePicker(format); } else if(TextFieldGVO.TYPE_SPINNER.equals(type)){ int minValue = 0; int maxValue = 20; if (gvo.getMinValue() != null) { minValue = Integer.parseInt(gvo.getMinValue()); } if (gvo.getMaxValue() != null) { maxValue = Integer.parseInt(gvo.getMaxValue()); } long initialValue = Long.parseLong(minValue + ""); textbox = new QValueSpinner(initialValue, minValue, maxValue); } else { textbox = new QTextField(gvo); handleTypeAttribute(textbox,gvo.getRegExp(),gvo.getValidationMessage(), gvo.getValidationTitle()); } } else { textbox = new QTextField(gvo); } label.setText(labelText); String height = TextFieldGVO.DEFAULT_HEIGHT; String width = TextFieldGVO.DEFAULT_WIDTH; if (gvo.getHeight()!=null) { height = gvo.getHeight(); } if (gvo.getWidth()!=null) { width = gvo.getWidth(); } FlexTable flexTable = new FlexTable(); RendererHelper.setStyleForElement(textbox.getElement(),"width", width); RendererHelper.setStyleForElement(textbox.getElement(),"height", height); RendererHelper.setStyleForElement(label.getElement(),"width", "auto"); if (textbox instanceof QValueSpinner) { TextBox spinnerTextBox = ((QValueSpinner)textbox).getTextBox(); //spinnerTextBox.setStylePrimaryName(gvo.getStyleClassName()); flexTable.setWidget(0, 1, (Widget)textbox); } else { if (ORIENTATION_LEFTRIGHT.equals(orientation)) { RendererHelper.setStyleForElement(textbox.getElement(),"marginRight", "20px"); flexTable.setWidget(0, 1, (Widget)textbox); } else if (ORIENTATION_UPDOWN.equals(orientation)) { RendererHelper.setStyleForElement(textbox.getElement(),"marginTop", "20px"); flexTable.setWidget(1, 0, (Widget)textbox); } } flexTable.setWidget(0, 0, label); add(flexTable); } protected void handleTypeAttribute(UIObject uiObject, final String regExp, final String validationMessage, final String validationTitle) { if (uiObject instanceof TextBox) { TextBox textBox = (TextBox)uiObject; textBox.addBlurHandler(new BlurHandler(){ public void onBlur(BlurEvent event) { String textValue = ((TextBoxBase)event.getSource()).getText(); if ((textValue != null) && (regExp != null)) { if (textValue.replaceFirst(regExp, "").length() > 0) { if (validationTitle != null) { ClientApplicationContext.getInstance().log(validationTitle, validationMessage,true); } else { ClientApplicationContext.getInstance().log("Validation error", validationMessage,true); } } } } }); } } public String getText() { if (textbox instanceof HasText) { return ((HasText)textbox).getText(); } if (textbox instanceof QValueSpinner) { return ((QValueSpinner)textbox).getTextBox().getText(); } return null; } public void setText(String text) { if (textbox instanceof HasText) { ((HasText)textbox).setText(text); } } public Label getLabel() { return label; } public void setLabel(Label label) { this.label = label; } public UIObject getTextbox() { return textbox; } public void setTextbox(TextBox textbox) { this.textbox = textbox; } public int getTabIndex() { if (textbox instanceof Focusable) { return ((Focusable)textbox).getTabIndex(); } return 0; } public void setAccessKey(char arg0) { if (textbox instanceof Focusable) { ((Focusable)textbox).setAccessKey(arg0); } } public void setFocus(boolean arg0) { if (textbox instanceof Focusable) { ((Focusable)textbox).setFocus(arg0); } } public void setTabIndex(int arg0) { if (textbox instanceof Focusable) { ((Focusable)textbox).setTabIndex(arg0); } } public String getName() { if (textbox instanceof HasName) { return ((HasName)textbox).getName(); } return null; } public void setName(String arg0) { if (textbox instanceof HasName) { ((HasName)textbox).setName(arg0); } } public void setMaxLength(int length) { if (textbox instanceof TextBox){ ((TextBox)textbox).setMaxLength(length); } } public boolean isEditable() { if (textbox instanceof HasEditable) { HasEditable hasEditable = (HasEditable)textbox; return hasEditable.isEditable(); } return false; } public void setEditable(boolean editable) { if (textbox instanceof HasEditable) { HasEditable hasEditable = (HasEditable)textbox; hasEditable.setEditable(editable); } } public UIObject getDataComponent() { return textbox; } public UIObject getTitleComponent() { return label; } public String getPrompt() { return label.getText(); } public void setPrompt(String prompt) { label.setText(prompt); } public HandlerRegistration addValueChangeHandler(ValueChangeHandler handler) { if (textbox instanceof HasValueChangeHandlers) { return ((HasValueChangeHandlers)textbox).addValueChangeHandler(handler); } return null; } public HandlerRegistration addClickHandler(ClickHandler handler) { if (textbox instanceof HasClickHandlers) { return ((HasClickHandlers)textbox).addClickHandler(handler); } return null; } public HandlerRegistration addFocusHandler(FocusHandler handler) { if (textbox instanceof HasAllFocusHandlers){ return ((HasAllFocusHandlers)textbox).addFocusHandler(handler); } return null; } public HandlerRegistration addBlurHandler(BlurHandler handler) { if (textbox instanceof HasAllFocusHandlers){ return ((HasAllFocusHandlers)textbox).addBlurHandler(handler); } return null; } public HandlerRegistration addKeyUpHandler(KeyUpHandler handler) { if (textbox instanceof HasAllKeyHandlers){ return ((HasAllKeyHandlers)textbox).addKeyUpHandler(handler); } return null; } public HandlerRegistration addKeyDownHandler(KeyDownHandler handler) { if (textbox instanceof HasAllKeyHandlers){ return ((HasAllKeyHandlers)textbox).addKeyDownHandler(handler); } return null; } public HandlerRegistration addKeyPressHandler(KeyPressHandler handler) { if (textbox instanceof HasAllKeyHandlers){ return ((HasAllKeyHandlers)textbox).addKeyPressHandler(handler); } return null; } @Override public void addStyleName(String style) { if (getTextbox() != null) { getTextbox().setStyleName(getTextbox().getElement(), style, true); } else { super.removeStyleName(style); } } @Override public void removeStyleName(String style) { if (getTextbox() != null) { getTextbox().setStyleName(getTextbox().getElement(), style, false); } else { super.removeStyleName(style); } } public String getRequiredValidationMessage() { if (textbox instanceof HasRequiredValidationMessage){ return ((HasRequiredValidationMessage) textbox).getRequiredValidationMessage(); } return null; } public void setRequiredValidationMessage(String message) { if (textbox instanceof HasRequiredValidationMessage){ ((HasRequiredValidationMessage) textbox).setRequiredValidationMessage(message); } } public String getRequiredValidationTitle() { if (textbox instanceof HasRequiredValidationMessage){ return ((HasRequiredValidationMessage) textbox).getRequiredValidationTitle(); } return null; } public void setRequiredValidationTitle(String title) { if (textbox instanceof HasRequiredValidationMessage){ ((HasRequiredValidationMessage) textbox).setRequiredValidationTitle(title); } } }