Mega Code Archive

 
Categories / Java / SWT Jface Eclipse
 

A progress bar dialog

import java.net.MalformedURLException; import java.net.URL; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Dialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.ProgressBar; import org.eclipse.swt.widgets.Shell; /**  * progress bar dialog.  * the first, you must know your app execute times,  * you need implement two method:   *   * process(int times);  * initGuage();  *   * you can implements method:  *    * cleanUp()  * doBefore()  * doAfter()   * @author yin_zhiguo  *         yin_zhiguo@hotmail.com  *   */ public abstract class ProgressBarDialog extends Dialog {     private Label processMessageLabel; //info of process finish      private Button cancelButton; //cancel button     private Composite cancelComposite;     private Label lineLabel;//     private Composite progressBarComposite;//     private CLabel message;//     private ProgressBar progressBar = null; //     private Object result; //     private Shell shell; //     private Display display = null;           protected volatile boolean isClosed = false;//closed state          protected int executeTime = 50;//process times     protected String processMessage = "process......";//procress info     protected String shellTitle = "Progress..."; //     protected Image processImage = SWTUtil.getImageOfMessage();//image     protected boolean mayCancel = true; //cancel     protected int processBarStyle = SWT.SMOOTH; //process bar style   public void setMayCancel(boolean mayCancel) {     this.mayCancel = mayCancel;   }     public void setExecuteTime(int executeTime) {         this.executeTime = executeTime;     }     public void setProcessImage(Image processImage) {     this.processImage = processImage;   }   public void setProcessMessage(String processInfo) {     this.processMessage = processInfo;   }   public ProgressBarDialog(Shell parent) {         super(parent);     }             public abstract void initGuage();     public Object open() {         createContents(); //create window         shell.open();         shell.layout();                  //start work         new ProcessThread(executeTime).start();         Display display = getParent().getDisplay();         while (!shell.isDisposed()) {             if (!display.readAndDispatch()) {                 display.sleep();             }         }         return result;     }     protected void createContents() {         shell = new Shell(getParent(), SWT.TITLE | SWT.PRIMARY_MODAL);         display = shell.getDisplay();         final GridLayout gridLayout = new GridLayout();         gridLayout.verticalSpacing = 10;         shell.setLayout(gridLayout);         shell.setSize(483, 181);         shell.setText(shellTitle);         final Composite composite = new Composite(shell, SWT.NONE);         composite.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));         composite.setLayout(new GridLayout());         message = new CLabel(composite, SWT.NONE);         message.setImage(processImage);         message.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));         message.setText(processMessage);         progressBarComposite = new Composite(shell, SWT.NONE);         progressBarComposite.setLayoutData(new GridData(GridData.FILL,                 GridData.CENTER, false, false));         progressBarComposite.setLayout(new FillLayout());         progressBar = new ProgressBar(progressBarComposite, processBarStyle);         progressBar.setMaximum(executeTime);         processMessageLabel = new Label(shell, SWT.NONE);         processMessageLabel.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, false, false));         lineLabel = new Label(shell, SWT.HORIZONTAL | SWT.SEPARATOR);         lineLabel.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, false, false));         cancelComposite = new Composite(shell, SWT.NONE);         cancelComposite.setLayoutData(new GridData(GridData.END,                 GridData.CENTER, false, false));         final GridLayout gridLayout_1 = new GridLayout();         gridLayout_1.numColumns = 2;         cancelComposite.setLayout(gridLayout_1);         cancelButton = new Button(cancelComposite, SWT.NONE);         cancelButton.addSelectionListener(new SelectionAdapter() {             public void widgetSelected(SelectionEvent e) {                 isClosed = true;                 //System.out.println(isClosed);             }         });         cancelButton.setLayoutData(new GridData(78, SWT.DEFAULT));         cancelButton.setText("cancel");         cancelButton.setEnabled(this.mayCancel);     }     protected abstract String process(int times);     protected void cleanUp()     {            }          protected void doBefore()     {            }          protected void doAfter()     {            }     class ProcessThread extends Thread {         private int max = 0;         private volatile boolean shouldStop = false;         ProcessThread(int max) {             this.max = max;         }         public void run() {           doBefore();             for (final int[] i = new int[] {1}; i[0] <= max; i[0]++)              {                 //                 final String info = process(i[0]);                 if (display.isDisposed()) {                     return;                 }                 display.syncExec(new Runnable() {                     public void run() {                         if (progressBar.isDisposed()) {                             return;                         }                         //                         processMessageLabel.setText(info);                         //                         progressBar.setSelection(i[0]);                         //                         if (i[0] == max || isClosed) {                             if (isClosed) {                                 shouldStop = true;//                                 cleanUp();//                             }                             shell.close();//                         }                     }                 });                 if (shouldStop) {                     break;                 }             }             doAfter();         }     }   public void setShellTitle(String shellTitle) {     this.shellTitle = shellTitle;   }   public void setProcessBarStyle(boolean pStyle) {     if(pStyle)       this.processBarStyle = SWT.SMOOTH;     else       this.processBarStyle = SWT.NONE;          } } class DemoProgressBar extends ProgressBarDialog {      private String[] info = null;      public DemoProgressBar(Shell parent) {        super(parent);    }      @Override   public void initGuage() {     info = new String[100];     for (int i = 0; i < info.length; i++) {       info[i] = "process task " + i + ".";     }     this.setExecuteTime(100);     this.setMayCancel(true);     this.setProcessMessage("please waiting....");     this.setShellTitle("Demo");   }   @Override   protected String process(int arg0) {     try{       Thread.sleep((long)(Math.random() * 300));     }catch(Exception e){e.printStackTrace();}          return info[arg0 - 1];   } } class SWTUtil {     private static ImageRegistry imageRegistry = new ImageRegistry();     private static Clipboard clipboard = new Clipboard(Display.getCurrent());          private static final String ___IMAGE_Of_MESSAGE = "";          static{       imageRegistry.put(___IMAGE_Of_MESSAGE, ImageDescriptor.createFromURL(newURL("file:icons/info2.gif")));     }     private SWTUtil(){}          public static URL newURL(String url_name) {         try {             return new URL(url_name);         } catch (MalformedURLException e) {             throw new RuntimeException("Malformed URL " + url_name, e);         }     }               public static void registryImage(String id, String urlName)     {       imageRegistry.put(id, ImageDescriptor.createFromURL(newURL(urlName)));     }               public static Image getImage(String id)     {       return imageRegistry.get(id);     }          public static Clipboard getClipboard() {         return clipboard;     }               public static Image getImageOfMessage()     {       return imageRegistry.get(___IMAGE_Of_MESSAGE);     } } class PBDialogDemo extends Shell {   public static void main(String args[]) {     try {       Display display = Display.getDefault();       PBDialogDemo shell = new PBDialogDemo(display, SWT.SHELL_TRIM);       shell.open();       shell.layout();       while (!shell.isDisposed()) {         if (!display.readAndDispatch())           display.sleep();       }     } catch (Exception e) {       e.printStackTrace();     }   }   public PBDialogDemo(Display display, int style) {     super(display, style);     createContents();   }   protected void createContents() {     setText("ProgressBar Dialog");     setSize(218, 98);     setLayout(new FillLayout());     final Button openProgressbarDialogButton = new Button(this, SWT.NONE);     openProgressbarDialogButton.addSelectionListener(new SelectionAdapter() {       public void widgetSelected(SelectionEvent e) {         DemoProgressBar dpb = new DemoProgressBar(PBDialogDemo.this);         dpb.initGuage();         dpb.open();       }     });     openProgressbarDialogButton.setText("Open ProgressBar Dialog");        }   protected void checkSubclass() {   } }                     ProgressBarDialog_src.zip( 20 k)