June 21, 2008
On Sat, 21 Jun 2008 15:35:33 +0200
Frank Benoit <keinfarbton@googlemail.com> wrote:

> Frank Benoit schrieb:
> > i had tested it with dmd 1.031 ... and indeed with dmd 1.028 it crashes.
> > Your first example code should work now.
> > With the
> >  > dialog.run(false, true, dgIRunnableWithProgress(&run));
> > there is still a problem :/
> 
> Now it works with fork=false, but another anon class workaround was necessary.
> 
> Also a fix in the example code is needed to make fork=false work. From
> the ProgressMonitorDialog doc:
> If fork is set to false, the runnable will run in the UI thread and it
> is the runnable's responsibility to call Display.readAndDispatch()  to
> ensure UI responsiveness.
> 
> The example code looks now like this:
> 
> import dwt.DWT;
> import dwt.layout.FillLayout;
> import dwt.widgets.Display;
> import dwt.widgets.Shell;
> import dwt.widgets.Listener;
> import dwt.widgets.Event;
> import dwt.widgets.Button;
> 
> import dwtx.jface.dialogs.PopupDialog;
> import dwt.dwthelper.utils;
> 
> import dwtx.jface.dialogs.ProgressMonitorDialog;
> import dwtx.core.runtime.IProgressMonitor;
> import dwtx.jface.operation.IRunnableWithProgress;
> 
> import tango.core.Thread;
> 
> version=NOFORK;
> 
> void handleSelection(Event e, Shell shell) {
>      void run(IProgressMonitor monitor) {
>          monitor.beginTask("generate", 30);
>          for(int i=0; i<100; i++) {
>              if(monitor.isCanceled()) {
>                  return;
>              }
>              monitor.worked(1);
>              Thread.sleep(0.050);
>              version(NOFORK) Display.getCurrent().readAndDispatch();
>          }
>          monitor.done();
>          version(NOFORK) Display.getCurrent().readAndDispatch();
>      }
>      auto dialog = new ProgressMonitorDialog(shell);
>      version(NOFORK) {
>          dialog.run(false, true, dgIRunnableWithProgress(&run));
>      } else {
>          dialog.run(true, true, dgIRunnableWithProgress(&run));
>      }
> }
> 
> void main() {
>      final Display display = new Display();
>      final Shell shell = new Shell(display);
>      shell.setLayout(new FillLayout());
>      Button button = new Button(shell, DWT.PUSH);
>      button.setText("&OK");
> 
>      button.addListener(DWT.Selection,
>          dgListener(&handleSelection, shell));
> 
>      shell.pack();
>      shell.open();
>      while (!shell.isDisposed()) {
>          if (!display.readAndDispatch()) display.sleep();
>      }
>      display.dispose();
> }
> 


thanks a lot!



-- 
yidabu <yidabu.spam@gmail.com> http://www.dsource.org/projects/dwin

D 语言-中文(D Chinese): http://www.d-programming-language-china.org/ http://bbs.d-programming-language-china.org/ http://dwin.d-programming-language-china.org/ http://scite4d.d-programming-language-china.org/


1 2
Next ›   Last »