Kaydet (Commit) 911e87de authored tarafından Jack Jansen's avatar Jack Jansen

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

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

Untested.
üst e259e598
...@@ -214,19 +214,19 @@ screenbounds = Qd.qd.screenBits.bounds ...@@ -214,19 +214,19 @@ screenbounds = Qd.qd.screenBits.bounds
screenbounds = screenbounds[0]+4, screenbounds[1]+4, \ screenbounds = screenbounds[0]+4, screenbounds[1]+4, \
screenbounds[2]-4, screenbounds[3]-4 screenbounds[2]-4, screenbounds[3]-4
kControlProgressBarIndeterminateTag = 'inde' # from Controls.py
class ProgressBar: 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.w = None
self.d = None self.d = None
self.maxval = maxval
self.curval = -1
self.d = GetNewDialog(id, -1) self.d = GetNewDialog(id, -1)
self.w = self.d.GetDialogWindow() self.w = self.d.GetDialogWindow()
self.label(label) self.label(label)
self._update(0)
self.d.AutoSizeDialog()
self.title(title) self.title(title)
self.set(0, maxval)
self.d.AutoSizeDialog()
self.w.ShowWindow() self.w.ShowWindow()
self.d.DrawDialog() self.d.DrawDialog()
...@@ -248,24 +248,23 @@ class ProgressBar: ...@@ -248,24 +248,23 @@ class ProgressBar:
if newstr: if newstr:
self._label = lf2cr(newstr[0]) self._label = lf2cr(newstr[0])
text_h = self.d.GetDialogItemAsControl(2) text_h = self.d.GetDialogItemAsControl(2)
SetDialogItemText(text_h, self._label) SetDialogItemText(text_h, self._label)
def _update(self, value): def _update(self, value):
maxval = self.maxval maxval = self.maxval
if maxval == 0: if maxval == 0: # an indeterminate bar
# XXXX Quick fix. Should probably display an unknown duration Ctl.IdleControls(self.w) # spin the barber pole
value = 0 else: # a determinate bar
maxval = 1 if maxval > 32767:
if maxval > 32767: value = int(value/(maxval/32767.0))
value = int(value/(maxval/32767.0)) maxval = 32767
maxval = 32767 progbar = self.d.GetDialogItemAsControl(3)
progbar = self.d.GetDialogItemAsControl(3) progbar.SetControlMaximum(maxval)
progbar.SetControlMaximum(maxval) progbar.SetControlValue(value) # set the bar length
progbar.SetControlValue(value)
# Test for cancel button # Test for cancel button
ready, ev = Evt.WaitNextEvent( Events.mDownMask, 1 ) ready, ev = Evt.WaitNextEvent( Events.mDownMask, 1 )
if ready : if ready :
what,msg,when,where,mod = ev what,msg,when,where,mod = ev
part = Win.FindWindow(where)[0] part = Win.FindWindow(where)[0]
if Dlg.IsDialogEvent(ev): if Dlg.IsDialogEvent(ev):
...@@ -286,8 +285,15 @@ class ProgressBar: ...@@ -286,8 +285,15 @@ class ProgressBar:
"""set(value) - Set progress bar position""" """set(value) - Set progress bar position"""
if max != None: if max != None:
self.maxval = max self.maxval = max
if value < 0: value = 0 bar = self.d.GetDialogItemAsControl(3)
if value > self.maxval: value = self.maxval 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.curval = value
self._update(value) self._update(value)
...@@ -540,18 +546,22 @@ def test(): ...@@ -540,18 +546,22 @@ def test():
Message("%s has no secret nickname"%s) Message("%s has no secret nickname"%s)
else: else:
Message("Hello everybody!!\nThe secret nickname of %s is %s!!!"%(s, s2)) 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'" ) "So far, so good!", "Keep on truckin'" )
bar = ProgressBar("Progress, progress...", 100) bar = ProgressBar("Progress, progress...", 0, label="Ramping up...")
try: try:
appsw = MacOS.SchedParams(1, 0) 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) bar.set(i)
time.sleep(0.1) time.sleep(0.05)
if i % 10 == 0: if i % 10 == 0:
bar.label(text[(i/10) % 4]) bar.label(text[(i/10) % 4])
bar.label("Done.") 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: finally:
del bar del bar
apply(MacOS.SchedParams, appsw) apply(MacOS.SchedParams, appsw)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment