Alexander Wels has uploaded a new change for review.

Change subject: userportal,webadmin: Revert Tooltip infrastructure
......................................................................

userportal,webadmin: Revert Tooltip infrastructure

This reverts commit 6e4f68c2cdef0c8b2eb7b18893398013cd41fc98.

- This significantly reduces the time GWT debug mode takes.

Change-Id: I282d7e855d167e02a68b7a2b3807e20c6b78acba
Signed-off-by: Alexander Wels <aw...@redhat.com>
---
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/ElementAwareDecoratedPopupPanel.java
D 
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/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/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/label/LabelWithToolTip.java
12 files changed, 101 insertions(+), 393 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/72/28872/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 b2cc4d7..79da8a2 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,25 +10,12 @@
  */
 public class ElementAwareDecoratedPopupPanel extends DecoratedPopupPanel {
 
-    /**
-     * The offset below the element the tool-tip is associated with.
-     */
-    protected static final int TOOLTIP_HEIGHT_OFFSET = 10; //10px
-
-    public ElementAwareDecoratedPopupPanel() {
-        this(false);
-    }
-
-    public ElementAwareDecoratedPopupPanel(boolean autoHide) {
-        super(autoHide);
-    }
-
     public void showRelativeTo(final Element target) {
         setPopupPositionAndShow(new PositionCallback() {
             @Override
             public void setPosition(int offsetWidth, int offsetHeight) {
                 int left = target.getAbsoluteLeft();
-                int top = target.getAbsoluteTop() + target.getOffsetHeight() + 
TOOLTIP_HEIGHT_OFFSET;
+                int top = target.getAbsoluteTop() + target.getOffsetHeight();
 
                 setPopupPosition(left, top);
             }
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
deleted file mode 100644
index 1cbaeaf..0000000
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/TooltipPanel.java
+++ /dev/null
@@ -1,275 +0,0 @@
-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.EventTarget;
-import com.google.gwt.dom.client.NativeEvent;
-import com.google.gwt.dom.client.Node;
-import com.google.gwt.dom.client.NodeList;
-import com.google.gwt.event.logical.shared.AttachEvent;
-import com.google.gwt.event.shared.HandlerRegistration;
-import com.google.gwt.safehtml.shared.SafeHtml;
-import com.google.gwt.safehtml.shared.SafeHtmlUtils;
-import com.google.gwt.user.client.Event;
-import com.google.gwt.user.client.Event.NativePreviewEvent;
-import com.google.gwt.user.client.Event.NativePreviewHandler;
-import com.google.gwt.user.client.ui.HTML;
-import com.google.gwt.user.client.ui.Widget;
-
-/**
- * Tool-tip panel that gets attached to a {@code Widget} when certain mouse 
events happen the tool-tip will either
- * be shown or hidden.
- */
-public class TooltipPanel extends ElementAwareDecoratedPopupPanel {
-
-    /**
-     * The Native Event preview handler registration.
-     */
-    private HandlerRegistration tooltipNativePreviewHandlerRegistration;
-    private boolean nonWidget = false;
-
-    /**
-     * 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 Widget 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 as a {@code String}.
-     */
-    public void setText(String text) {
-        if (text != null) {
-            SafeHtml safeText = SafeHtmlUtils.fromSafeConstant(text);
-            setText(safeText);
-        } else {
-            setText((SafeHtml)null);
-        }
-    }
-
-    /**
-     * 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 as an {@code SafeHtml}.
-     */
-    public void setText(SafeHtml text) {
-        if (!isTextEmpty(text)) {
-            setWidget(new HTML(text));
-        } else {
-            setWidget(null);
-        }
-    }
-
-    /**
-     * 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 isTextEmpty(SafeHtml text) {
-        return text == null || "".equals(text.asString());
-    }
-
-    /**
-     * Apply the tool-tip panel to the supplied source {@code Widget}.
-     * @param tooltipSource The {@code Widget} that the panel should be 
applied to.
-     */
-    public void applyTo(final Widget tooltipSource) {
-        tooltipSource.addAttachHandler(new AttachEvent.Handler() {
-
-            @Override
-            public void onAttachOrDetach(AttachEvent event) {
-                //Only attach the preview handlers if the widget is attached 
to the DOM.
-                if (event.isAttached()) {
-                    registerPreviewHandler(tooltipSource);
-                } else {
-                    removeHandlerRegistration();
-                }
-            }
-        });
-    }
-
-    /**
-     * Register the event preview handler.
-     * @param tooltipSource The {@code Widget} that needs to be compared 
against.
-     */
-    private void registerPreviewHandler(final Widget tooltipSource) {
-        if (tooltipNativePreviewHandlerRegistration != null) {
-            return;
-        }
-        tooltipNativePreviewHandlerRegistration = 
Event.addNativePreviewHandler(new NativePreviewHandler() {
-            @Override
-            public void onPreviewNativeEvent(NativePreviewEvent event) {
-                if (tooltipSource.isVisible()) {
-                    Element tooltipSourceElement = tooltipSource.getElement();
-                    handlePreviewEvent(event, tooltipSourceElement);
-                }
-            }
-        });
-    }
-
-    /**
-     * Apply the tool-tip panel to the supplied source {@code Element}. Use 
this one if you don't have a
-     * {@code Widget} to pass into the tool-tip.
-     * @param tooltipSource The {@code Element} that the panel should be 
applied to.
-     */
-    public void applyTo(final Element tooltipSource) {
-        if (tooltipNativePreviewHandlerRegistration != null) {
-            return;
-        }
-        //Mark that we are attached to a non widget, so we can't use the 
onDetachAttach handler to manage the
-        //handlers.
-        nonWidget = true;
-        tooltipNativePreviewHandlerRegistration = 
Event.addNativePreviewHandler(new NativePreviewHandler() {
-            @Override
-            public void onPreviewNativeEvent(NativePreviewEvent event) {
-                handlePreviewEvent(event, tooltipSource);
-            }
-        });
-    }
-
-    @Override
-    protected void onDetach() {
-        super.onDetach();
-        if (nonWidget) {
-            //We are attached to a non widget, remove the handlerRegistration.
-            removeHandlerRegistration();
-        }
-    }
-
-    /**
-     * Remove the handler registration if it exists.
-     */
-    private void removeHandlerRegistration() {
-        if (tooltipNativePreviewHandlerRegistration != null) {
-            tooltipNativePreviewHandlerRegistration.removeHandler();
-            tooltipNativePreviewHandlerRegistration = null;
-        }
-    };
-
-    /**
-     * Allow creators of the tool-tip panel to add extra functionality for 
mouse over events.
-     */
-    protected void onTooltipSourceMouseOver() {
-        // No-op, override as necessary
-    }
-
-    /**
-     * Allow creators of the tool-tip panel to add extra functionality for 
mouse out events.
-     */
-    protected void onTooltipSourceMouseOut() {
-        // No-op, override as necessary
-    }
-
-    /**
-     * Use handleNativeBrowserEvent, if you don't even have an {@code Element} 
to use as the source
-     * of the tool-tip. For instance in a GWT CellTable cell.
-     * @param tooltipSource The element that is the source of the event.
-     * @param event The native event.
-     */
-    public void handleNativeBrowserEvent(final Element tooltipSource, 
NativeEvent event) {
-        if (BrowserEvents.MOUSEOUT.equals(event.getType())) {
-            hideTooltipPanel();
-        } else if (BrowserEvents.MOUSEOVER.equals(event.getType())) {
-            displayTooltipPanel(tooltipSource);
-        }
-    }
-
-    /**
-     * Display the tool-tip.
-     * @param tooltipSource The {@code Element} to display the tool-tip for, 
the tool-tip is positioned relative to
-     * the passed in element.
-     */
-    private void displayTooltipPanel(final Element tooltipSource) {
-        if (getWidget() != null && !isShowing()) {
-            onTooltipSourceMouseOver();
-            TooltipPanel.this.showRelativeTo(tooltipSource);
-        }
-    }
-
-    /**
-     * Hide the tooltip if it is showing.
-     */
-    private void hideTooltipPanel() {
-        onTooltipSourceMouseOut();
-        TooltipPanel.this.hide(true);
-    }
-
-    /**
-     * Handle the preview event.
-     * @param event The {@code NativePreviewEvent} to preview.
-     * @param tooltipSourceElement The source of the event.
-     */
-    private void handlePreviewEvent(NativePreviewEvent event, Element 
tooltipSourceElement) {
-        //Don't do anything if we can't display anything anyway.
-        if (getWidget() == null) {
-            return;
-        }
-        int type = event.getTypeInt();
-        switch (type) {
-            case Event.ONMOUSEDOWN:
-            case Event.ONMOUSEUP:
-            case Event.ONMOUSEMOVE:
-            case Event.ONCLICK:
-            case Event.ONDBLCLICK:
-                if (mouseOnSourceElement(event.getNativeEvent().getClientX(),
-                        event.getNativeEvent().getClientY(), 
tooltipSourceElement)) {
-                    EventTarget target = 
event.getNativeEvent().getEventTarget();
-                    if (Element.is(target)) {
-                        Element element = Element.as(target);
-                        //Either the element or any of its children (like an 
image can be the target.
-                        NodeList<Node> children = element.getChildNodes();
-                        for (int i = 0; i < children.getLength(); i++) {
-                            Node child = children.getItem(i);
-                            if (child instanceof Element) {
-                                if (child.equals(tooltipSourceElement)) {
-                                    displayTooltipPanel(tooltipSourceElement);
-                                    return;
-                                }
-                            }
-                        }
-                        if (element.equals(tooltipSourceElement)) {
-                            displayTooltipPanel(tooltipSourceElement);
-                        }
-                    }
-                } else {
-                    hideTooltipPanel();
-                }
-                break;
-        }
-    }
-
-    /**
-     * Determine if the X and Y position passed in is inside the display box 
of the passed in {@code Element}. The
-     * left side and bottom side are taking into account but not the top and 
right, so you don't have overlapping on
-     * two elements next to each other.
-     * @param clientX The client X position in pixels
-     * @param clientY The client Y position in pixels
-     * @param tooltipSource The {@code Element} to compare against.
-     * @return {@code true} if the clientX and clientY are within the box of 
the element, false otherwise.
-     */
-    private boolean mouseOnSourceElement(int clientX, int clientY, Element 
tooltipSource) {
-        return clientX >= tooltipSource.getAbsoluteLeft() && clientX < 
tooltipSource.getAbsoluteRight()
-                && clientY <= tooltipSource.getAbsoluteBottom() && clientY > 
tooltipSource.getAbsoluteTop();
-    }
-}
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 d4d1329..0bd5718 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,14 +1,11 @@
 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;
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.ToggleButton;
-import com.google.gwt.user.client.ui.Widget;
 
 /**
  * Base class used to implement action button widgets.
@@ -19,8 +16,6 @@
  * </ul>
  */
 public abstract class AbstractActionButton extends Composite implements 
ActionButton {
-
-    protected final TooltipPanel tooltipPanel = new TooltipPanel();
 
     @UiField
     public ToggleButton button;
@@ -53,7 +48,7 @@
 
     @Override
     public void setTitle(String title) {
-        tooltipPanel.setText(title);
+        button.setTitle(title);
     }
 
     @Override
@@ -61,9 +56,4 @@
         return button;
     }
 
-    @Override
-    protected void initWidget(Widget widget) {
-        super.initWidget(widget);
-        tooltipPanel.applyTo(button);
-    }
 }
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 40f5c0c..fdcacc1 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,9 +1,5 @@
 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;
@@ -22,6 +18,9 @@
 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 {
 
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 c043482..6f96e51 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,9 +1,13 @@
 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;
@@ -11,7 +15,7 @@
 public class InfoIcon extends FocusPanel {
     private Image infoImage;
     private Image infoImageHover;
-    private final TooltipPanel infoPanel;
+    private final DecoratedPopupPanel infoPanel = new 
DecoratedPopupPanel(true);
 
     public InfoIcon(SafeHtml text, CommonApplicationResources resources) {
         super();
@@ -19,21 +23,26 @@
         initInfoImages(resources);
 
         setWidget(infoImage);
-        infoPanel = new TooltipPanel(true, this) {
+        infoPanel.setWidget(new HTML(text));
+        infoPanel.getElement().getStyle().setZIndex(1);
+
+        addMouseOutHandler(new MouseOutHandler() {
 
             @Override
-            protected void onTooltipSourceMouseOver() {
-                InfoIcon.this.setWidget(infoImageHover);
+            public void onMouseOut(MouseOutEvent event) {
+                setWidget(infoImage);
+                infoPanel.hide(true);
+            }
+        });
+
+        addMouseOverHandler(new MouseOverHandler() {
+
+            @Override
+            public void onMouseOver(MouseOverEvent event) {
+                setWidget(infoImageHover);
                 infoPanel.showRelativeTo(InfoIcon.this);
             }
-
-            @Override
-            protected void onTooltipSourceMouseOut() {
-                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 3d2cf12..005cd66 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,19 +1,15 @@
 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 tooltipPanel = new TooltipPanel(true, this);
 
     public EntityModelTextBox(Renderer<T> renderer, Parser<T> parser) {
         super(Document.get().createTextInputElement(), renderer, parser);
@@ -27,8 +23,4 @@
         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 91787c3..06bc208 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,8 +2,6 @@
 
 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;
@@ -30,8 +28,6 @@
 
     private T value;
     private String tooltipCaption;
-    private final TooltipPanel tooltipPanel = new TooltipPanel(true, this);
-
 
     private TextBoxLabelBase(Renderer<T> renderer, Parser<T> parser) {
         super(Document.get().createTextInputElement(), renderer, parser);
@@ -64,7 +60,7 @@
         if (getTooltipCaption() != null) {
             renderedText = getTooltipCaption() + ": " + renderedText; 
//$NON-NLS-1$
         }
-        tooltipPanel.setText(renderedText);
+        setTitle(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 2b5d5cf..1efed3d 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,7 +5,6 @@
 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;
@@ -186,7 +185,6 @@
 
     private final BaseRefreshPanelCss style;
 
-    private final TooltipPanel statusTooltipPanel = new TooltipPanel();
 
     /**
      * Create a Panel managed by the specified {@link RefreshManager}<BR>
@@ -270,7 +268,6 @@
         panel.add(separator);
         panel.add(refreshMenuButton);
         setWidget(panel);
-        this.statusTooltipPanel.applyTo(this);
     }
 
     public void hideRefreshMenuButton() {
@@ -293,7 +290,7 @@
     }
 
     public void showStatus(String status) {
-        statusTooltipPanel.setText(status);
+        setTitle(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 27bceeb..e850fd1 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,9 +1,8 @@
 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.BrowserEvents;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.NativeEvent;
 
@@ -17,8 +16,6 @@
  */
 public abstract class AbstractCellWithTooltip<C> extends AbstractCell<C> {
 
-    private final TooltipPanel tooltipPanel = new TooltipPanel();
-
     public AbstractCellWithTooltip(String... consumedEvents) {
         super(consumedEvents);
     }
@@ -28,22 +25,25 @@
             NativeEvent event, ValueUpdater<C> valueUpdater) {
         super.onBrowserEvent(context, parent, value, event, valueUpdater);
 
-        tooltipPanel.applyTo(parent);
-        if (value != null && showTooltip(parent, value)) {
-            tooltipPanel.setText(getTooltip(value));
-        } else {
-            tooltipPanel.setText(""); //$NON-NLS-1$
+        // Skip events other than 'mouseover'
+        if (!BrowserEvents.MOUSEOVER.equals(event.getType())) {
+            return;
         }
-        tooltipPanel.handleNativeBrowserEvent(parent, event);
+
+        if (value != null && showTooltip(parent, value)) {
+            parent.setTitle(getTooltip(value));
+        } else {
+            parent.setTitle(""); //$NON-NLS-1$
+        }
     }
 
     /**
-     * Returns tool-tip to show for the given value.
+     * Returns tooltip to show for the given value.
      */
     protected abstract String getTooltip(C value);
 
     /**
-     * Returns {@code true} if tool-tip should be shown for the given {@code 
parent} element.
+     * Returns {@code true} if tooltip should be shown for the given {@code 
parent} element.
      */
     protected boolean showTooltip(Element parent, C value) {
         return contentOverflows(parent);
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 ef21132..a96e268 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,7 +1,5 @@
 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;
@@ -11,10 +9,11 @@
 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>{
-
-    private final TooltipPanel tooltipPanel = new TooltipPanel();
 
     public SafeHtmlWithSafeHtmlTooltipColumn() {
         super(new AbstractCell<SafeHtml>(BrowserEvents.MOUSEOVER, 
BrowserEvents.MOUSEOUT) {
@@ -37,7 +36,14 @@
             }
 
         });
+
+        tooltipPanel.setWidget(tooltip);
+        tooltipPanel.getElement().getStyle().setZIndex(1);
     }
+
+    private final HTML tooltip = new HTML();
+    private final DecoratedPopupPanel tooltipPanel = new DecoratedPopupPanel();
+
 
     @Override
     public abstract SafeHtml getValue(T object);
@@ -49,12 +55,23 @@
         super.onBrowserEvent(context, elem, object, event);
 
         if (BrowserEvents.MOUSEOVER.equals(event.getType())) {
-            SafeHtml tooltipHtml = getTooltip(object);
-            if (tooltipHtml != null && !tooltipHtml.asString().isEmpty()) {
-                tooltipPanel.setText(getTooltip(object));
+            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(tooltipHtml != null && !"".equals(tooltipHtml.asString())){ 
//$NON-NLS-1$
+                tooltip.setHTML(tooltipHtml);
+                tooltipPanel.showRelativeTo(widget);
             }
         }
-        tooltipPanel.handleNativeBrowserEvent(elem, event);
+        else if (BrowserEvents.MOUSEOUT.equals(event.getType())) {
+            tooltipPanel.hide(true);
+        }
+
     }
 
 }
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 b867841..f1d1025 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
@@ -1,15 +1,6 @@
 package org.ovirt.engine.ui.common.widget.table.column;
 
-import java.util.HashSet;
-import java.util.Set;
-
-import org.ovirt.engine.ui.common.widget.TooltipPanel;
-
-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;
 import com.google.gwt.safehtml.client.SafeHtmlTemplates;
 import com.google.gwt.safehtml.shared.SafeHtml;
@@ -18,9 +9,7 @@
 import com.google.gwt.user.client.ui.AbstractImagePrototype;
 
 /**
- * ImageResourceCell that supports setting a style and displaying a tooltip in 
a
- * {@code TooltipPanel}.
- *
+ * ImageResourceCell that supports setting a style and displaying a tooltip in 
a DecoratedPopupPanel.
  */
 public class StyledImageResourceCell extends TitlePanelCell<ImageResource> 
implements HasStyleClass {
 
@@ -34,10 +23,6 @@
 
     private static CellTemplate template;
 
-    private final TooltipPanel tooltipPanel = new TooltipPanel();
-
-    private final Set<String> consumedEvents;
-
     public StyledImageResourceCell() {
         super();
 
@@ -45,9 +30,6 @@
         if (template == null) {
             template = GWT.create(CellTemplate.class);
         }
-        consumedEvents = new HashSet<String>();
-        consumedEvents.add(BrowserEvents.MOUSEOVER);
-        consumedEvents.add(BrowserEvents.MOUSEOUT);
     }
 
     @Override
@@ -69,18 +51,4 @@
         this.styleClass = styleClass == null ? "" : styleClass; //$NON-NLS-1$
     }
 
-    /**
-     * Set the text for the tool-tip that will show when this cell is hovered 
over.
-     * @param title The text to show in the tool-tip.
-     */
-    @Override
-    public void setTitle(String title) {
-        tooltipPanel.setText(title);
-    }
-
-    @Override
-    public void onBrowserEvent(Context context, Element parent, ImageResource 
value,
-            NativeEvent event, ValueUpdater<ImageResource> valueUpdater) {
-        tooltipPanel.handleNativeBrowserEvent(parent.getOffsetParent(), event);
-    }
 }
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 eddd7c8..a43490a 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,13 +1,18 @@
 package org.ovirt.engine.ui.webadmin.widget.label;
 
-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.HTML;
 
 public class LabelWithToolTip extends HTML {
 
-    private final TooltipPanel tooltipPanel = new TooltipPanel(true, this);
+    private final HTML tooltip = new HTML();
+    private final DecoratedPopupPanel tooltipPanel = new DecoratedPopupPanel();
+    private String title;
 
     public LabelWithToolTip() {
         this("", -1); //$NON-NLS-1$
@@ -27,15 +32,38 @@
         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);
+            }
+        });
     }
 
     @Override
     public void setTitle(String text) {
-        tooltipPanel.setText(text);
+        this.title = text;
     }
 
     public void setTitle(SafeHtml text) {
-        tooltipPanel.setText(text);
+        setText(text.asString());
     }
 }


-- 
To view, visit http://gerrit.ovirt.org/28872
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I282d7e855d167e02a68b7a2b3807e20c6b78acba
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Alexander Wels <aw...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to