Progress dialog is once again cancelable, and has a minimum time before displaying.
This commit is contained in:
parent
7fd974426e
commit
dbbacea7a8
@ -31,38 +31,50 @@ def showProgress(text, *tasks, **kwargs):
|
|||||||
"""
|
"""
|
||||||
progress = None
|
progress = None
|
||||||
cancel = kwargs.pop('cancel', None)
|
cancel = kwargs.pop('cancel', None)
|
||||||
|
start = time.time()
|
||||||
|
shown = False
|
||||||
with LoaderTimer.stopCtx():
|
with LoaderTimer.stopCtx():
|
||||||
|
|
||||||
dialog = QtGui.QProgressDialog(QtGui.qApp.mainWindow)
|
dialog = QtGui.QProgressDialog(QtGui.qApp.mainWindow)
|
||||||
dialog.setWindowTitle(text)
|
dialog.setWindowTitle(text)
|
||||||
dialog.setWindowModality(Qt.WindowModal)
|
dialog.setWindowModality(Qt.WindowModal)
|
||||||
#dialog.show()
|
|
||||||
log.info("Starting progress: %d tasks." % len(tasks))
|
log.info("Starting progress: %d tasks." % len(tasks))
|
||||||
maximum = len(tasks) * 100
|
totalMaximum = len(tasks) * 100
|
||||||
for i, task in enumerate(tasks):
|
for i, task in enumerate(tasks):
|
||||||
log.info("Task #%d", i)
|
log.info("Task #%d", i)
|
||||||
task = rescaleProgress(task, i*100, i*100+100)
|
task = rescaleProgress(task, i*100, i*100+100)
|
||||||
for progress in task:
|
for progress in task:
|
||||||
if isinstance(progress, basestring):
|
if isinstance(progress, basestring):
|
||||||
current = 0
|
current = 0
|
||||||
|
maximum = 0
|
||||||
status = progress
|
status = progress
|
||||||
elif isinstance(progress, tuple):
|
elif isinstance(progress, tuple):
|
||||||
if len(progress) > 2:
|
if len(progress) > 2:
|
||||||
current, _, status = progress[:3]
|
current, maximum, status = progress[:3]
|
||||||
else:
|
else:
|
||||||
current, _ = progress
|
current, maximum = progress
|
||||||
status = ""
|
status = ""
|
||||||
else:
|
else:
|
||||||
current = 1
|
current = 0
|
||||||
|
maximum = 0
|
||||||
status = ""
|
status = ""
|
||||||
|
|
||||||
dialog.setValue(current)
|
dialog.setValue(current)
|
||||||
dialog.setMaximum(maximum)
|
if maximum == 0:
|
||||||
|
# Task progress is indeterminate
|
||||||
|
dialog.setMaximum(0)
|
||||||
|
else:
|
||||||
|
dialog.setMaximum(totalMaximum)
|
||||||
dialog.setLabelText(status)
|
dialog.setLabelText(status)
|
||||||
#QtGui.QApplication.processEvents()
|
if time.time() > start + timeBeforeDialog:
|
||||||
|
if not shown:
|
||||||
|
dialog.show()
|
||||||
|
shown = True
|
||||||
|
QtGui.QApplication.processEvents()
|
||||||
|
|
||||||
if dialog.wasCanceled():
|
if dialog.wasCanceled():
|
||||||
return False
|
return False
|
||||||
|
|
||||||
dialog.close()
|
dialog.hide()
|
||||||
return progress
|
return progress
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user