package com.baselet.gwt.client.base; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Element; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.ui.RootPanel; public class Notification { private static String lastShownFeatureNotSupportedText; private static Element element = RootPanel.get("featurewarning").getElement(); public static void showFeatureNotSupported(String text, boolean fadeOut) { if (text.equals(lastShownFeatureNotSupportedText)) { return; // don't repeat the last warning } lastShownFeatureNotSupportedText = text; element.getStyle().setColor("red"); element.setInnerHTML(text); if (fadeOut) { ElementFader.fade(element, 1, 0, 7000, 3000); } } public static void showInfo(String text) { element.getStyle().setColor("blue"); element.setInnerHTML(text); ElementFader.fade(element, 1, 0, 4000, 2000); } private static class ElementFader { private static int stepCount = 0; private static Timer timer; private static Timer timerFader; public synchronized static void fade(final Element element, final float startOpacity, final float endOpacity, final int delay, final int totalTimeMillis) { if (timer != null) { timer.cancel(); } if (timerFader != null) { timerFader.cancel(); } DOM.setStyleAttribute(element, "opacity", Float.toString(startOpacity));// set start opacity now to make sure the opacity of an interrupted previous timer is overwritten timer = new Timer() { @Override public void run() { fade(element, startOpacity, endOpacity, totalTimeMillis); } }; timer.schedule(delay); } private static void fade(final Element element, final float startOpacity, final float endOpacity, final int totalTimeMillis) { final int numberOfSteps = 30; int stepLengthMillis = totalTimeMillis / numberOfSteps; stepCount = 0; final float deltaOpacity = (endOpacity - startOpacity) / numberOfSteps; timerFader = new Timer() { @Override public void run() { float opacity = startOpacity + stepCount * deltaOpacity; DOM.setStyleAttribute(element, "opacity", Float.toString(opacity)); stepCount++; if (stepCount == numberOfSteps) { DOM.setStyleAttribute(element, "opacity", Float.toString(endOpacity)); cancel(); } } }; timerFader.scheduleRepeating(stepLengthMillis); } } }