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

View file

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