package org.ovirt.engine.ui.common.widget.dialog;
import org.gwtbootstrap3.client.ui.constants.Placement;
import org.ovirt.engine.ui.common.widget.tooltip.TooltipWidth;
import org.ovirt.engine.ui.common.widget.tooltip.WidgetTooltip;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.user.client.ui.FocusPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Widget;
public class TooltippedIcon extends FocusPanel {
private Image image;
private final WidgetTooltip tooltip;
private boolean useItalic = true;
public TooltippedIcon(SafeHtml text, final ImageResource mouseOutImage, final ImageResource mouseInImage) {
super();
image = new Image(mouseOutImage);
tooltip = createTooltip(image);
setText(text);
addMouseOutHandler(event -> image.setUrl(mouseOutImage.getSafeUri()));
addMouseOverHandler(event -> image.setUrl(mouseInImage.getSafeUri()));
}
public TooltippedIcon(SafeHtml text, Widget icon) {
super();
tooltip = createTooltip(icon);
setText(text);
}
protected Widget getTooltipWidget() {
return tooltip.getWidget();
}
private WidgetTooltip createTooltip(Widget widget) {
WidgetTooltip tooltip = new WidgetTooltip(widget);
setWidget(tooltip);
return tooltip;
}
public void setText(SafeHtml text) {
// "text" can actually contain HTML markup.
tooltip.setHtml(useItalic ? wrapItalic(text) : text);
}
public void setTooltipPlacement(Placement placement) {
tooltip.setPlacement(placement);
}
/**
* Return the tooltip text, wrapped in italic if there wasn't already italic detected.
*/
private SafeHtml wrapItalic(SafeHtml text) {
if (text.asString().startsWith("<i>")) { //$NON-NLS-1$
// already wrapped in italic
return text;
}
return new SafeHtmlBuilder()
.appendHtmlConstant("<i>") //$NON-NLS-1$
.append(text)
.appendHtmlConstant("</i>") //$NON-NLS-1$
.toSafeHtml();
}
public void setTooltipMaxWidth(TooltipWidth width) {
tooltip.setMaxWidth(width);
}
}