package org.ovirt.engine.ui.common.widget.tab; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.ui.PushButton; /** * The {@code RepeatingPushButton} allows the user to press and hold down the button while an action is fired on a * specified interval. This for instance allows for smooth scrolling actions on the {@code ScrollableTabBar}. */ public class RepeatingPushButton extends PushButton { /** * The repeating period, in milliseconds. */ private int period; /** * The timer used to repeat. */ private final Timer timer; /** * The constructor */ public RepeatingPushButton() { super(); timer = new Timer() { @Override public void run() { RepeatingPushButton.super.onClick(); } }; } /** * Set the repeating interval in milliseconds. * @param interval The interval in milliseconds. */ public void setRepeatInterval(int interval) { this.period = interval; } /** * Called when the user finished clicking on this button. */ @Override protected void onClick(){ timer.cancel(); super.onClick(); } /** * Called when the user aborts a click in progress; for example, * by dragging the mouse outside of the button before releasing * the mouse button. */ @Override protected void onClickCancel(){ timer.cancel(); super.onClickCancel(); } /** * Called when the user begins to click on this button. */ @Override protected void onClickStart(){ timer.scheduleRepeating(period); super.onClickStart(); } }