annotate lib/qt4reactor.py @ 1427:e070c9f1c5e7

partial fixes to KC Ignore-this: 52c7627484ebcb2f9ae6b981a7344e4f
author drewp@bigasterisk.com
date Sat, 11 Jun 2016 04:33:36 +0000
parents 60b49f6c2027
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
463
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
1 # http://twistedmatrix.com/trac/browser/sandbox/therve/qt4reactor.py
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
2 # with some fixes by drewp
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
3
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
4 # Copyright (c) 2001-2008 Twisted Matrix Laboratories.
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
5 # See LICENSE for details.
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
6
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
7
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
8 """
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
9 This module provides support for Twisted to interact with the PyQt mainloop.
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
10
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
11 In order to use this support, simply do the following::
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
12
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
13 | import qt4reactor
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
14 | qt4reactor.install()
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
15
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
16 Then use twisted.internet APIs as usual. The other methods here are not
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
17 intended to be called directly.
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
18
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
19 API Stability: stable
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
20
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
21 Maintainer: U{Itamar Shtull-Trauring<mailto:twisted@itamarst.org>}
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
22 Port to QT4: U{Gabe Rudy<mailto:rudy@goldenhelix.com>}
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
23 """
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
24
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
25 __all__ = ['install']
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
26
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
27
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
28 import sys
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
29
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
30 from zope.interface import implements
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
31
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
32 from PyQt4.QtCore import QSocketNotifier, QObject, SIGNAL, QTimer
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
33 from PyQt4.QtGui import QApplication
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
34
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
35 from twisted.internet.interfaces import IReactorFDSet
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
36 from twisted.python import log
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
37 from twisted.internet.posixbase import PosixReactorBase
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
38
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
39
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
40
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
41 class TwistedSocketNotifier(QSocketNotifier):
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
42 """
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
43 Connection between an fd event and reader/writer callbacks.
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
44 """
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
45
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
46 def __init__(self, reactor, watcher, type):
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
47 QSocketNotifier.__init__(self, watcher.fileno(), type)
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
48 self.reactor = reactor
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
49 self.watcher = watcher
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
50 self.fn = None
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
51 if type == QSocketNotifier.Read:
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
52 self.fn = self.read
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
53 elif type == QSocketNotifier.Write:
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
54 self.fn = self.write
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
55 QObject.connect(self, SIGNAL("activated(int)"), self.fn)
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
56
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
57
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
58 def shutdown(self):
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
59 QObject.disconnect(self, SIGNAL("activated(int)"), self.fn)
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
60 self.setEnabled(0)
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
61 self.fn = self.watcher = None
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
62
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
63
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
64 def read(self, sock):
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
65 w = self.watcher
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
66 def _read():
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
67 why = None
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
68 try:
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
69 why = w.doRead()
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
70 except:
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
71 log.err()
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
72 why = sys.exc_info()[1]
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
73 if why:
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
74 self.reactor._disconnectSelectable(w, why, True)
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
75 log.callWithLogger(w, _read)
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
76 self.reactor.simulate()
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
77
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
78
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
79 def write(self, sock):
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
80 w = self.watcher
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
81 def _write():
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
82 why = None
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
83 self.setEnabled(0)
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
84 try:
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
85 why = w.doWrite()
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
86 except:
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
87 log.err()
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
88 why = sys.exc_info()[1]
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
89 if why:
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
90 self.reactor._disconnectSelectable(w, why, False)
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
91 elif self.watcher:
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
92 self.setEnabled(1)
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
93 log.callWithLogger(w, _write)
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
94 self.reactor.simulate()
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
95
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
96
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
97
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
98 class QTReactor(PosixReactorBase):
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
99 """
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
100 Qt based reactor.
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
101 """
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
102 implements(IReactorFDSet)
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
103
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
104 # Reference to a DelayedCall for self.crash() when the reactor is
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
105 # entered through .iterate()
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
106 _crashCall = None
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
107
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
108 _timer = None
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
109
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
110 def __init__(self, app=None):
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
111 self._reads = {}
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
112 self._writes = {}
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
113 if app is None:
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
114 app = QApplication([])
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
115 self.qApp = app
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
116 PosixReactorBase.__init__(self)
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
117 self.addSystemEventTrigger('after', 'shutdown', self.cleanup)
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
118
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
119
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
120
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
121 def addReader(self, reader):
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
122 if not reader in self._reads:
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
123 self._reads[reader] = TwistedSocketNotifier(self, reader,
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
124 QSocketNotifier.Read)
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
125
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
126
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
127 def addWriter(self, writer):
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
128 if not writer in self._writes:
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
129 self._writes[writer] = TwistedSocketNotifier(self, writer,
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
130 QSocketNotifier.Write)
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
131
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
132
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
133 def removeReader(self, reader):
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
134 if reader in self._reads:
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
135 self._reads[reader].shutdown()
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
136 del self._reads[reader]
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
137
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
138
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
139 def removeWriter(self, writer):
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
140 if writer in self._writes:
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
141 self._writes[writer].shutdown()
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
142 del self._writes[writer]
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
143
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
144
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
145 def removeAll(self):
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
146 return self._removeAll(self._reads, self._writes)
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
147
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
148
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
149 def getReaders(self):
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
150 return self._reads.keys()
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
151
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
152
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
153 def getWriters(self):
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
154 return self._writes.keys()
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
155
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
156
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
157 def simulate(self):
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
158 self._lastTimer = self._timer # put off the __del__
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
159 if self._timer is not None:
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
160 self._timer.stop()
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
161 self._timer = None
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
162
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
163 if not self.running:
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
164 self.qApp.exit()
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
165 return
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
166 self.runUntilCurrent()
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
167
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
168 if self._crashCall is not None:
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
169 self._crashCall.reset(0)
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
170
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
171 timeout = self.timeout()
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
172 if timeout is None:
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
173 timeout = 1.0
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
174 timeout = min(timeout, 0.01) * 1010
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
175
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
176 if self._timer is None:
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
177 self._timer = QTimer()
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
178 self._timer.setObjectName("simulateTimer")
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
179 QObject.connect(self._timer, SIGNAL("timeout()"), self.simulate)
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
180 self._timer.start(timeout)
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
181
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
182 def cleanup(self):
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
183 if self._timer is not None:
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
184 self._timer.stop()
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
185 self._timer = None
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
186
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
187
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
188 def iterate(self, delay=0.0):
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
189 self._crashCall = self.callLater(delay, self._crash)
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
190 self.run()
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
191
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
192
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
193 def mainLoop(self):
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
194 self.simulate()
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
195 self.qApp.exec_()
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
196
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
197
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
198 def _crash(self):
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
199 if self._crashCall is not None:
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
200 if self._crashCall.active():
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
201 self._crashCall.cancel()
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
202 self._crashCall = None
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
203 self.running = False
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
204
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
205
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
206
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
207 def install(app=None):
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
208 """
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
209 Configure the twisted mainloop to be run inside the qt mainloop.
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
210 """
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
211 from twisted.internet import main
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
212 reactor = QTReactor(app=app)
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents:
diff changeset
213 main.installReactor(reactor)