fix QtScheduler and use it instead of QTimer

This commit is contained in:
Romain Bignon 2010-07-13 23:44:22 +02:00
commit 41317e5029
2 changed files with 25 additions and 18 deletions

View file

@ -18,7 +18,7 @@
from __future__ import with_statement
from PyQt4.QtGui import QWidget, QHBoxLayout, QVBoxLayout, QFrame, QLabel, QImage, QPixmap
from PyQt4.QtCore import SIGNAL, QTimer
from PyQt4.QtCore import SIGNAL
from weboob.capabilities.dating import StatusField
from weboob.tools.application.qt import QtDo
@ -49,17 +49,12 @@ class Account(QFrame):
head.addWidget(self.title)
head.addStretch()
self.body = QLabel()
self.body = QLabel(u'<i>Waiting...</i>')
self.layout().addWidget(headw)
self.layout().addWidget(self.body)
self.timer = QTimer()
self.timer.setSingleShot(False)
self.timer.setInterval(60)
self.connect(self.timer, SIGNAL('timeout()'), self.updateStats)
self.updateStats()
self.weboob.repeat(60, self.updateStats)
def updateStats(self):
self.process = QtDo(self.weboob, self.updateStats_cb)

View file

@ -31,26 +31,38 @@ __all__ = ['QtApplication', 'QtMainWindow', 'QtDo', 'HTMLDelegate']
class QtScheduler(IScheduler):
def __init__(self, app):
self.app = app
self.count = 0
self.timers = {}
def schedule(self, interval, function, *args):
timer = QTimer()
timer.setInterval(interval)
timer.setSingleShot(False)
self.app.connect(timer, SIGNAL("timeout()"), lambda: self.timeout(timer.timerId(), False, function, *args))
self.timers[timer.timerId()] = timer
timer.setInterval(interval * 1000)
timer.setSingleShot(True)
count = self.count
self.count += 1
timer.start()
self.app.connect(timer, SIGNAL("timeout()"), lambda: self.timeout(count, None, function, *args))
self.timers[count] = timer
def repeat(self, interval, function, *args):
timer = QTimer()
timer.setInterval(interval)
timer.setSingleShot(True)
self.app.connect(timer, SIGNAL("timeout()"), lambda: self.timeout(timer.timerId(), True, function, *args))
self.timers[timer.timerId()] = timer
timer.setSingleShot(False)
def timeout(self, _id, single, function, *args):
count = self.count
self.count += 1
timer.start(0)
self.app.connect(timer, SIGNAL("timeout()"), lambda: self.timeout(count, interval, function, *args))
self.timers[count] = timer
def timeout(self, _id, interval, function, *args):
function(*args)
if single:
if interval is None:
self.timers.pop(_id)
else:
self.timers[_id].setInterval(interval * 1000)
def want_stop(self):
self.app.quit()