allowed command window to persist across commands
This commit is contained in:
parent
7a10dd335a
commit
5fb84110e1
64
CmdWindow.py
64
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())
|
||||
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.pack_end(self.elapsedlabel, expand = False)
|
||||
vbox.pack_start(hbox)
|
||||
|
||||
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()
|
||||
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()
|
||||
|
29
dwtt
29
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):
|
||||
|
Loading…
x
Reference in New Issue
Block a user