changeset 113:7194dba256b8

Add Snippet130. Thanks TomD.
author Frank Benoit <benoit@tionex.de>
date Fri, 11 Jul 2008 01:42:44 +0200
parents cfb304d22f28
children 0de3dab4d6e1 172947fc6a88
files snippets/busyindicator/Snippet130.d snippets/dsss.conf
diffstat 2 files changed, 112 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/snippets/busyindicator/Snippet130.d	Fri Jul 11 01:42:44 2008 +0200
@@ -0,0 +1,111 @@
+/*******************************************************************************
+ * 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));
+    }
+}
+
+
--- a/snippets/dsss.conf	Sun Jul 06 23:36:31 2008 +0200
+++ b/snippets/dsss.conf	Fri Jul 11 01:42:44 2008 +0200
@@ -16,6 +16,7 @@
 
 
 
+[busyindicator/Snippet130.d]
 [button/Snippet293.d]
 [canvas/Snippet21.d]
 [canvas/Snippet48.d]