diff --git a/CmdWindow.py b/CmdWindow.py index ebc083d..afb35a4 100644 --- a/CmdWindow.py +++ b/CmdWindow.py @@ -4,8 +4,9 @@ import gobject from datetime import datetime class CmdWindow: - def __init__(self, status = '', starttime = None): - self.starttime = starttime + 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); @@ -16,29 +17,35 @@ class CmdWindow: 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() - if status != '': - hbox = gtk.HBox() - lbl = gtk.Label(status) - hbox.pack_start(lbl, expand = False) - if starttime is not None: - self.elapsedlabel = gtk.Label(self.getElapsed()) - gobject.timeout_add(1000, self.updateElapsed) - hbox.pack_end(self.elapsedlabel, expand = False) - vbox.pack_start(hbox) + 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) - self.window.show_all() def main(self): - self.text = '' + self.window.show() gtk.main() - return self.text def delete_event(self, widget, event, data=None): return False @@ -47,10 +54,12 @@ class CmdWindow: gtk.main_quit() def activate_event(self, widget, data=None): - self.text = self.entry.get_text() - self.window.destroy() + if not self.handle_activated(self.entry.get_text(), self): + self.window.destroy() def getElapsed(self): + if self.starttime is None: + return '' delta = datetime.now() - self.starttime days = delta.days dsecs = delta.seconds @@ -60,11 +69,34 @@ class CmdWindow: dsecs -= minutes * 60 seconds = dsecs elapsed = '' - if days > 0: + if days != 0: elapsed = '%dd ' % days elapsed += '%d:%02d:%02d' % (hours, minutes, seconds) return elapsed def updateElapsed(self): - self.elapsedlabel.set_text(self.getElapsed()) + 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() diff --git a/dwtt b/dwtt index cd583b5..099614d 100755 --- a/dwtt +++ b/dwtt @@ -38,24 +38,35 @@ def main(argv): ds = DataStore(timedbfile) - while True: - status = '' - starttime = None + def handleActivated(cmdline, cw): + if cmdline.strip() == '': + return False ct = ds.getCurrentTask() if ct is not None: task = ds.getTaskByID(ct.taskid) status = 'Task: ' + ds.getTaskPath(task) if task.longname != '': status += ' (%s)' % task.longname - starttime = ct.time - cw = CmdWindow(status, starttime) - cmdline = cw.main() - if cmdline.strip() == '': - break + cw.setStatus(status, ct.time) + else: + cw.setStatus('', None) cmd = Command(cmdline) res = processCommand(cmd, ds) if not res.keepwindow: - break + return False + cw.setError(res.error) + cw.setFormatted(res.formatted) + return True + + cw = CmdWindow(handleActivated) + ct = ds.getCurrentTask() + if ct is not None: + task = ds.getTaskByID(ct.taskid) + status = 'Task: ' + ds.getTaskPath(task) + if task.longname != '': + status += ' (%s)' % task.longname + cw.setStatus(status, ct.time) + cw.main() class Result: def __init__(self):