package com.iambookmaster.client.common;
import java.util.ArrayList;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.WindowResizeListener;
public class WindowResizeCacheListener implements WindowResizeListener{
private static WindowResizeCacheListener instance;
public static void addResizeListener(WindowResizeListener listener) {
instance.add(listener);
}
public static void removeResizeListener(WindowResizeListener listener) {
instance.remove(listener);
}
private Timer timer;
private int counter;
private ArrayList<WindowResizeListener> list;
private int width;
private int height;
private WindowResizeCacheListener(){
list = new ArrayList<WindowResizeListener>();
height = Window.getClientHeight();
width = Window.getClientWidth();
Window.addWindowResizeListener(this);
}
static {
instance = new WindowResizeCacheListener();
}
public void add(WindowResizeListener listener) {
list.add(listener);
}
public void remove(WindowResizeListener listener) {
for (int i=0;i<list.size();i++) {
if (list.get(i)==listener) {
list.remove(i);
return;
}
}
}
public void onWindowResized(int width, int height) {
counter = 4;
this.width = width;
this.height = height;
if (timer==null) {
timer = new Timer() {
public void run() {
if (counter>0) {
counter--;
return;
}
//resize
this.cancel();
timer = null;
for (int i=0;i<list.size();i++) {
WindowResizeListener listener = (WindowResizeListener)list.get(i);
listener.onWindowResized(WindowResizeCacheListener.this.width,WindowResizeCacheListener.this.height);
}
}
};
timer.scheduleRepeating(150);
}
}
}