/* * Copyright 2011 SWM Services GmbH. * * 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 de.swm.commons.mobile.client.widgets; import com.google.gwt.event.dom.client.*; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.uibinder.client.UiConstructor; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HasText; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; import de.swm.commons.mobile.client.SWMMobile; import de.swm.commons.mobile.client.event.*; import de.swm.commons.mobile.client.event.DragEvent; /** * Test box with an image decoration (right corner) */ public class DecoratedTextBox extends Composite implements DragEventsHandler, HasClickHandlers, HasText, HasFocusHandlers, HasBlurHandlers, HasIconClickHandlers { private final TextBox textBox; private Label captionLabel; private final Image img; private final ImageResource icon1, icon2; /** * Default constructor. * * @param caption cation text * @param iconNormal right icon * @param iconSelected right icon selected */ @UiConstructor public DecoratedTextBox(String caption, ImageResource iconNormal, ImageResource iconSelected) { HorizontalPanel hPanel = new HorizontalPanel(); hPanel.setSecondaryStyle(SWMMobile.getTheme().getMGWTCssBundle().getTextBoxCss().decoratedTextBoxHPanel()); textBox = new TextBox(); textBox.setSecondaryStyle(SWMMobile.getTheme().getMGWTCssBundle().getTextBoxCss().decoratedTextBoxInput()); hPanel.add(textBox); this.icon1 = iconNormal; this.icon2 = iconSelected; img = new Image(iconNormal); img.setStyleName(SWMMobile.getTheme().getMGWTCssBundle().getTextBoxCss().decoratedTextBoxIcon(), true); hPanel.add(img); img.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { fireEvent(new IconClickEvent(event)); } }); if ((caption != null) && (!caption.equals(""))) { VerticalPanel vPanel = new VerticalPanel(); captionLabel = new Label(caption); captionLabel.setStyleName(SWMMobile.getTheme().getMGWTCssBundle().getTextBoxCss().decoratedTextBoxCaption()); vPanel.add(captionLabel); vPanel.add(hPanel); vPanel.setSecondaryStyle(SWMMobile.getTheme().getMGWTCssBundle().getTextBoxCss().decoratedTextBoxVPanel()); initWidget(vPanel); } else { initWidget(hPanel); } } /** * Sets the focus. * * @param hasFocus focus */ public void setFocus(boolean hasFocus) { this.textBox.setFocus(hasFocus); } /** * Enables / Disables the widget. * * @param enabled . */ public void setEnabled(boolean enabled) { this.textBox.setEnabled(enabled); } @Override public void onLoad() { super.onLoad(); DragController.get().addDragEventsHandler(this); } @Override public void onUnload() { DragController.get().removeDragEventsHandler(this); } @Override public void onDragStart(DragEvent e) { if (icon2 != null) { img.setResource(icon2); } e.stopPropagation(); } @Override public void onDragMove(DragEvent e) { if (icon2 != null) { img.setResource(icon2); } // do not suppress click, otherwise button does not react when small movements occured // DragController.get().suppressNextClick(); e.stopPropagation(); } @Override public void onDragEnd(DragEvent e) { img.setResource(icon1); e.stopPropagation(); } @Override public HandlerRegistration addClickHandler(ClickHandler handler) { return textBox.addClickHandler(handler); } public HandlerRegistration addIconClickHandler(IconClickHandler handler) { return addHandler(handler, IconClickEvent.getType()); } @Override public HandlerRegistration addFocusHandler(FocusHandler handler) { return textBox.addFocusHandler(handler); } @Override public HandlerRegistration addBlurHandler(BlurHandler handler) { return textBox.addBlurHandler(handler); } @Override public String getText() { return textBox.getText(); } @Override public void setText(String text) { textBox.setText(text); } public String getCaption() { return (captionLabel != null) ? captionLabel.getText() : null; } public void setCaption(String caption) { if (captionLabel != null) { captionLabel.setText(caption); } } public TextBox getTextBox() { return textBox; } public void setIconVisible(boolean visible) { img.setVisible(visible); } }