All Downloads are FREE. Search and download functionalities are using the official Maven repository.

fr.lteconsulting.hexa.client.tools.Delayer Maven / Gradle / Ivy

The newest version!
package fr.lteconsulting.hexa.client.tools;

import com.google.gwt.user.client.Timer;

/*
 * in input, many events,
 * in output, events at a max rate of xxx milliseconds or,
 * if fPostponeEachTime is true => callback called xxx ms after the last event received
 */

public class Delayer
{
	public interface Callback
	{
		void onDelayedEvent();
	}

	Callback callback;
	int milliseconds;
	boolean fTriggered = false;
	boolean fPostponeEachTime;

	public Delayer( int milliseconds, Callback callback, boolean fPostponeEachTime )
	{
		this.milliseconds = milliseconds;
		this.callback = callback;
		this.fPostponeEachTime = fPostponeEachTime;
	}

	public void trigger()
	{
		// if an action is already registered, postpone it
		if( fTriggered )
		{
			if( fPostponeEachTime )
			{
				reallyDoTimer.cancel();
				reallyDoTimer.schedule( milliseconds );
			}
			return;
		}

		// schedule action ...

		fTriggered = true;

		reallyDoTimer.schedule( milliseconds );
	}

	Timer reallyDoTimer = new Timer()
	{
		@Override
		public void run()
		{
			fTriggered = false;
			reallyDoTimer.cancel();

			callback.onDelayedEvent();
			
			reallyDoTimer.cancel();
		}
	};
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy