allowed command window to persist across commands

This commit is contained in:
Josh Holtrop 2011-01-03 14:55:44 -05:00
parent 7a10dd335a
commit 5fb84110e1
2 changed files with 70 additions and 27 deletions

View File

@ -4,8 +4,9 @@ import gobject
from datetime import datetime from datetime import datetime
class CmdWindow: class CmdWindow:
def __init__(self, status = '', starttime = None): def __init__(self, handle_activated):
self.starttime = starttime self.starttime = None
self.handle_activated = handle_activated
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_geometry_hints(min_width = 350); self.window.set_geometry_hints(min_width = 350);
@ -16,29 +17,35 @@ class CmdWindow:
self.button = gtk.Button(stock = gtk.STOCK_OK) self.button = gtk.Button(stock = gtk.STOCK_OK)
self.button.connect("clicked", self.activate_event) 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 = gtk.VBox()
if status != '': vbox.pack_start(self.status_hbox)
hbox = gtk.HBox() vbox.pack_start(self.error_label)
lbl = gtk.Label(status) vbox.pack_start(self.formatted_label)
hbox.pack_start(lbl, expand = False) gobject.timeout_add(1000, self.updateElapsed)
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)
hbox = gtk.HBox() hbox = gtk.HBox()
hbox.pack_start(self.entry) hbox.pack_start(self.entry)
hbox.pack_start(self.button, expand = False) hbox.pack_start(self.button, expand = False)
hbox.show_all()
vbox.pack_start(hbox) vbox.pack_start(hbox)
vbox.show()
self.window.add(vbox) self.window.add(vbox)
self.window.show_all()
def main(self): def main(self):
self.text = '' self.window.show()
gtk.main() gtk.main()
return self.text
def delete_event(self, widget, event, data=None): def delete_event(self, widget, event, data=None):
return False return False
@ -47,10 +54,12 @@ class CmdWindow:
gtk.main_quit() gtk.main_quit()
def activate_event(self, widget, data=None): def activate_event(self, widget, data=None):
self.text = self.entry.get_text() if not self.handle_activated(self.entry.get_text(), self):
self.window.destroy() self.window.destroy()
def getElapsed(self): def getElapsed(self):
if self.starttime is None:
return ''
delta = datetime.now() - self.starttime delta = datetime.now() - self.starttime
days = delta.days days = delta.days
dsecs = delta.seconds dsecs = delta.seconds
@ -60,11 +69,34 @@ class CmdWindow:
dsecs -= minutes * 60 dsecs -= minutes * 60
seconds = dsecs seconds = dsecs
elapsed = '' elapsed = ''
if days > 0: if days != 0:
elapsed = '%dd ' % days elapsed = '%dd ' % days
elapsed += '%d:%02d:%02d' % (hours, minutes, seconds) elapsed += '%d:%02d:%02d' % (hours, minutes, seconds)
return elapsed return elapsed
def updateElapsed(self): def updateElapsed(self):
self.elapsedlabel.set_text(self.getElapsed()) self.elapsed_label.set_text(self.getElapsed())
return True 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()

29
dwtt
View File

@ -38,24 +38,35 @@ def main(argv):
ds = DataStore(timedbfile) ds = DataStore(timedbfile)
while True: def handleActivated(cmdline, cw):
status = '' if cmdline.strip() == '':
starttime = None return False
ct = ds.getCurrentTask() ct = ds.getCurrentTask()
if ct is not None: if ct is not None:
task = ds.getTaskByID(ct.taskid) task = ds.getTaskByID(ct.taskid)
status = 'Task: ' + ds.getTaskPath(task) status = 'Task: ' + ds.getTaskPath(task)
if task.longname != '': if task.longname != '':
status += ' (%s)' % task.longname status += ' (%s)' % task.longname
starttime = ct.time cw.setStatus(status, ct.time)
cw = CmdWindow(status, starttime) else:
cmdline = cw.main() cw.setStatus('', None)
if cmdline.strip() == '':
break
cmd = Command(cmdline) cmd = Command(cmdline)
res = processCommand(cmd, ds) res = processCommand(cmd, ds)
if not res.keepwindow: 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: class Result:
def __init__(self): def __init__(self):