ShowProgress.java Source code

Java tutorial

Introduction

Here is the source code for ShowProgress.java

Source

import java.lang.reflect.InvocationTargetException;

import org.eclipse.jface.dialogs.*;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.operation.IRunnableWithProgress;

/**
 * This class demonstrates JFace's ProgressMonitorDialog class
 */
public class ShowProgress extends ApplicationWindow {
    /**
     * ShowProgress constructor
     */
    public ShowProgress() {
        super(null);
    }

    /**
     * Runs the application
     */
    public void run() {
        // Don't return from open() until window closes
        setBlockOnOpen(true);

        // Open the main window
        open();

        // Dispose the display
        Display.getCurrent().dispose();
    }

    /**
     * Configures the shell
     * 
     * @param shell the shell
     */
    protected void configureShell(Shell shell) {
        super.configureShell(shell);

        // Set the title bar text
        shell.setText("Show Progress");
    }

    /**
     * Creates the main window's contents
     * 
     * @param parent the main window
     * @return Control
     */
    protected Control createContents(Composite parent) {
        Composite composite = new Composite(parent, SWT.NONE);
        composite.setLayout(new GridLayout(1, true));

        // Create the indeterminate checkbox
        final Button indeterminate = new Button(composite, SWT.CHECK);
        indeterminate.setText("Indeterminate");

        // Create the ShowProgress button
        Button showProgress = new Button(composite, SWT.NONE);
        showProgress.setText("Show Progress");

        final Shell shell = parent.getShell();

        // Display the ProgressMonitorDialog
        showProgress.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent event) {
                try {
                    new ProgressMonitorDialog(shell).run(true, true,
                            new LongRunningOperation(indeterminate.getSelection()));
                } catch (InvocationTargetException e) {
                    MessageDialog.openError(shell, "Error", e.getMessage());
                } catch (InterruptedException e) {
                    MessageDialog.openInformation(shell, "Cancelled", e.getMessage());
                }
            }
        });

        parent.pack();
        return composite;
    }

    /**
     * The application entry point
     * 
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        new ShowProgress().run();
    }
}

/**
 * This class represents a long running operation
 */
class LongRunningOperation implements IRunnableWithProgress {
    // The total sleep time
    private static final int TOTAL_TIME = 10000;

    // The increment sleep time
    private static final int INCREMENT = 500;

    private boolean indeterminate;

    /**
     * LongRunningOperation constructor
     * 
     * @param indeterminate whether the animation is unknown
     */
    public LongRunningOperation(boolean indeterminate) {
        this.indeterminate = indeterminate;
    }

    /**
     * Runs the long running operation
     * 
     * @param monitor the progress monitor
     */
    public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
        monitor.beginTask("Running long running operation", indeterminate ? IProgressMonitor.UNKNOWN : TOTAL_TIME);
        for (int total = 0; total < TOTAL_TIME && !monitor.isCanceled(); total += INCREMENT) {
            Thread.sleep(INCREMENT);
            monitor.worked(INCREMENT);
            if (total == TOTAL_TIME / 2)
                monitor.subTask("Doing second half");
        }
        monitor.done();
        if (monitor.isCanceled())
            throw new InterruptedException("The long running operation was cancelled");
    }
}