From dbbacea7a847def3ba472859ff1e1c9e32f3dabb Mon Sep 17 00:00:00 2001 From: David Vierra Date: Tue, 6 Oct 2015 17:10:48 -1000 Subject: [PATCH] Progress dialog is once again cancelable, and has a minimum time before displaying. --- src/mcedit2/util/showprogress.py | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/mcedit2/util/showprogress.py b/src/mcedit2/util/showprogress.py index a12778c..62bee24 100644 --- a/src/mcedit2/util/showprogress.py +++ b/src/mcedit2/util/showprogress.py @@ -31,38 +31,50 @@ def showProgress(text, *tasks, **kwargs): """ progress = None cancel = kwargs.pop('cancel', None) + start = time.time() + shown = False with LoaderTimer.stopCtx(): dialog = QtGui.QProgressDialog(QtGui.qApp.mainWindow) dialog.setWindowTitle(text) dialog.setWindowModality(Qt.WindowModal) - #dialog.show() log.info("Starting progress: %d tasks." % len(tasks)) - maximum = len(tasks) * 100 + totalMaximum = len(tasks) * 100 for i, task in enumerate(tasks): log.info("Task #%d", i) task = rescaleProgress(task, i*100, i*100+100) for progress in task: if isinstance(progress, basestring): current = 0 + maximum = 0 status = progress elif isinstance(progress, tuple): if len(progress) > 2: - current, _, status = progress[:3] + current, maximum, status = progress[:3] else: - current, _ = progress + current, maximum = progress status = "" else: - current = 1 + current = 0 + maximum = 0 status = "" dialog.setValue(current) - dialog.setMaximum(maximum) + if maximum == 0: + # Task progress is indeterminate + dialog.setMaximum(0) + else: + dialog.setMaximum(totalMaximum) dialog.setLabelText(status) - #QtGui.QApplication.processEvents() + if time.time() > start + timeBeforeDialog: + if not shown: + dialog.show() + shown = True + QtGui.QApplication.processEvents() + if dialog.wasCanceled(): return False - dialog.close() + dialog.hide() return progress