fix qurey progress window bug

This commit is contained in:
St.Huang 2018-07-02 01:16:20 +08:00
parent e83be5cde1
commit b44d1f4bf5

View File

@ -17,14 +17,15 @@ from .lang import _
##########################################################################
class ProgressManager(object):
class ProgressWindow(object):
"""
Query progress window
"""
def __init__(self, mw):
self.mw = mw
self.app = QApplication.instance()
self.blockUpdates = False
self._win = None
self._levels = 0
self._msg_count = defaultdict(int)
# Creating progress dialogs
##########################################################################
@ -53,90 +54,55 @@ class ProgressManager(object):
number_info += u'<br>{0}: {1}{2}'.format(
_('FAILURE'), fails_number, _('WORDS'))
self.update(label=number_info, value=words_number)
self._update(label=number_info, value=words_number)
self._win.adjustSize()
def update_title(self, title):
if self.abort():
return
self._win.setWindowTitle(title)
def reset_count(self):
def start(self, max=0, min=0, label=None, parent=None):
self._msg_count.clear()
def start(self, max=0, min=0, label=None, parent=None, immediate=False, rows=0):
self._msg_count.clear()
self._levels += 1
if self._levels > 1:
return
# setup window
parent = parent or self.app.activeWindow() or self.mw
label = label or _("Processing...")
cancel_btn = QPushButton("Cancel")
self._win = QProgressDialog(label, "", min, max, parent)
self._win.setWindowTitle("Querying...")
self._win.setCancelButton(None)
# cancel_btn.clicked.connect(self.abort)
# self._win.setAutoClose(False)
# self._win.setAutoReset(False)
parent = parent or self.app.activeWindow() or self.mw
self._win = QProgressDialog(label, '', min, max, parent)
self._win.setWindowModality(Qt.ApplicationModal)
self._win.setCancelButton(None)
self._win.canceled.connect(self.finish)
self._win.setWindowTitle("Querying...")
# we need to manually manage minimum time to show, as qt gets confused
# by the db handler
self._win.setMinimumDuration(100000)
if immediate:
self._shown = True
self._win.show()
self.app.processEvents()
else:
self._shown = False
# self._win.setMinimumDuration(100000)
self._counter = min
self._min = min
self._max = max
self._firstTime = time.time()
self._lastUpdate = time.time()
self._disabled = False
def update(self, label=None, value=None, process=True, maybeShow=True):
# print self._min, self._counter, self._max, label, time.time() -
# self._lastTime
if maybeShow:
self._maybeShow()
elapsed = time.time() - self._lastUpdate
if label:
self._win.setLabelText(label)
if self._max and self._shown:
self._counter = value or (self._counter + 1)
self._win.setValue(self._counter)
if process and elapsed >= 0.2:
self.app.processEvents(QEventLoop.ExcludeUserInputEvents)
self._lastUpdate = time.time()
self._win.show()
self.app.processEvents()
def abort(self):
# self.aborted = True
return self._win.wasCanceled()
def finish(self):
self._levels -= 1
self._levels = max(0, self._levels)
if self._levels == 0 and self._win:
self._win.cancel()
self._unsetBusy()
self._win.hide()
self._unsetBusy()
self._win.destroy()
def clear(self):
"Restore the interface after an error."
if self._levels:
self._levels = 1
self.finish()
def _maybeShow(self):
if not self._levels:
return
if self._shown:
self.update(maybeShow=False)
return
delta = time.time() - self._firstTime
if delta > 0.5:
self._shown = True
self._win.show()
self._setBusy()
def _update(self, label=None, value=None, process=True, maybeShow=True):
elapsed = time.time() - self._lastUpdate
if label:
self._win.setLabelText(label)
if self._max:
self._counter = value or (self._counter + 1)
self._win.setValue(self._counter)
if process and elapsed >= 0.2:
self.app.processEvents(QEventLoop.ExcludeUserInputEvents)
self._lastUpdate = time.time()
def _setBusy(self):
self._disabled = True
@ -145,7 +111,3 @@ class ProgressManager(object):
def _unsetBusy(self):
self._disabled = False
self.app.restoreOverrideCursor()
def busy(self):
"True if processing."
return self._levels