import gtk import gobject from datetime import datetime class CmdWindow: def __init__(self, handle_activated): self.starttime = None self.handle_activated = handle_activated self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.set_geometry_hints(min_width = 350); self.window.connect("delete_event", self.delete_event) self.window.connect("destroy", self.destroy_event) self.entry = gtk.Entry() self.entry.connect("activate", self.activate_event) self.button = gtk.Button(stock = gtk.STOCK_OK) self.button.connect("clicked", self.activate_event) self.status_hbox = gtk.HBox() self.status_label = gtk.Label('') self.elapsed_label = gtk.Label('') self.status_hbox.pack_start(self.status_label, expand = False) self.status_hbox.pack_end(self.elapsed_label, expand = False) self.error_label = gtk.Label('') self.formatted_label = gtk.Label('') vbox = gtk.VBox() vbox.pack_start(self.status_hbox) vbox.pack_start(self.error_label) vbox.pack_start(self.formatted_label) gobject.timeout_add(1000, self.updateElapsed) hbox = gtk.HBox() hbox.pack_start(self.entry) hbox.pack_start(self.button, expand = False) hbox.show_all() vbox.pack_start(hbox) vbox.show() self.window.add(vbox) def main(self): self.window.show() gtk.main() def delete_event(self, widget, event, data=None): return False def destroy_event(self, widget, data=None): gtk.main_quit() def activate_event(self, widget, data=None): if not self.handle_activated(self.entry.get_text(), self): self.window.destroy() self.entry.set_text('') def getElapsed(self): if self.starttime is None: return '' delta = datetime.now() - self.starttime days = delta.days dsecs = delta.seconds hours = dsecs / (60 * 60) dsecs -= hours * 60 * 60 minutes = dsecs / 60 dsecs -= minutes * 60 seconds = dsecs elapsed = '' if days != 0: elapsed = '%dd ' % days elapsed += '%d:%02d:%02d' % (hours, minutes, seconds) return elapsed def updateElapsed(self): self.elapsed_label.set_text(self.getElapsed()) return True def setStatus(self, status, starttime): if status != '': self.status_label.set_text(status) self.starttime = starttime self.updateElapsed() self.status_hbox.show_all() else: self.status_hbox.hide_all() def setError(self, error): self.error_label.set_text(error) if error != '': self.error_label.show() else: self.error_label.hide() def setFormatted(self, formatted): self.formatted_label.set_text(formatted) if formatted != '': self.formatted_label.show() else: self.formatted_label.hide()