package com.gwt.ui.client; import java.util.ArrayList; import com.google.gwt.core.client.GWT; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.PopupPanel; import com.google.gwt.user.client.ui.Widget; public class InfoPanel extends PopupPanel { public static void display(String title, String message) { final InfoPanel info = new InfoPanel(title, message); info.show(); Timer t = new Timer() { @Override public void run() { info.hide(); } }; t.schedule(4000); } @Override public void show() { super.show(); slots.add(level, this); } @Override public void hide() { super.hide(); slots.set(level, null); } protected InfoPanel(String title, String message) { this.addStyleName("infoClientPanel"); add(new InfoWidget(title, message)); setWidth("300px"); setHeight("50px"); @SuppressWarnings("unused") int root_width = Window.getClientWidth(); int root_height = Window.getClientHeight(); level = findAvailableLevel(); int left = 25; int top = root_height - 100 - (level * 80); setPopupPosition(left, top); } private static ArrayList<InfoPanel> slots = new ArrayList<InfoPanel>(); private int level; private static int findAvailableLevel() { int size = slots.size(); for (int i=0; i<size; i++) { if (slots.get(i) == null) { return i; } } return size; } public static class InfoWidget extends Composite { MyUiBinder binder = GWT.create(MyUiBinder.class); interface MyUiBinder extends UiBinder<Widget, InfoWidget> {} @UiField Label title; @UiField Label message; private InfoWidget(String title, String message) { initWidget(binder.createAndBindUi(this)); this.title.setText(title); this.message.setText(message); } } }