On Thu, Aug 15, 2013 at 8:13 AM, Mark Miesfeld <miesfeld@gmail.com> wrote:

Here is a simple example using a ProgressDialog:

Art,

Here is a second example using a ProgressDialog.  It is exactly like the first example, except it steps the progress bar rather than using marquee mode.  The only changes are in the longTask() method.

Typically you use marquee mode when you want to show that your application is not hung, is making progress, but your long task is not easily broken up into distinct increments.

In my example, we are using a set number of loops, so it is easy to break the task into distinct increments.

/* Example using the ProgressDialog class, longTaskStep.rex */

    .application~setDefaults('O', , .false)
    .constDir['IDC_PB_FAKE1'] = 100
    .constDir['IDC_PB_FAKE2'] = 101
    .constDir['IDC_PB_FAKE3'] = 102
    .constDir['IDC_PB_QUERY'] = 103

    dlg = .SQLQueryDialog~new
    dlg~execute("SHOWTOP", IDI_DLG_OOREXX)

::requires "ooDialog.cls"

::class 'SQLQueryDialog' subclass UserDialog

::method init
    forward class (super) continue

    self~create(30, 30, 257, 123, "Execute SQL Dialog", "CENTER")

::method defineDialog

    self~createPushButton(IDC_PB_FAKE1, 10, 10, 50, 14, "", "Fake One")
    self~createPushButton(IDC_PB_FAKE2, 70, 10, 50, 14, "", "Fake Two")
    self~createPushButton(IDC_PB_FAKE3, 10, 35, 50, 14, "", "Fake Three")
    self~createPushButton(IDC_PB_QUERY, 10, 60, 50, 14, "", "SQL Query", execSQL)
    self~createPushButton(IDOK, 142, 99, 50, 14, "DEFAULT", "Ok")
    self~createPushButton(IDCANCEL, 197, 99, 50, 14, , "Cancel")


::method execSQL unguarded

    self~start(longTask)
    return 0

::method longTask unguarded

    count = 1000
    step  = 10
    msg   = 'Executing an imaginary long-running task. This will take some time.'

    pbDlg = .ProgressDialog~new( , msg, 0, count, step)

    pbDlg~canCancel = .true

    a = .Alerter~new
    pbDlg~setInterruptible(a)

    self~disable
    pbDlg~begin
    pbDlg~updateStatus('0 loops executed')

    do i = 1 to count
        j = SysSleep(.1)

        if i // step = 0 then do
            pbDlg~increase
            pbDlg~updateStatus(i 'loops executed')
        end

        if a~isCanceled then do
            pbDlg~updateStatus('canceled after' i 'loops executed')
            r = SysSleep(1.5)
            leave
        end
    end

    pbDlg~endNow
    self~enable

--
Mark Miesfeld