UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

146 lines (116 loc) 3.29 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2009 1&1 Internet AG, Germany, http://www.1und1.de License: MIT: https://opensource.org/licenses/MIT See the LICENSE file in the project's top-level directory for details. Authors: * Fabian Jakobs (fjakobs) ************************************************************************ */ /** * Timer, which accelerates after each interval. The initial delay and the * interval time can be set using the properties {@link #firstInterval} * and {@link #interval}. The {@link #interval} events will be fired with * decreasing interval times while the timer is running, until the {@link #minimum} * is reached. The {@link #decrease} property sets the amount of milliseconds * which will decreased after every firing. * * This class is e.g. used in the {@link qx.ui.form.RepeatButton} and * {@link qx.ui.form.HoverButton} widgets. * * NOTE: Instances of this class must be disposed of after use * */ qx.Class.define("qx.event.AcceleratingTimer", { extend : qx.core.Object, implement : [ qx.core.IDisposable ], construct : function() { this.base(arguments); this.__timer = new qx.event.Timer(this.getInterval()); this.__timer.addListener("interval", this._onInterval, this); }, events : { /** This event if fired each time the interval time has elapsed */ "interval" : "qx.event.type.Event" }, properties : { /** * Interval used after the first run of the timer. Usually a smaller value * than the "firstInterval" property value to get a faster reaction. */ interval : { check : "Integer", init : 100 }, /** * Interval used for the first run of the timer. Usually a greater value * than the "interval" property value to a little delayed reaction at the first * time. */ firstInterval : { check : "Integer", init : 500 }, /** This configures the minimum value for the timer interval. */ minimum : { check : "Integer", init : 20 }, /** Decrease of the timer on each interval (for the next interval) until minTimer reached. */ decrease : { check : "Integer", init : 2 } }, members : { __timer : null, __currentInterval : null, /** * Reset and start the timer. */ start : function() { this.__timer.setInterval(this.getFirstInterval()); this.__timer.start(); }, /** * Stop the timer */ stop : function() { this.__timer.stop(); this.__currentInterval = null; }, /** * Interval event handler */ _onInterval : function() { this.__timer.stop(); if (this.__currentInterval == null) { this.__currentInterval = this.getInterval(); } this.__currentInterval = Math.max( this.getMinimum(), this.__currentInterval - this.getDecrease() ); this.__timer.setInterval(this.__currentInterval); this.__timer.start(); this.fireEvent("interval"); } }, destruct : function() { this._disposeObjects("__timer"); } });