def __init__(self): self._reads = {} self._writes = {} self._notifiers = {} self._timer = QTimer() self._timer.setSingleShot(True) self._timer.timeout.connect(self.iterate) if QCoreApplication.instance() is None: # Application Object has not been started yet self.qApp = QCoreApplication([]) self._ownApp = True else: self.qApp = QCoreApplication.instance() self._ownApp = False self._blockApp = None posixbase.PosixReactorBase.__init__(self)
def currentTargetXSLT(self): root = qt.toUnicode(QCoreApplication.applicationDirPath()) if __debug__: root = os.path.dirname(__file__) if self.ui.actionMarkdown.isChecked(): return etree.XSLT(etree.parse(os.path.join(root, XSLT_MARKDOWN))) elif self.ui.actionKAG3.isChecked(): return etree.XSLT(etree.parse(os.path.join(root, XSLT_KAG3))) elif self.ui.actionNScripter.isChecked(): return etree.XSLT(etree.parse(os.path.join(root, XSLT_NSCRIPTER))) else: raise Exception
def previewWindow_ready(self): # set default font if __debug__: path = os.path.join(os.path.dirname(__file__), DEFAULT_FONT) else: appDir = six.text_type(QCoreApplication.applicationDirPath()) path = os.path.join(appDir, DEFAULT_FONT) if not os.path.exists(path): QMessageBox.critical(self, self.tr("Font not found"), self.tr("Font \"%1\" cannot open.").arg(path) ) sys.exit(1) font = ftgl.FTPixmapFont(path.encode(DEFAULT_ENCODING)) if not font.FaceSize(30): print("FaceSize error.", file=sys.stderr) self.glWindow.context().fontRegistry.installFont(None, font) # init double buffer self.doubleBufferObject = DoubleBufferObject() self.glWindow.setDoubleBufferObject(self.doubleBufferObject) # set to ready self.previewHasReady = True
class QtReactor(posixbase.PosixReactorBase): def __init__(self): self._reads = {} self._writes = {} self._notifiers = {} self._timer = QTimer() self._timer.setSingleShot(True) self._timer.timeout.connect(self.iterate) if QCoreApplication.instance() is None: # Application Object has not been started yet self.qApp = QCoreApplication([]) self._ownApp = True else: self.qApp = QCoreApplication.instance() self._ownApp = False self._blockApp = None posixbase.PosixReactorBase.__init__(self) def _add(self, xer, primary, type): """ Private method for adding a descriptor from the event loop. It takes care of adding it if new or modifying it if already added for another state (read -> read/write for example). """ if xer not in primary: primary[xer] = TwistedSocketNotifier(None, self, xer, type) def addReader(self, reader): """ Add a FileDescriptor for notification of data available to read. """ self._add(reader, self._reads, QSocketNotifier.Read) def addWriter(self, writer): """ Add a FileDescriptor for notification of data available to write. """ self._add(writer, self._writes, QSocketNotifier.Write) def _remove(self, xer, primary): """ Private method for removing a descriptor from the event loop. It does the inverse job of _add, and also add a check in case of the fd has gone away. """ if xer in primary: notifier = primary.pop(xer) notifier.shutdown() def removeReader(self, reader): """ Remove a Selectable for notification of data available to read. """ self._remove(reader, self._reads) def removeWriter(self, writer): """ Remove a Selectable for notification of data available to write. """ self._remove(writer, self._writes) def removeAll(self): """ Remove all selectables, and return a list of them. """ rv = self._removeAll(self._reads, self._writes) return rv def getReaders(self): return self._reads.keys() def getWriters(self): return self._writes.keys() def callLater(self, howlong, *args, **kargs): rval = super(QtReactor, self).callLater(howlong, *args, **kargs) self.reactorInvocation() return rval def reactorInvocation(self): self._timer.stop() self._timer.setInterval(0) self._timer.start() def _iterate(self, delay=None, fromqt=False): """See twisted.internet.interfaces.IReactorCore.iterate. """ self.runUntilCurrent() self.doIteration(delay, fromqt) iterate = _iterate def doIteration(self, delay=None, fromqt=False): 'This method is called by a Qt timer or by network activity on a file descriptor' if not self.running and self._blockApp: self._blockApp.quit() self._timer.stop() delay = max(delay or 0, 1) if not fromqt: self.qApp.processEvents(QEventLoop.AllEvents, delay * 1000) if self.timeout() is None: timeout = 0.1 elif self.timeout() == 0: timeout = 0 else: timeout = self.timeout() self._timer.setInterval(timeout * 1000) self._timer.start() def runReturn(self, installSignalHandlers=True): self.startRunning(installSignalHandlers=installSignalHandlers) self.reactorInvocation() def run(self, installSignalHandlers=True): if self._ownApp: self._blockApp = self.qApp else: self._blockApp = QEventLoop() self.runReturn() self._blockApp.exec_()