package org.sigmah.shared.dto.element; /* * #%L * Sigmah * %% * Copyright (C) 2010 - 2016 URD * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU 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 General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ import com.extjs.gxt.ui.client.core.El; import com.extjs.gxt.ui.client.event.BaseEvent; import com.extjs.gxt.ui.client.event.EventType; import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.widget.form.AdapterField; import com.extjs.gxt.ui.client.widget.form.Field; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Grid; import com.google.gwt.user.client.ui.HasVerticalAlignment; import org.sigmah.client.ui.res.icon.IconImageBundle; import org.sigmah.client.ui.widget.button.Button; import org.sigmah.client.ui.widget.form.Forms; /** * Field that encapsulates an other field and adds an history button next to it. * * @param <V> Type of the value of the encapsulated field. * * @author Raphaƫl Calabro (rcalabro@ideia.fr) */ public class HistoryWrapper<V> extends AdapterField { private static final int BUTTON_WIDTH = 26; /** * Wrapped field. */ private final Field<V> field; /** * History button. */ private final Button historyButton; /** * Wrap the given field. * * @param field Field to wrap. */ public HistoryWrapper(Field<V> field) { super(new FlowPanel()); this.field = field; final Grid grid = new Grid(1, 2); ((FlowPanel)getWidget()).add(grid); historyButton = Forms.button(); historyButton.setIcon(IconImageBundle.ICONS.history16()); grid.setWidget(0, 0, field); grid.setWidget(0, 1, historyButton); grid.getCellFormatter().setVerticalAlignment(0, 1, HasVerticalAlignment.ALIGN_TOP); grid.getCellFormatter().setStyleName(0, 1, "flexibility-action-iconable"); } /** * Retrieve the history button. * * @return the history button. */ public Button getHistoryButton() { return historyButton; } @Override protected void onResize(int width, int height) { super.onResize(width, height); field.setSize(width - BUTTON_WIDTH, height); } // -- // Wiring fields method to the wrapped element. // -- /** * {@inheritDoc} */ @Override public void addListener(EventType eventType, Listener<? extends BaseEvent> listener) { field.addListener(eventType, listener); } /** * {@inheritDoc} */ @Override public void removeAllListeners() { field.removeAllListeners(); } /** * {@inheritDoc} */ @Override public void removeListener(EventType eventType, Listener<? extends BaseEvent> listener) { field.removeListener(eventType, listener); } /** * {@inheritDoc} */ @Override public void setEnabled(boolean enabled) { field.setEnabled(enabled); } /** * {@inheritDoc} */ @Override public void enable() { field.enable(); } /** * {@inheritDoc} */ @Override public void disable() { field.disable(); } /** * {@inheritDoc} */ @Override public String getFieldLabel() { return field.getFieldLabel(); } @Override public void setFieldLabel(String fieldLabelHtml) { field.setFieldLabel(fieldLabelHtml); } /** * {@inheritDoc} */ @Override public String getLabelSeparator() { return field.getLabelSeparator(); } @Override public void setLabelSeparator(String labelSeparator) { field.setLabelSeparator(labelSeparator); } /** * {@inheritDoc} */ @Override public V getValue() { return field.getValue(); } @Override public void setValue(Object value) { field.setValue((V)value); } /** * {@inheritDoc} */ @Override public String getRawValue() { return field.getRawValue(); } /** * {@inheritDoc} */ @Override public boolean isDirty() { return field.isDirty(); } /** * {@inheritDoc} */ @Override public void setName(String name) { field.setName(name); } /** * {@inheritDoc} */ @Override public void clear() { field.clear(); } /** * {@inheritDoc} */ @Override public void clearInvalid() { field.clearInvalid(); } /** * {@inheritDoc} */ @Override public void clearState() { field.clearState(); } /** * {@inheritDoc} */ @Override public void focus() { field.focus(); } /** * {@inheritDoc} */ @Override public void forceInvalid(String msg) { field.forceInvalid(msg); } /** * {@inheritDoc} */ @Override public El mask(String message, String messageStyleName) { return field.mask(message, messageStyleName); } /** * {@inheritDoc} */ @Override public void unmask() { field.unmask(); } /** * {@inheritDoc} */ @Override public boolean isHideLabel() { return field.isHideLabel(); } /** * {@inheritDoc} */ @Override public void setHideLabel(boolean hideLabel) { field.setHideLabel(hideLabel); } public Field<V> getField() { return field; } }