package com.akjava.gwt.lib.client.experimental; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.ui.Button; public abstract class ExecuteWaitAsyncButton extends Button{ public ExecuteWaitAsyncButton(String label){ this(label,true); } private int schedule=10; private boolean readyExecute; public int getSchedule() { return schedule; } public void setSchedule(int schedule) { this.schedule = schedule; } public boolean isReadyExecute() { return readyExecute; } public void setReadyExecute(boolean readyExecute) { this.readyExecute = readyExecute; } public ExecuteWaitAsyncButton(String label,final boolean autoEnableButton){ super(label); this.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { readyExecute=false; startExecute(autoEnableButton); } }); } public void startExecute(final boolean autoEnableButton){ if(!isEnabled()){ return; } setEnabled(false); beforeExecute(); Timer timer=new Timer(){ @Override public void run() { if(readyExecute){ cancel(); try{ executeOnClick(); }catch(Exception e){ new RuntimeException(e);//i dont care }finally{ if(autoEnableButton){ setEnabled(true); } } } } }; timer.scheduleRepeating(schedule); } public void beforeExecute(){} public abstract void executeOnClick(); }