Mega Code Archive

 
Categories / Java / SWT Jface Eclipse
 

JFaces ProgressMonitorDialog

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