view snippets/busyindicator/Snippet130.d @ 113:7194dba256b8

Add Snippet130. Thanks TomD.
author Frank Benoit <benoit@tionex.de>
date Fri, 11 Jul 2008 01:42:44 +0200
parents
children 8cdaac0dc743
line wrap: on
line source

/*******************************************************************************
 * 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));
    }
}