package org.ovirt.engine.ui.common.widget.editor.generic; import org.gwtbootstrap3.client.ui.constants.ColumnSize; import org.ovirt.engine.ui.common.CommonApplicationConstants; import org.ovirt.engine.ui.common.CommonApplicationResources; import org.ovirt.engine.ui.common.gin.AssetProvider; import org.ovirt.engine.ui.common.widget.HasDetachable; import org.ovirt.engine.ui.common.widget.tooltip.WidgetTooltip; import com.google.gwt.dom.client.Style.Display; import com.google.gwt.resources.client.CssResource; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.UIObject; public abstract class BaseEntityModelDetachableWidget extends Composite implements HasDetachable { private static final CommonApplicationResources resources = AssetProvider.getResources(); private static final CommonApplicationConstants constants = AssetProvider.getConstants(); @UiField WidgetTooltip tooltip; Image attachedSeparatedImage; interface BaseStyle extends CssResource { String contentWidgetWithDetachable(); String contentWidgetWithoutDetachable(); } private BaseStyle style; private UIObject decoratedWidget; // can not be as a constructor because needs to be called after the widgets get bind properly in children protected void initialize(UIObject decoratedWidget, Image attachedSeparatedImage, BaseStyle style) { this.decoratedWidget = decoratedWidget; this.attachedSeparatedImage = attachedSeparatedImage; this.tooltip.setWidget(attachedSeparatedImage); this.style = style; setAttached(true); // by default it is a regular widget - needs to be made detachable explicitly setDetachableIconVisible(false); } public void setDetachableIconVisible(boolean visible) { if (visible) { attachedSeparatedImage.getElement().getStyle().setDisplay(Display.INLINE); } else { attachedSeparatedImage.getElement().getStyle().setDisplay(Display.NONE); } changeWidgetStyle(decoratedWidget, visible); } public abstract void setLabelColSize(ColumnSize size); public abstract void setWidgetColSize(ColumnSize size); public abstract void setUsePatternFly(boolean use); protected void changeWidgetStyle(UIObject widget, boolean detachableIconVisible) { if (detachableIconVisible) { widget.removeStyleName(style.contentWidgetWithoutDetachable()); widget.addStyleName(style.contentWidgetWithDetachable()); } else { widget.removeStyleName(style.contentWidgetWithDetachable()); widget.addStyleName(style.contentWidgetWithoutDetachable()); } } @Override public void setAttached(boolean attached) { attachedSeparatedImage.setResource(attached ? resources.joinedIcon() : resources.separatedIcon()); tooltip.setText(attached ? constants.attachedToInstanceType() : constants.detachedFromInstanceType()); } }