Kaydet (Commit) 1d63d8c8 authored tarafından Jack Jansen's avatar Jack Jansen

Fixes to progress bar by SDM, modified by Jack:

- Window has a titlebar, and title() changes it
- The label is changed with label()
- The window is now movable-modal
- Cancel is now called Stop, and works.
üst 789a1613
...@@ -5,6 +5,8 @@ AskString(prompt, default) -- ask for a string, display OK and Cancel buttons. ...@@ -5,6 +5,8 @@ AskString(prompt, default) -- ask for a string, display OK and Cancel buttons.
AskYesNoCancel(question, default) -- display a question and Yes, No and Cancel buttons. AskYesNoCancel(question, default) -- display a question and Yes, No and Cancel buttons.
bar = Progress(label, maxvalue) -- Display a progress bar bar = Progress(label, maxvalue) -- Display a progress bar
bar.set(value) -- Set value bar.set(value) -- Set value
bar.inc( *amount ) -- increment value by amount (default=1)
bar.label( *newlabel ) -- get or set text label.
More documentation in each function. More documentation in each function.
This module uses DLOG resources 256, 257 and 258. This module uses DLOG resources 256, 257 and 258.
...@@ -14,7 +16,7 @@ Based upon STDWIN dialogs with the same names and functions. ...@@ -14,7 +16,7 @@ Based upon STDWIN dialogs with the same names and functions.
from Dlg import GetNewDialog, SetDialogItemText, GetDialogItemText, ModalDialog from Dlg import GetNewDialog, SetDialogItemText, GetDialogItemText, ModalDialog
import Qd import Qd
import QuickDraw import QuickDraw
import Dlg,Win,Evt,Events # sdm7g
def Message(msg): def Message(msg):
"""Display a MESSAGE string. """Display a MESSAGE string.
...@@ -110,18 +112,43 @@ def AskYesNoCancel(question, default = 0): ...@@ -110,18 +112,43 @@ def AskYesNoCancel(question, default = 0):
if n == 2: return 1 if n == 2: return 1
if n == 3: return 0 if n == 3: return 0
if n == 4: return -1 if n == 4: return -1
screenbounds = Qd.qd.screenBits.bounds
screenbounds = screenbounds[0]+4, screenbounds[1]+4, \
screenbounds[2]-4, screenbounds[3]-4
class ProgressBar: class ProgressBar:
def __init__(self, label="Working...", maxval=100): def __init__(self, title="Working...", maxval=100, label=""):
self.label = label
self.maxval = maxval self.maxval = maxval
self.curval = -1 self.curval = -1
self.d = GetNewDialog(259, -1) self.d = GetNewDialog(259, -1)
tp, text_h, rect = self.d.GetDialogItem(2) self.title(title)
SetDialogItemText(text_h, label) self.label(label)
self._update(0) self._update(0)
def __del__( self ):
self.d.HideWindow()
del self.d
def title(self, newstr=""):
"""title(text) - Set title of progress window"""
w = self.d.GetDialogWindow()
w.SetWTitle(newstr)
def label( self, *newstr ):
"""label(text) - Set text in progress box"""
if newstr:
self._label = newstr[0]
tp, text_h, rect = self.d.GetDialogItem(2)
SetDialogItemText(text_h, self._label)
def _update(self, value): def _update(self, value):
self.d.BringToFront()
tp, h, bar_rect = self.d.GetDialogItem(3) tp, h, bar_rect = self.d.GetDialogItem(3)
Qd.SetPort(self.d) Qd.SetPort(self.d)
...@@ -143,28 +170,64 @@ class ProgressBar: ...@@ -143,28 +170,64 @@ class ProgressBar:
Qd.BackColor(QuickDraw.whiteColor) Qd.BackColor(QuickDraw.whiteColor)
# Test for cancel button # Test for cancel button
if ModalDialog(_ProgressBar_filterfunc) == 1:
raise KeyboardInterrupt ready, ev = Evt.WaitNextEvent( Events.mDownMask, 1 )
if ready :
what,msg,when,where,mod = ev
part = Win.FindWindow(where)[0]
if Dlg.IsDialogEvent(ev):
ds = Dlg.DialogSelect(ev)
if ds[0] and ds[1] == self.d and ds[-1] == 1:
raise KeyboardInterrupt, ev
else:
if part == 4: # inDrag
self.d.DragWindow(where, screenbounds)
else:
MacOS.HandleEvent(ev)
def set(self, value): def set(self, value):
"""set(value) - Set progress bar position"""
if value < 0: value = 0 if value < 0: value = 0
if value > self.maxval: value = self.maxval if value > self.maxval: value = self.maxval
self.curval = value
self._update(value) self._update(value)
def _ProgressBar_filterfunc(*args): def inc(self, n=1):
return 2 # Disabled, for now. """inc(amt) - Increment progress bar position"""
self.set(self.curval + n)
def test(): def test():
import time
import MacOS
Message("Testing EasyDialogs.") Message("Testing EasyDialogs.")
ok = AskYesNoCancel("Do you want to proceed?") ok = AskYesNoCancel("Do you want to proceed?")
if ok > 0: if ok > 0:
s = AskString("Enter your first name") s = AskString("Enter your first name")
Message("Thank you,\015%s" % `s`) Message("Thank you,\015%s" % `s`)
bar = ProgressBar("Counting...", 100) text = ( "Working Hard...", "Hardly Working..." ,
for i in range(100): "So far, so good!", "Keep on truckin'" )
bar.set(i) bar = ProgressBar("Progress, progress...", 100)
del bar try:
appsw = MacOS.EnableAppswitch(0)
for i in range(100):
bar.set(i)
time.sleep(0.1)
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.
finally:
del bar
MacOS.EnableAppswitch(appsw)
if __name__ == '__main__': if __name__ == '__main__':
test() try:
test()
except KeyboardInterrupt:
Message("Operation Canceled.")
This diff is collapsed.
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