"""
gtasklets demo program
"""
import gtk
import gtasklet
class Counter(gtasklet.Tasklet):
def __init__(self, dialog):
self.dialog = dialog
super(Counter, self).__init__()
def run(self):
timeout = gtasklet.WaitForTimeout(1000)
msgwait = gtasklet.WaitForMessages(accept='quit')
for i in xrange(10, 0, -1):
self.dialog.format_secondary_markup("Time left: %i seconds" % i)
yield timeout, msgwait
ev = gtasklet.get_event()
if isinstance(ev, gtasklet.Message) and ev.name == 'quit':
return
elif ev is timeout:
pass
else:
raise AssertionError
def main():
dialog = gtk.MessageDialog(parent=None, flags=0, type=gtk.MESSAGE_QUESTION,
buttons=gtk.BUTTONS_YES_NO,
message_format="Please answer Yes or No")
dialog.format_secondary_markup("Time left: ?? seconds")
dialog.show()
counter = Counter(dialog)
yield (gtasklet.WaitForTasklet(counter),
gtasklet.WaitForSignal(dialog, "response"),
gtasklet.WaitForSignal(dialog, "close"))
event = gtasklet.get_event()
if isinstance(event, gtasklet.WaitForSignal):
print "signal '%s', stopping counter" % event.signal
yield gtasklet.Message("quit", dest=counter) # stop the counter
if event.signal == 'close':
gtk.main_quit()
return
response = event.signal_args[0]
msgbox = gtk.MessageDialog(parent=dialog,
flags=gtk.DIALOG_DESTROY_WITH_PARENT,
type=gtk.MESSAGE_INFO,
buttons=gtk.BUTTONS_OK,
message_format=("Thank you "
"for your kind answer!"))
print "response was", response
if response == gtk.RESPONSE_YES:
msgbox.format_secondary_markup("Your response was Yes")
elif response == gtk.RESPONSE_NO:
msgbox.format_secondary_markup("Your response was No")
else:
## must have been a delete event
print "response was delete event"
gtk.main_quit()
return
msgbox.show()
print "showing dialog"
yield (gtasklet.WaitForSignal(msgbox, "response"),
gtasklet.WaitForSignal(msgbox, "close"))
print "event", gtasklet.get_event()
else:
## timeout must have exausted..
assert isinstance(event, gtasklet.WaitForTasklet)
msgbox = gtk.MessageDialog(parent=dialog,
flags=gtk.DIALOG_DESTROY_WITH_PARENT,
type=gtk.MESSAGE_WARNING,
buttons=gtk.BUTTONS_OK,
message_format="You're too slow!!")
msgbox.show()
yield (gtasklet.WaitForSignal(msgbox, "response"),
gtasklet.WaitForSignal(msgbox, "close"))
gtk.main_quit()
if __name__ == '__main__':
gtasklet.run(main())
gtk.main()