Mercurial > projects > dwt-samples
diff snippets/busyindicator/Snippet130.d @ 117:8cdaac0dc743
Added more snippets from TomD
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sat, 12 Jul 2008 20:09:06 +0200 |
parents | 7194dba256b8 |
children |
line wrap: on
line diff
--- a/snippets/busyindicator/Snippet130.d Sat Jul 12 17:54:42 2008 +0200 +++ b/snippets/busyindicator/Snippet130.d Sat Jul 12 20:09:06 2008 +0200 @@ -1,111 +1,129 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ - -/* - * BusyIndicator example snippet: display busy cursor during long running task - * - * For a list of all SWT example snippets see - * http://www.eclipse.org/swt/snippets/ - */ -module busyindicator.Snippet130; - -import dwt.DWT; -import dwt.events.SelectionAdapter; -import dwt.events.SelectionEvent; -import dwt.layout.GridLayout; -import dwt.layout.GridData; -import dwt.widgets.Shell; -import dwt.widgets.Button; -import dwt.widgets.Display; -import dwt.widgets.Shell; -import dwt.widgets.Text; - - -import dwt.custom.BusyIndicator; - -import dwt.dwthelper.utils; -import dwt.dwthelper.Runnable; -import dwt.dwthelper.System; - -import tango.core.Thread; -import tango.util.Convert; -import tango.util.log.Trace; - -void main(String[] args){ - Snippet130.main(args); -} - -public class Snippet130 { - - public static void main(String[] args) { - Display display = new Display(); - Shell shell = new Shell(display); - shell.setLayout(new GridLayout()); - Text text = new Text(shell, DWT.MULTI | DWT.BORDER | DWT.V_SCROLL); - text.setLayoutData(new GridData(GridData.FILL_BOTH)); - int[1] nextId; - Button b = new Button(shell, DWT.PUSH); - b.setText("invoke long running job"); - - b.addSelectionListener(new class() SelectionAdapter { - public void widgetSelected(SelectionEvent e) { - Runnable longJob = new class() Runnable { - bool done = false; - int id; - private void runThread(){ - id = nextId[0]++; - display.syncExec( dgRunnable( &printStart, text, id )); - for (int i = 0; i < 6; i++) { - if (display.isDisposed()) return; - Trace.formatln("do task that takes a long time in a separate thread {} {}/6", id, i); - Thread.sleep(0.500); - } - if (display.isDisposed()) return; - display.syncExec( dgRunnable( &printEnd , text, id )); // display.syncExec - done = true; - display.wake(); - } - public void run() { - Thread thread = new Thread( &runThread ); - thread.start(); - - while (!done && !shell.isDisposed()) { - if (!display.readAndDispatch()) - display.sleep(); - } - } - }; // Runnable longJob = ... - BusyIndicator.showWhile(display, longJob); - } // widgetSelected(); - }); // addSelectionListener - - - shell.setSize(250, 150); - shell.open(); - while (!shell.isDisposed()) { - if (!display.readAndDispatch()) - display.sleep(); - } - display.dispose(); - } - private void printStart(Text text, int id ) { - if (text.isDisposed()) return; - Trace.formatln( "Start long running task {}", id ); - text.append("\nStart long running task "~to!(char[])(id)); - } - private void printEnd(Text text, int id ) { - if (text.isDisposed()) return; - Trace.formatln( "Completed long running task {}", id ); - text.append("\nCompleted long running task "~to!(char[])(id)); - } -} - - +/******************************************************************************* + * Copyright (c) 2000, 2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * D Port: + * Thomas Demmer <t_demmer AT web DOT de> + *******************************************************************************/ +module busyindicator.Snippet130; +/* + * BusyIndicator example snippet: display busy cursor during long running task + * + * For a list of all SWT example snippets see + * http://www.eclipse.org/swt/snippets/ + */ +import dwt.DWT; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.layout.GridLayout; +import dwt.layout.GridData; +import dwt.widgets.Shell; +import dwt.widgets.Button; +import dwt.widgets.Display; +import dwt.widgets.Shell; +import dwt.widgets.Text; + + +import dwt.custom.BusyIndicator; + +import dwt.dwthelper.utils; +import dwt.dwthelper.Runnable; +import dwt.dwthelper.System; + +import tango.core.Thread; +import tango.io.Stdout; +import tango.util.Convert; +import tango.util.log.Trace; + + +void main(String[] args){ + Snippet130.main(args); +} + +public class Snippet130 { + + public static void main(String[] args) { + Display display = new Display(); + Shell shell = new Shell(display); + shell.setLayout(new GridLayout()); + Text text = new Text(shell, DWT.MULTI | DWT.BORDER | DWT.V_SCROLL); + text.setLayoutData(new GridData(GridData.FILL_BOTH)); + int[] nextId = new int[1]; + Button b = new Button(shell, DWT.PUSH); + b.setText("invoke long running job"); + + b.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + Runnable longJob = new class() Runnable { + bool done = false; + int id; + public void run() { + Thread thread = new Thread({ + id = nextId[0]++; + display.syncExec(new class() Runnable { + public void run() { + if (text.isDisposed()) return; + text.append("\nStart long running task "~to!(char[])(id)); + } + }); // display.syncExec + /* + * This crashes when more than 1 thread gets created. THD + for (int i = 0; i < 100000; i++) { + if (display.isDisposed()) return; + Stdout.formatln("do task that takes a long time in a separate thread {}", id); + } + */ + // This runs fine + for (int i = 0; i < 6; i++) { + if (display.isDisposed()) return; + Trace.formatln("do task that takes a long time in a separate thread {} {}/6", id, i); + Thread.sleep(0.500); + } + + if (display.isDisposed()) return; + display.syncExec(new class() Runnable { + public void run() { + if (text.isDisposed()) return; + text.append("\nCompleted long running task "~to!(char[])(id)); + } + }); // display.syncExec + done = true; + display.wake(); + }); // thread = ... + thread.start(); + + while (!done && !shell.isDisposed()) { + if (!display.readAndDispatch()) + display.sleep(); + } + } + }; // Runnable longJob = ... + BusyIndicator.showWhile(display, longJob); + } // widgetSelected(); + }); // addSelectionListener + + + shell.setSize(250, 150); + shell.open(); + while (!shell.isDisposed()) { + if (!display.readAndDispatch()) + display.sleep(); + } + display.dispose(); + } + private void printStart(Text text, int id ) { + if (text.isDisposed()) return; + Trace.formatln( "Start long running task {}", id ); + text.append("\nStart long running task "~to!(char[])(id)); + } + private void printEnd(Text text, int id ) { + if (text.isDisposed()) return; + Trace.formatln( "Completed long running task {}", id ); + text.append("\nCompleted long running task "~to!(char[])(id)); + } +}