showProgress handles reentrant calls by completing these calls non-interactively.
This commit is contained in:
parent
457c6add01
commit
156dfa2016
@ -8,6 +8,7 @@ from PySide.QtCore import Qt
|
||||
import time
|
||||
import itertools
|
||||
from mcedit2.util.worldloader import LoaderTimer
|
||||
from mceditlib.util import exhaust
|
||||
from mceditlib.util.progress import rescaleProgress
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
@ -32,6 +33,8 @@ class MCEProgressDialog(QtGui.QProgressDialog):
|
||||
event.ignore()
|
||||
|
||||
|
||||
_progressBarActive = False
|
||||
|
||||
def showProgress(text, *tasks, **kwargs):
|
||||
"""
|
||||
Show a progress dialog for the given task(s). Each task should be an iterable,
|
||||
@ -47,10 +50,18 @@ def showProgress(text, *tasks, **kwargs):
|
||||
:return:
|
||||
:rtype:
|
||||
"""
|
||||
global _progressBarActive
|
||||
|
||||
if _progressBarActive:
|
||||
for task in tasks:
|
||||
exhaust(task)
|
||||
return
|
||||
|
||||
progress = None
|
||||
cancel = kwargs.pop('cancel', None)
|
||||
start = time.time()
|
||||
shown = False
|
||||
try:
|
||||
with LoaderTimer.stopCtx():
|
||||
|
||||
dialog = MCEProgressDialog(QtGui.qApp.mainWindow)
|
||||
@ -97,4 +108,6 @@ def showProgress(text, *tasks, **kwargs):
|
||||
|
||||
dialog.reset()
|
||||
return progress
|
||||
finally:
|
||||
_progressBarActive = False
|
||||
|
||||
|
Reference in New Issue
Block a user