Patch by Dean Draayer: support for indeterminate progress bars. You

get these by specifying maxval=0, which is now also the default.

Untested.
This commit is contained in:
Jack Jansen 2001-08-27 15:24:07 +00:00
parent e259e5980c
commit 911e87de6f
1 changed files with 37 additions and 27 deletions

View File

@ -214,19 +214,19 @@ screenbounds = Qd.qd.screenBits.bounds
screenbounds = screenbounds[0]+4, screenbounds[1]+4, \
screenbounds[2]-4, screenbounds[3]-4
kControlProgressBarIndeterminateTag = 'inde' # from Controls.py
class ProgressBar:
def __init__(self, title="Working...", maxval=100, label="", id=263):
def __init__(self, title="Working...", maxval=0, label="", id=263):
self.w = None
self.d = None
self.maxval = maxval
self.curval = -1
self.d = GetNewDialog(id, -1)
self.w = self.d.GetDialogWindow()
self.label(label)
self._update(0)
self.d.AutoSizeDialog()
self.title(title)
self.set(0, maxval)
self.d.AutoSizeDialog()
self.w.ShowWindow()
self.d.DrawDialog()
@ -248,24 +248,23 @@ class ProgressBar:
if newstr:
self._label = lf2cr(newstr[0])
text_h = self.d.GetDialogItemAsControl(2)
SetDialogItemText(text_h, self._label)
SetDialogItemText(text_h, self._label)
def _update(self, value):
maxval = self.maxval
if maxval == 0:
# XXXX Quick fix. Should probably display an unknown duration
value = 0
maxval = 1
if maxval > 32767:
value = int(value/(maxval/32767.0))
maxval = 32767
progbar = self.d.GetDialogItemAsControl(3)
progbar.SetControlMaximum(maxval)
progbar.SetControlValue(value)
if maxval == 0: # an indeterminate bar
Ctl.IdleControls(self.w) # spin the barber pole
else: # a determinate bar
if maxval > 32767:
value = int(value/(maxval/32767.0))
maxval = 32767
progbar = self.d.GetDialogItemAsControl(3)
progbar.SetControlMaximum(maxval)
progbar.SetControlValue(value) # set the bar length
# Test for cancel button
ready, ev = Evt.WaitNextEvent( Events.mDownMask, 1 )
if ready :
if ready :
what,msg,when,where,mod = ev
part = Win.FindWindow(where)[0]
if Dlg.IsDialogEvent(ev):
@ -286,8 +285,15 @@ class ProgressBar:
"""set(value) - Set progress bar position"""
if max != None:
self.maxval = max
if value < 0: value = 0
if value > self.maxval: value = self.maxval
bar = self.d.GetDialogItemAsControl(3)
if max <= 0: # indeterminate bar
bar.SetControlData(0,kControlProgressBarIndeterminateTag,'\x01')
else: # determinate bar
bar.SetControlData(0,kControlProgressBarIndeterminateTag,'\x00')
if value < 0:
value = 0
elif value > self.maxval:
value = self.maxval
self.curval = value
self._update(value)
@ -540,18 +546,22 @@ def test():
Message("%s has no secret nickname"%s)
else:
Message("Hello everybody!!\nThe secret nickname of %s is %s!!!"%(s, s2))
text = ( "Working Hard...", "Hardly Working..." ,
text = ( "Working Hard...", "Hardly Working..." ,
"So far, so good!", "Keep on truckin'" )
bar = ProgressBar("Progress, progress...", 100)
bar = ProgressBar("Progress, progress...", 0, label="Ramping up...")
try:
appsw = MacOS.SchedParams(1, 0)
for i in range(100):
for i in xrange(20):
bar.inc()
time.sleep(0.05)
bar.set(0,100)
for i in xrange(100):
bar.set(i)
time.sleep(0.1)
time.sleep(0.05)
if i % 10 == 0:
bar.label(text[(i/10) % 4])
bar.label("Done.")
time.sleep(0.3) # give'em a chance to see the done.
time.sleep(1.0) # give'em a chance to see "Done."
finally:
del bar
apply(MacOS.SchedParams, appsw)