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