/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.ide.factory.welcome;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.DivElement;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.dom.client.TableCellElement;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.UIObject;
/**
* @author Vitaliy Guliy
*/
public class TooltipHint extends UIObject {
private static TooltipHintUiBinder uiBinder = GWT.create(TooltipHintUiBinder.class);
interface TooltipHintUiBinder extends UiBinder<Element, TooltipHint> {
}
@UiField
TableCellElement messageElement;
@UiField
DivElement closeButton;
private int opacity = 0;
private int top = 1;
private int delta = 3;
public TooltipHint(String text) {
setElement(uiBinder.createAndBindUi(this));
messageElement.setInnerHTML(SafeHtmlUtils.htmlEscape(text));
DOM.sinkEvents((com.google.gwt.dom.client.Element)closeButton.cast(), Event.ONCLICK);
DOM.setEventListener((com.google.gwt.dom.client.Element)closeButton.cast(), event -> close());
getElement().getStyle().setProperty("opacity", "0");
getElement().getStyle().setTop(top, Unit.PX);
RootPanel.get().getElement().appendChild(getElement());
getElement().getStyle().setZIndex(Integer.MAX_VALUE);
new Timer() {
@Override
public void run() {
opacity += 1;
top += delta;
getElement().getStyle().setTop(top, Unit.PX);
if (opacity >= 10) {
getElement().getStyle().setProperty("opacity", "1");
cancel();
} else {
getElement().getStyle().setProperty("opacity", "0." + opacity);
}
}
}.scheduleRepeating(50);
}
private void close() {
opacity = 10;
// Hide animation
new Timer() {
@Override
public void run() {
opacity--;
if (opacity <= 0) {
cancel();
getElement().getParentElement().removeChild(getElement());
} else {
getElement().getStyle().setProperty("opacity", "0." + opacity);
}
}
}.scheduleRepeating(50);
}
}