package org.ovirt.engine.ui.common.widget.editor.generic; import java.util.List; import org.gwtbootstrap3.client.ui.FormLabel; import org.gwtbootstrap3.client.ui.constants.ColumnSize; import org.gwtbootstrap3.client.ui.constants.Styles; import org.ovirt.engine.ui.common.widget.AbstractValidatedWidgetWithLabel; import org.ovirt.engine.ui.common.widget.HasLabel; import org.ovirt.engine.ui.common.widget.HasValidation; import com.google.gwt.core.client.GWT; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HasEnabled; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.UIObject; import com.google.gwt.user.client.ui.Widget; /** * Takes an AbstractValidatedWidgetWithLabel and decorates it with a detachable icon */ public class EntityModelDetachableWidgetWithLabel extends BaseEntityModelDetachableWidget implements HasLabel, HasEnabled, HasValidation { interface WidgetUiBinder extends UiBinder<Widget, EntityModelDetachableWidgetWithLabel> { WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class); } interface Style extends BaseStyle { String labelEnabled(); String labelDisabled(); String wrapper(); String contentWrapper(); String contentWidgetContainer(); } @UiField FormLabel label; @UiField(provided = true) FlowPanel contentWidgetContainer; @UiField Image attachedSeparatedImage; @UiField FlowPanel contentWrapper; @UiField Style style; @UiField FlowPanel imageContainer; @UiField FlowPanel wrapperPanel; SimplePanel sizeContainer; private AbstractValidatedWidgetWithLabel<?, ?> decorated; private boolean usePatternFly = false; public EntityModelDetachableWidgetWithLabel(AbstractValidatedWidgetWithLabel<?, ?> decorated) { this.decorated = decorated; contentWidgetContainer = decorated.getContentWidgetContainer(); initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this)); initialize(contentWidgetContainer, attachedSeparatedImage, style); } @Override public String getLabel() { return label.getText(); } @Override public void setLabel(String label) { this.label.setText(label); } @Override public void setLabelColSize(ColumnSize size) { label.addStyleName(size.getCssName()); } public void setWidgetColSize(ColumnSize size) { if (sizeContainer != null) { sizeContainer.addStyleName(size.getCssName()); } } @Override public void setUsePatternFly(boolean use) { usePatternFly = use; decorated.setUsePatternFly(use); if (use) { wrapperPanel.remove(contentWidgetContainer); sizeContainer = new SimplePanel(); sizeContainer.setWidget(contentWidgetContainer); wrapperPanel.insert(sizeContainer, 2); //The label and the chain icon come first wrapperPanel.removeStyleName(style.wrapper()); wrapperPanel.addStyleName(Styles.FORM_GROUP); contentWrapper.removeStyleName(style.contentWrapper()); contentWidgetContainer.removeStyleName(style.contentWidgetContainer()); contentWidgetContainer.removeStyleName(style.contentWidgetWithDetachable()); contentWidgetContainer.removeStyleName(style.contentWidgetWithoutDetachable()); label.getElement().replaceClassName(style.labelDisabled(), style.labelEnabled()); imageContainer.addStyleName(ColumnSize.LG_1.getCssName()); } } @Override public boolean isEnabled() { return decorated.isEnabled(); } @Override public void setEnabled(boolean enabled) { decorated.setEnabled(enabled); if (enabled) { label.getElement().replaceClassName(style.labelDisabled(), style.labelEnabled()); } else { label.getElement().replaceClassName(style.labelEnabled(), style.labelDisabled()); } } protected void changeWidgetStyle(UIObject widget, boolean detachableIconVisible) { if (!usePatternFly) { super.changeWidgetStyle(widget, detachableIconVisible); } } public void addContentWrapperStypeName(String styleName) { contentWrapper.addStyleName(styleName); } @Override public void markAsValid() { decorated.markAsValid(); } @Override public void markAsInvalid(List<String> validationHints) { decorated.markAsInvalid(validationHints); } @Override public boolean isValid() { return decorated.isValid(); } }