package org.ovirt.engine.ui.common.widget.editor.generic;
import static com.google.gwt.dom.client.Style.Unit;
import java.util.List;
import org.gwtbootstrap3.client.ui.constants.ColumnSize;
import org.ovirt.engine.ui.common.widget.AbstractValidatedWidgetWithLabel;
import org.ovirt.engine.ui.common.widget.Align;
import org.ovirt.engine.ui.common.widget.HasValidation;
import org.ovirt.engine.ui.common.widget.PatternFlyCompatible;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Float;
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.HTMLPanel;
import com.google.gwt.user.client.ui.HasEnabled;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Widget;
/**
* Takes a AbstractValidatedWidgetWithLabel, decorates it with the detachable icon but does not render it's label
*/
public class EntityModelDetachableWidget extends BaseEntityModelDetachableWidget implements HasEnabled, HasValidation,
PatternFlyCompatible {
interface WidgetUiBinder extends UiBinder<Widget, EntityModelDetachableWidget> {
WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class);
}
interface Style extends BaseStyle {
String contentWrapperImageOnRight();
String contentWrapper();
String wrapper();
String image();
String contentWidgetContainer();
}
@UiField
Image attachedSeparatedImage;
@UiField(provided = true)
FlowPanel contentWidgetContainer;
private AbstractValidatedWidgetWithLabel<?, ?> decorated;
@UiField
FlowPanel contentWrapper;
@UiField
Style style;
@UiField
HTMLPanel wrapperPanel;
@UiField
FlowPanel imageWrapper;
public EntityModelDetachableWidget(AbstractValidatedWidgetWithLabel<?, ?> decorated, Align attachedImageAlign) {
this.decorated = decorated;
this.contentWidgetContainer = decorated.getContentWidgetContainer();
initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this));
setupAlign(attachedImageAlign);
initialize(contentWidgetContainer, attachedSeparatedImage, style);
}
public void setupAlign(Align attachedImageAlign) {
if (attachedImageAlign == Align.IGNORE) {
return;
}
setupContentWidgetContainerLayout(attachedImageAlign);
setupContentWrapper(attachedImageAlign);
}
public void setupContentWidgetContainerLayout(Align attachedImageAlign) {
if (attachedImageAlign == Align.LEFT) {
contentWidgetContainer.getElement().getStyle().setFloat(Float.RIGHT);
} else if (attachedImageAlign == Align.RIGHT) {
contentWidgetContainer.getElement().getStyle().setFloat(Float.LEFT);
contentWidgetContainer.getElement().getStyle().setWidth(AbstractValidatedWidgetWithLabel.CONTENT_WIDTH_LEGACY, Unit.PX);
}
}
public void setupContentWrapper(Align attachedImageAlign) {
if (attachedImageAlign == Align.RIGHT) {
contentWrapper.removeStyleName(style.contentWrapper());
contentWrapper.addStyleName(style.contentWrapperImageOnRight());
}
}
public EntityModelDetachableWidget(AbstractValidatedWidgetWithLabel<?, ?> decorated) {
this(decorated, Align.LEFT);
}
@Override
public boolean isEnabled() {
return decorated.isEnabled();
}
@Override
public void setEnabled(boolean enabled) {
decorated.setEnabled(enabled);
}
public void setContentWidgetContainerStyle(String style) {
contentWidgetContainer.addStyleName(style);
}
public void setContentWrapperStypeName(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();
}
@Override
public void setLabelColSize(ColumnSize size) {
decorated.setLabelColSize(size);
}
public void setWidgetColSize(ColumnSize size) {
decorated.setWidgetColSize(size);
}
@Override
public void setUsePatternFly(boolean use) {
decorated.setUsePatternFly(use);
if (use) {
wrapperPanel.removeStyleName(style.wrapper());
contentWrapper.removeStyleName(style.contentWrapper());
imageWrapper.removeStyleName(style.image());
contentWidgetContainer.removeStyleName(style.contentWidgetContainer());
}
}
}