/*! * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * Copyright (c) 2002-2013 Pentaho Corporation.. All rights reserved. */ package org.pentaho.gwt.widgets.client.buttons; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.ui.DeckPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Widget; public class ProgressIndicatorWidget extends SimplePanel { public static final int STOP_DELAY_TIMER = 500; public static final int EXPIRATION_DURATION = 1000 * 60; public static final int PRESSED_DECK = 1; public static final int UNPRESSED_DECK = 0; protected int currentShownWidget; protected Widget managedObject; protected DeckPanel buttonPanel; public ProgressIndicatorWidget( Widget widget ) { managedObject = widget; buttonPanel = new DeckPanel(); buttonPanel.add( managedObject ); buttonPanel.setWidth( "100%" ); buttonPanel.setHeight( "100%" ); managedObject.setWidth( "auto" ); managedObject.setStylePrimaryName( "pentaho-button" ); Image image = new Image( GWT.getModuleBaseURL() + "images/progress_spinner.gif" ); //$NON-NLS-1$ image.setStylePrimaryName( "progress-image" ); image.setWidth( "auto" ); image.setHeight( "auto" ); buttonPanel.add( image ); buttonPanel.setStylePrimaryName( "progress-indicator-button" ); this.setWidget( buttonPanel ); this.setHeight( "100%" ); this.setWidth( "auto" ); buttonPanel.showWidget( UNPRESSED_DECK ); } public void inProgress( boolean inProgress ) { if ( inProgress ) { start(); } else { stop(); } } private void start() { if ( currentShownWidget == UNPRESSED_DECK ) { buttonPanel.showWidget( PRESSED_DECK ); setCurrentShownWidget( PRESSED_DECK ); Timer timer = new Timer() { public void run() { stop(); } }; timer.schedule( EXPIRATION_DURATION ); } } private void stop() { Timer delay = new Timer() { @Override public void run() { if ( currentShownWidget == PRESSED_DECK ) { buttonPanel.showWidget( UNPRESSED_DECK ); setCurrentShownWidget( UNPRESSED_DECK ); } } }; delay.schedule( STOP_DELAY_TIMER ); } private void setCurrentShownWidget( int currentShownWidget ) { this.currentShownWidget = currentShownWidget; } public Widget getManagedObject() { return managedObject; } }