Alexander Wels has uploaded a new change for review. Change subject: userportal, webadmin: Tooltip infrastructure ......................................................................
userportal, webadmin: Tooltip infrastructure - Added tooltip infrastructure to make it easier to add tooltips to elements that handle mouse over/out events. - Modified most elements that use 'setTitle' to set the tooltip to use the new infrastructure. Change-Id: I4fc79a6aa132c65d3050499e5f00facbb5c358d3 Signed-off-by: Alexander Wels <[email protected]> --- M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/ElementAwareDecoratedPopupPanel.java A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/TooltipPanel.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/AbstractActionButton.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/DropdownActionButton.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/SimpleActionButton.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/dialog/InfoIcon.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelTextBox.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/label/TextBoxLabelBase.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/refresh/BaseRefreshPanel.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/AbstractCellWithTooltip.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/SafeHtmlWithSafeHtmlTooltipColumn.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/StyledImageResourceCell.java M frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/basic/MainTabBasicListItemActionButton.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/label/LabelWithToolTip.java 14 files changed, 254 insertions(+), 116 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/25/27325/1 diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/ElementAwareDecoratedPopupPanel.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/ElementAwareDecoratedPopupPanel.java index 79da8a2..ba1e860 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/ElementAwareDecoratedPopupPanel.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/ElementAwareDecoratedPopupPanel.java @@ -10,6 +10,14 @@ */ public class ElementAwareDecoratedPopupPanel extends DecoratedPopupPanel { + public ElementAwareDecoratedPopupPanel() { + this(false); + } + + public ElementAwareDecoratedPopupPanel(boolean autoHide) { + super(autoHide); + } + public void showRelativeTo(final Element target) { setPopupPositionAndShow(new PositionCallback() { @Override diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/TooltipPanel.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/TooltipPanel.java new file mode 100644 index 0000000..17e8c2c --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/TooltipPanel.java @@ -0,0 +1,177 @@ +package org.ovirt.engine.ui.common.widget; + +import com.google.gwt.dom.client.BrowserEvents; +import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.NativeEvent; +import com.google.gwt.event.dom.client.HasMouseOutHandlers; +import com.google.gwt.event.dom.client.HasMouseOverHandlers; +import com.google.gwt.event.dom.client.MouseOutEvent; +import com.google.gwt.event.dom.client.MouseOutHandler; +import com.google.gwt.event.dom.client.MouseOverEvent; +import com.google.gwt.event.dom.client.MouseOverHandler; +import com.google.gwt.safehtml.shared.SafeHtml; +import com.google.gwt.user.client.Timer; +import com.google.gwt.user.client.ui.HTML; +import com.google.gwt.user.client.ui.HasHTML; +import com.google.gwt.user.client.ui.HasText; +import com.google.gwt.user.client.ui.Widget; + +/** + * @param <W> Widget that controls whether to show/hide the tool-tip panel. + */ +public class TooltipPanel<W extends Widget & HasMouseOverHandlers & HasMouseOutHandlers> + extends ElementAwareDecoratedPopupPanel { + + protected static final int TOOLTIP_DISPLAY_DELAY = 500; //Wait 500ms before displaying tooltip. + private Timer displayTooltipTimer = null; + + /** + * Constructor. + * @param autoHide Auto-hide the panel when leaving it. + * @param tooltipSource The {@code Widget} that the tool-tip should be applied to. + */ + public TooltipPanel(boolean autoHide, final W tooltipSource) { + this(autoHide); + applyTo(tooltipSource); + } + + /** + * Constructor. + * @param autoHide Auto-hide the panel when leaving it. + */ + public TooltipPanel(boolean autoHide) { + super(autoHide); + getElement().getStyle().setZIndex(1); + } + + /** + * Default constructor, auto-hide is false. + */ + public TooltipPanel() { + this(true); + } + + /** + * Set the tool-tip text, if the owner hasn't provided its own widget. If you pass null the text will be a + * blank string + * @param text The tool-tip text. + */ + public void setText(String text) { + text = text != null ? text : ""; //$NON-NLS-1$ + //If there is no widget and there is some text, add the widget. + if (getWidget() == null && isTextNotEmpty(text)) { + setWidget(new HTML()); + } else if (getWidget() != null && !isTextNotEmpty(text)) { + setWidget(null); + } + if (getWidget() instanceof HasText && isTextNotEmpty(text)) { + ((HasText) getWidget()).setText(text); + } + } + + /** + * Set the tool-tip text, if the owner hasn't provided its own widget. If you pass null the text will be a + * blank string + * @param text The tool-tip text. + */ + public void setText(SafeHtml text) { + //If there is no widget and there is some text, add the widget. + if (getWidget() == null && isTextNotEmpty(text)) { + setWidget(new HTML()); + } else if (getWidget() != null && !isTextNotEmpty(text)) { + setWidget(null); + } + if (getWidget() instanceof HasHTML) { + //If the above created the widget, then this will be executed, but it is possible for either one to not + //be true and in that case we need to drop through to the else. + if (isTextNotEmpty(text)) { + ((HasHTML) getWidget()).setHTML(text.asString()); + } + } else { + setText(text.asString()); + } + } + + /** + * Determine if the passed in {@code SafeHtml} text is not empty. + * @param text The text to check. + * @return {@code true} if the text is not empty, false otherwise. + */ + private boolean isTextNotEmpty(SafeHtml text) { + return !"".equals(text.asString()); + } + + /** + * Determine if the passed in {@code SafeHtml} text is not empty. + * @param text The text to check. + * @return {@code true} if the text is not empty, false otherwise. + */ + private boolean isTextNotEmpty(String text) { + return !"".equals(text); + } + + /** + * Apply the tool-tip panel to the supplied source. + * @param tooltipSource The {@code Widget} that the panel should be applied to. + */ + public void applyTo(final W tooltipSource) { + tooltipSource.addMouseOverHandler(new MouseOverHandler() { + @Override + public void onMouseOver(final MouseOverEvent event) { + if(getWidget() != null) { + displayTooltipTimer = new Timer() { + @Override + public void run() { + TooltipPanel.this.onTooltipSourceMouseOver(event); + TooltipPanel.this.showRelativeTo(tooltipSource); + } + }; + displayTooltipTimer.schedule(TOOLTIP_DISPLAY_DELAY); + } + } + }); + tooltipSource.addMouseOutHandler(new MouseOutHandler() { + @Override + public void onMouseOut(MouseOutEvent event) { + if (displayTooltipTimer != null) { + displayTooltipTimer.cancel(); + } + TooltipPanel.this.onTooltipSourceMouseOut(event); + TooltipPanel.this.hide(true); + } + }); + } + + /** + * Allow creators of the tool-tip panel to add extra functionality for mouse over events. + * @param event The {@code MouseOverEvent}. + */ + protected void onTooltipSourceMouseOver(MouseOverEvent event) { + // No-op, override as necessary + } + + /** + * Allow creators of the tool-tip panel to add extra functionality for mouse oout events. + * @param event The {@code MouseOutEvent}. + */ + protected void onTooltipSourceMouseOut(MouseOutEvent event) { + // No-op, override as necessary + } + + public void handleNativeBrowserEvent(final Element tooltipSource, NativeEvent event) { + if (BrowserEvents.MOUSEOUT.equals(event.getType())) { + if (displayTooltipTimer != null) { + displayTooltipTimer.cancel(); + } + TooltipPanel.this.hide(true); + } else if (getWidget() != null && BrowserEvents.MOUSEOVER.equals(event.getType())) { + displayTooltipTimer = new Timer() { + @Override + public void run() { + TooltipPanel.this.showRelativeTo(tooltipSource); + } + }; + displayTooltipTimer.schedule(TOOLTIP_DISPLAY_DELAY); + } + } +} diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/AbstractActionButton.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/AbstractActionButton.java index 0bd5718..e06d3ac 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/AbstractActionButton.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/AbstractActionButton.java @@ -1,5 +1,7 @@ package org.ovirt.engine.ui.common.widget.action; +import org.ovirt.engine.ui.common.widget.TooltipPanel; + import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.safehtml.shared.SafeHtml; @@ -16,6 +18,8 @@ * </ul> */ public abstract class AbstractActionButton extends Composite implements ActionButton { + + protected final TooltipPanel<ToggleButton> tooltipPanel = new TooltipPanel<ToggleButton>(); @UiField public ToggleButton button; @@ -48,7 +52,7 @@ @Override public void setTitle(String title) { - button.setTitle(title); + tooltipPanel.setText(title); } @Override diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/DropdownActionButton.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/DropdownActionButton.java index fdcacc1..6312bc3 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/DropdownActionButton.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/DropdownActionButton.java @@ -1,5 +1,9 @@ package org.ovirt.engine.ui.common.widget.action; +import java.util.List; + +import org.ovirt.engine.ui.common.CommonApplicationResources; + import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; @@ -18,9 +22,6 @@ import com.google.gwt.user.client.ui.MenuItem; import com.google.gwt.user.client.ui.PopupPanel; import com.google.gwt.user.client.ui.ToggleButton; -import org.ovirt.engine.ui.common.CommonApplicationResources; - -import java.util.List; public class DropdownActionButton<T> extends AbstractActionButton { @@ -46,6 +47,7 @@ initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this)); initMenuPopup(actions, selectedItems); addMouseHandlers(); + this.tooltipPanel.applyTo(button); } private void initDropdownButton() { diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/SimpleActionButton.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/SimpleActionButton.java index 8ccabbf..91c483f 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/SimpleActionButton.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/SimpleActionButton.java @@ -47,6 +47,7 @@ button.addStyleName(style.buttonMouseOut()); } }); + this.tooltipPanel.applyTo(button); } interface Style extends CssResource { diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/dialog/InfoIcon.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/dialog/InfoIcon.java index 6f96e51..a3dc4db 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/dialog/InfoIcon.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/dialog/InfoIcon.java @@ -1,13 +1,11 @@ package org.ovirt.engine.ui.common.widget.dialog; import org.ovirt.engine.ui.common.CommonApplicationResources; +import org.ovirt.engine.ui.common.widget.TooltipPanel; import com.google.gwt.event.dom.client.MouseOutEvent; -import com.google.gwt.event.dom.client.MouseOutHandler; import com.google.gwt.event.dom.client.MouseOverEvent; -import com.google.gwt.event.dom.client.MouseOverHandler; import com.google.gwt.safehtml.shared.SafeHtml; -import com.google.gwt.user.client.ui.DecoratedPopupPanel; import com.google.gwt.user.client.ui.FocusPanel; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.Image; @@ -15,7 +13,7 @@ public class InfoIcon extends FocusPanel { private Image infoImage; private Image infoImageHover; - private final DecoratedPopupPanel infoPanel = new DecoratedPopupPanel(true); + private final TooltipPanel<InfoIcon> infoPanel; public InfoIcon(SafeHtml text, CommonApplicationResources resources) { super(); @@ -23,26 +21,21 @@ initInfoImages(resources); setWidget(infoImage); - infoPanel.setWidget(new HTML(text)); - infoPanel.getElement().getStyle().setZIndex(1); - - addMouseOutHandler(new MouseOutHandler() { + infoPanel = new TooltipPanel<InfoIcon>(true, this) { @Override - public void onMouseOut(MouseOutEvent event) { - setWidget(infoImage); - infoPanel.hide(true); - } - }); - - addMouseOverHandler(new MouseOverHandler() { - - @Override - public void onMouseOver(MouseOverEvent event) { - setWidget(infoImageHover); + protected void onTooltipSourceMouseOver(MouseOverEvent event) { + InfoIcon.this.setWidget(infoImageHover); infoPanel.showRelativeTo(InfoIcon.this); } - }); + + @Override + protected void onTooltipSourceMouseOut(MouseOutEvent event) { + InfoIcon.this.setWidget(infoImage); + } + + }; + setText(text); } private void initInfoImages(CommonApplicationResources resources) { diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelTextBox.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelTextBox.java index 005cd66..ac6c3de 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelTextBox.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelTextBox.java @@ -1,15 +1,19 @@ package org.ovirt.engine.ui.common.widget.editor.generic; +import org.ovirt.engine.ui.common.widget.TooltipPanel; +import org.ovirt.engine.ui.common.widget.editor.EditorWidget; + import com.google.gwt.dom.client.Document; import com.google.gwt.editor.ui.client.adapters.ValueBoxEditor; import com.google.gwt.text.shared.Parser; import com.google.gwt.text.shared.Renderer; import com.google.gwt.user.client.ui.ValueBox; -import org.ovirt.engine.ui.common.widget.editor.EditorWidget; public class EntityModelTextBox<T> extends ValueBox<T> implements EditorWidget<T, ValueBoxEditor<T>> { private ObservableValueBoxEditor<T> editor; + + private final TooltipPanel<EntityModelTextBox<T>> tooltipPanel = new TooltipPanel<EntityModelTextBox<T>>(true, this); public EntityModelTextBox(Renderer<T> renderer, Parser<T> parser) { super(Document.get().createTextInputElement(), renderer, parser); @@ -23,4 +27,8 @@ return editor; } + @Override + public void setTitle(String text) { + tooltipPanel.setText(text); + } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/label/TextBoxLabelBase.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/label/TextBoxLabelBase.java index 06bc208..ef9248f 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/label/TextBoxLabelBase.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/label/TextBoxLabelBase.java @@ -2,6 +2,8 @@ import java.text.ParseException; +import org.ovirt.engine.ui.common.widget.TooltipPanel; + import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.dom.client.Style.Unit; @@ -28,6 +30,8 @@ private T value; private String tooltipCaption; + private final TooltipPanel<TextBoxLabelBase<T>> tooltipPanel = new TooltipPanel<TextBoxLabelBase<T>>(true, this); + private TextBoxLabelBase(Renderer<T> renderer, Parser<T> parser) { super(Document.get().createTextInputElement(), renderer, parser); @@ -60,7 +64,7 @@ if (getTooltipCaption() != null) { renderedText = getTooltipCaption() + ": " + renderedText; //$NON-NLS-1$ } - setTitle(renderedText); + tooltipPanel.setText(renderedText); } @Override diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/refresh/BaseRefreshPanel.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/refresh/BaseRefreshPanel.java index ed4a3fb..a1c54df 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/refresh/BaseRefreshPanel.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/refresh/BaseRefreshPanel.java @@ -5,6 +5,7 @@ import org.ovirt.engine.ui.common.CommonApplicationConstants; import org.ovirt.engine.ui.common.idhandler.HasElementId; import org.ovirt.engine.ui.common.utils.ElementIdUtils; +import org.ovirt.engine.ui.common.widget.TooltipPanel; import org.ovirt.engine.ui.common.widget.renderer.MillisecondRenderer; import com.google.gwt.core.client.GWT; @@ -185,6 +186,7 @@ private final BaseRefreshPanelCss style; + private final TooltipPanel<BaseRefreshPanel> statusTooltipPanel = new TooltipPanel<BaseRefreshPanel>(true, this); /** * Create a Panel managed by the specified {@link RefreshManager}<BR> @@ -290,7 +292,7 @@ } public void showStatus(String status) { - setTitle(status); + statusTooltipPanel.setText(status); } private void createRefreshButton() { diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/AbstractCellWithTooltip.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/AbstractCellWithTooltip.java index 5918c75..c61ac84 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/AbstractCellWithTooltip.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/AbstractCellWithTooltip.java @@ -1,5 +1,7 @@ package org.ovirt.engine.ui.common.widget.table.column; +import org.ovirt.engine.ui.common.widget.TooltipPanel; + import com.google.gwt.cell.client.AbstractCell; import com.google.gwt.cell.client.ValueUpdater; import com.google.gwt.dom.client.Element; @@ -15,6 +17,8 @@ */ public abstract class AbstractCellWithTooltip<C> extends AbstractCell<C> { + private final TooltipPanel<?> tooltipPanel = new TooltipPanel(); + public AbstractCellWithTooltip(String... consumedEvents) { super(consumedEvents); } @@ -24,16 +28,12 @@ NativeEvent event, ValueUpdater<C> valueUpdater) { super.onBrowserEvent(context, parent, value, event, valueUpdater); - // Skip events other than 'mouseover' - if (!"mouseover".equals(event.getType())) { //$NON-NLS-1$ - return; - } - if (value != null && showTooltip(parent, value)) { - parent.setTitle(getTooltip(value)); + tooltipPanel.setText(getTooltip(value)); } else { - parent.setTitle(""); //$NON-NLS-1$ + tooltipPanel.setText(""); //$NON-NLS-1$ } + tooltipPanel.handleNativeBrowserEvent(parent, event); } /** diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/SafeHtmlWithSafeHtmlTooltipColumn.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/SafeHtmlWithSafeHtmlTooltipColumn.java index 0fd6f0e..3b2cec3 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/SafeHtmlWithSafeHtmlTooltipColumn.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/SafeHtmlWithSafeHtmlTooltipColumn.java @@ -1,5 +1,7 @@ package org.ovirt.engine.ui.common.widget.table.column; +import org.ovirt.engine.ui.common.widget.TooltipPanel; + import com.google.gwt.cell.client.AbstractCell; import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.cell.client.ValueUpdater; @@ -8,9 +10,6 @@ import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.user.cellview.client.Column; -import com.google.gwt.user.client.ui.DecoratedPopupPanel; -import com.google.gwt.user.client.ui.HTML; -import com.google.gwt.user.client.ui.Widget; public abstract class SafeHtmlWithSafeHtmlTooltipColumn<T> extends Column<T, SafeHtml>{ @@ -35,13 +34,9 @@ } }); - - tooltipPanel.setWidget(tooltip); - tooltipPanel.getElement().getStyle().setZIndex(1); } - private final HTML tooltip = new HTML(); - private final DecoratedPopupPanel tooltipPanel = new DecoratedPopupPanel(); + private final TooltipPanel<?> tooltipPanel = new TooltipPanel(); @Override @@ -54,23 +49,12 @@ super.onBrowserEvent(context, elem, object, event); if (event.getType().equals("mouseover")) { //$NON-NLS-1$ - Widget widget = new Widget(){ - @Override - public com.google.gwt.user.client.Element getElement() { - return (com.google.gwt.user.client.Element) elem; - }; - }; - - SafeHtml tooltipHtml= getTooltip(object); - if(!"".equals(tooltipHtml.asString())){ //$NON-NLS-1$ - tooltip.setHTML(getTooltip(object)); - tooltipPanel.showRelativeTo(widget); + SafeHtml tooltipHtml = getTooltip(object); + if (!"".equals(tooltipHtml.asString())) { //$NON-NLS-1$ + tooltipPanel.setText(getTooltip(object)); } } - else if (event.getType().equals("mouseout")) { //$NON-NLS-1$ - tooltipPanel.hide(true); - } - + tooltipPanel.handleNativeBrowserEvent(elem, event); } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/StyledImageResourceCell.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/StyledImageResourceCell.java index dbc5432..dca0e54 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/StyledImageResourceCell.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/StyledImageResourceCell.java @@ -3,12 +3,11 @@ import java.util.HashSet; import java.util.Set; -import org.ovirt.engine.ui.common.widget.ElementAwareDecoratedPopupPanel; +import org.ovirt.engine.ui.common.widget.TooltipPanel; import com.google.gwt.cell.client.ImageResourceCell; import com.google.gwt.cell.client.ValueUpdater; import com.google.gwt.core.client.GWT; -import com.google.gwt.dom.client.BrowserEvents; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.resources.client.ImageResource; @@ -17,11 +16,10 @@ import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.google.gwt.user.client.ui.AbstractImagePrototype; -import com.google.gwt.user.client.ui.Label; /** * ImageResourceCell that supports setting a style and displaying a tooltip in a - * DecoratedPopupPanel. + * {@code TooltipPanel}. * */ public class StyledImageResourceCell extends ImageResourceCell implements HasStyleClass { @@ -33,13 +31,13 @@ private String style = "line-height: 100%; text-align: center; vertical-align: middle;"; //$NON-NLS-1$ private String styleClass = ""; //$NON-NLS-1$ - private String title = ""; //$NON-NLS-1$ + private final String title = ""; //$NON-NLS-1$ private static CellTemplate template; - private ElementAwareDecoratedPopupPanel titlePanel = new ElementAwareDecoratedPopupPanel(); + private final TooltipPanel<?> tooltipPanel = new TooltipPanel(); - private Set<String> consumedEvents; + private final Set<String> consumedEvents; public StyledImageResourceCell() { super(); @@ -73,38 +71,23 @@ this.style = style; } + @Override public void setStyleClass(String styleClass) { this.styleClass = styleClass == null ? "" : styleClass; //$NON-NLS-1$ } /** - * Set the text for the tooltip that will show when this cell is hovered over. + * Set the text for the tool-tip that will show when this cell is hovered over. * @param title */ public void setTitle(String title) { - this.title = title != null ? title : ""; //$NON-NLS-1$ + tooltipPanel.setText(title); } @Override public void onBrowserEvent(Context context, Element parent, ImageResource value, NativeEvent event, ValueUpdater<ImageResource> valueUpdater) { - String eventType = event.getType(); - handleTitlePanel(eventType, parent); - } - - private void handleTitlePanel(String eventType, Element parent) { - if (title.isEmpty()) { - // no need to show/hide title - return; - } - - titlePanel.setWidget(new Label(title)); - if (BrowserEvents.MOUSEOVER.equals(eventType)) { - titlePanel.showRelativeTo(parent); - } - else if (BrowserEvents.MOUSEOUT.equals(eventType)) { - titlePanel.hide(); - } + tooltipPanel.handleNativeBrowserEvent(parent, event); } } diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/basic/MainTabBasicListItemActionButton.java b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/basic/MainTabBasicListItemActionButton.java index 62e08f7..91dfb10 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/basic/MainTabBasicListItemActionButton.java +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/basic/MainTabBasicListItemActionButton.java @@ -36,6 +36,7 @@ setEnabledHtml(SafeHtmlUtils.fromTrustedString(AbstractImagePrototype.create(enabledImage).getHTML())); setDisabledHtml(SafeHtmlUtils.fromTrustedString(AbstractImagePrototype.create(disabledImage).getHTML())); stylableButtonHolder.addStyleName(additionalStyle); + this.tooltipPanel.applyTo(button); } @Override diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/label/LabelWithToolTip.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/label/LabelWithToolTip.java index 50549d9..7e76ffd 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/label/LabelWithToolTip.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/label/LabelWithToolTip.java @@ -1,18 +1,12 @@ package org.ovirt.engine.ui.webadmin.widget.label; -import com.google.gwt.event.dom.client.MouseOutEvent; -import com.google.gwt.event.dom.client.MouseOutHandler; -import com.google.gwt.event.dom.client.MouseOverEvent; -import com.google.gwt.event.dom.client.MouseOverHandler; -import com.google.gwt.user.client.ui.DecoratedPopupPanel; -import com.google.gwt.user.client.ui.HTML; +import org.ovirt.engine.ui.common.widget.TooltipPanel; + import com.google.gwt.user.client.ui.Label; public class LabelWithToolTip extends Label { - private final HTML tooltip = new HTML(); - private final DecoratedPopupPanel tooltipPanel = new DecoratedPopupPanel(); - private String title; + private final TooltipPanel<LabelWithToolTip> tooltipPanel = new TooltipPanel<LabelWithToolTip>(true, this); public LabelWithToolTip() { this("", -1); //$NON-NLS-1$ @@ -24,30 +18,7 @@ if (length > -1 && text.length() > length) { setText(text.substring(0, length - 3) + "..."); //$NON-NLS-1$ } - tooltipPanel.setWidget(tooltip); - tooltipPanel.getElement().getStyle().setZIndex(1); setTitle(text); - registerHandlers(); - } - - private void registerHandlers() { - addMouseOverHandler(new MouseOverHandler() { - - @Override - public void onMouseOver(MouseOverEvent event) { - if(!"".equals(title)){ //$NON-NLS-1$ - tooltip.setHTML(title); - tooltipPanel.showRelativeTo(LabelWithToolTip.this); - } - } - }); - addMouseOutHandler(new MouseOutHandler() { - - @Override - public void onMouseOut(MouseOutEvent event) { - tooltipPanel.hide(true); - } - }); } public LabelWithToolTip(String text) { @@ -56,6 +27,6 @@ @Override public void setTitle(String text) { - this.title = text; + tooltipPanel.setText(text); } } -- To view, visit http://gerrit.ovirt.org/27325 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I4fc79a6aa132c65d3050499e5f00facbb5c358d3 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Alexander Wels <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
