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