Changeset 01de01421ae7…
Parent 69815829dfae…
by
Changes to 2 files · Browse files at 01de01421ae7 Showing diff from parent 69815829dfae Diff from another changeset...
|
@@ -277,6 +277,12 @@ else:
raise _('unknown CmdWidget style: %s') % style
+ # progress status frame
+ statframe = gtk.Frame()
+ statframe.set_border_width(4)
+ statframe.set_shadow_type(gtk.SHADOW_NONE)
+ self.pack_start(statframe, False, False)
+
# progress bar box
self.progbox = progbox = gtklib.SlimToolbar(tooltips)
self.pack_start(progbox, False, False)
@@ -313,6 +319,13 @@ add_icon('succeed', gtk.STOCK_APPLY)
add_icon('error', gtk.STOCK_DIALOG_ERROR)
+ # progres status label
+ self.progstat = gtk.Label()
+ statframe.add(self.progstat)
+ self.progstat.set_alignment(0, 0.5)
+ self.progstat.set_ellipsize(pango.ELLIPSIZE_END)
+ self.progstat.hide()
+
# progress bar
self.pbar = gtk.ProgressBar()
progbox.append_widget(self.pbar, expand=True)
@@ -355,6 +368,7 @@ self.log.clear()
# prepare UI
+ self.inprogress = False
self.switch_to(working=True)
self.set_buttons(stop=True, close=False)
self.already_opened = self.get_pbar()
@@ -482,12 +496,50 @@
### internal use functions ###
+ def clear_progress(self):
+ self.pbar.set_fraction(0)
+ self.pbar.set_text('')
+ self.progstat.set_text('')
+ self.inprogress = False
+
def update_progress(self):
if not self.pbar:
return
if not self.hgthread.isAlive():
- self.pbar.set_fraction(0)
- else:
+ self.clear_progress()
+ return
+
+ data = None
+ while self.hgthread.getprogqueue().qsize():
+ try:
+ data = self.hgthread.getprogqueue().get_nowait()
+ except Queue.Empty:
+ pass
+ counting = False
+ if data:
+ topic, item, pos, total, unit = data
+ if pos is None:
+ self.clear_progress()
+ return
+ if total is None:
+ count = '%d' % pos
+ counting = True
+ else:
+ self.pbar.set_fraction(float(pos) / float(total))
+ count = '%d / %d' % (pos, total)
+ if unit:
+ count += ' ' + unit
+ self.pbar.set_text(count)
+ if item:
+ status = '%s: %s' % (topic, item)
+ else:
+ status = _('Status: %s') % topic
+ self.progstat.set_text(status)
+ if self.progstat.get_property('visible') is False:
+ self.progstat.show()
+ self.inprogress = True
+
+ if not self.inprogress or counting:
# pulse the progress bar every ~100ms
tm = shlib.get_system_times()[4]
if tm - self.last_pbar_update < 0.100:
|
@@ -25,18 +25,20 @@ main thread to pickup.
'''
def __init__(self, src=None, outputq=None, errorq=None, dialogq=None,
- responseq=None):
+ responseq=None, progressq=None):
super(GtkUi, self).__init__(src)
if src:
self.outputq = src.outputq
self.errorq = src.errorq
self.dialogq = src.dialogq
self.responseq = src.responseq
+ self.progressq = src.progressq
else:
self.outputq = outputq
self.errorq = errorq
self.dialogq = dialogq
self.responseq = responseq
+ self.progressq = progressq
self.setconfig('ui', 'interactive', 'on')
self.setconfig('progress', 'disable', 'True')
@@ -90,6 +92,9 @@ raise util.Abort(_('response expected'))
return r
+ def progress(self, topic, pos, item='', unit='', total=None):
+ self.progressq.put( (topic, item, pos, total, unit) )
+
class HgThread(thread2.Thread):
'''
@@ -103,8 +108,9 @@ self.errorq = Queue.Queue()
self.dialogq = Queue.Queue()
self.responseq = Queue.Queue()
+ self.progressq = Queue.Queue()
self.ui = GtkUi(None, self.outputq, self.errorq, self.dialogq,
- self.responseq)
+ self.responseq, self.progressq)
self.args = args
self.ret = None
self.postfunc = postfunc
@@ -117,6 +123,9 @@ def geterrqueue(self):
return self.errorq
+ def getprogqueue(self):
+ return self.progressq
+
def return_code(self):
'''
None - command is incomplete, possibly exited with exception
|
Loading...