org.pentaho.gwt.widgets.client.buttons.ProgressIndicatorWidget.java Source code

Java tutorial

Introduction

Here is the source code for org.pentaho.gwt.widgets.client.buttons.ProgressIndicatorWidget.java

Source

/*!
 * 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;
    }
}