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");
}
}
|