tags:

views:

31

answers:

1

I have built a long running script to which I have added a progress bar with the following code:

function StartProgressBar()
   gaugeProgress = iup.gaugeProgress{}
   gaugeProgress.show_text = "YES"
   gaugeProgress.expand = "HORIZONTAL"
   dlgProgress = iup.dialog{gaugeProgress; title = "Note Replacement in Progress"}
   dlgProgress.size = "QUARTERxEIGHTH"
   dlgProgress.menubox = "NO"  --  Remove Windows close button and menu.
   dlgProgress:showxy(iup.CENTER, iup.CENTER)  --  Put up Progress Display 
   return dlgProgress
end

This is called before the loop and the progress bar updated during the loop (I am not calling MainLoop). At the end of the process I call dlgProgress.destroy to clear it.

As long as I don't take focus from the progress bar it works fine, but if focus is lost the program crashes, so I am sure I am doing this the wrong way. Can any one tell me the correct way. A detailed google did not find me any examples for iup, lua progress bars.

Thank you in advance.

+1  A: 

Here is a working sample.

require "iuplua"

local cancelflag
local gaugeProgress

local function StartProgressBar()
    cancelbutton = iup.button {
        title = "Cancel",
        action=function()
            cancelflag = true
            return iup.CLOSE
        end
    }
    gaugeProgress = iup.progressbar{ expand="HORIZONTAL" }
    dlgProgress = iup.dialog{
        title = "Note Replacement in Progress",
        dialogframe = "YES", border = "YES",
        iup.vbox {
            gaugeProgress,
            cancelbutton,
    }
    }
    dlgProgress.size = "QUARTERxEIGHTH"
    dlgProgress.menubox = "NO"  --  Remove Windows close button and menu.
    dlgProgress.close_cb = cancelbutton.action
    dlgProgress:showxy(iup.CENTER, iup.CENTER)  --  Put up Progress Display
    return dlgProgress
end


dlg = StartProgressBar()
gaugeProgress.value = 0.0

for i=0,10000 do
    -- take one step in a long calculation
    -- update progress in some meaningful way
    gaugeProgress.value = i / 10000
    -- allow the dialog to process any messages
    iup.LoopStep()
    -- notice the user wanting to cancel and do something meaningful
    if cancelflag then break end
end

-- distinguish canceled from finished by inspecting the flag
print("cancled:",cancelflag)

I've used IUP 3.0, and its standard Lua binding here. The gauge control is named iup.progressbar in IUP 3.0, and was named iup.gauge in earlier versions. In earlier versions it may have been in the extended controls library as well.

I've tested this on Windows. One assumes it has similar behavior on other platforms, but your mileage may vary.

RBerteig
Thank so much for the response, just what I needed. I will plug it into my script now and see how it goes.
Jane T