def start(self): ''' Starts the conversion process. ''' def myLoadProgress(progress): self._loadProgress = progress def myLoadFinished(isLoaded): self._loaded = True webpage = QWebPage() webpage.loadProgress.connect(myLoadProgress) webpage.loadFinished.connect(myLoadFinished) url = misc.temp_path('import') baseUrl = QUrl.fromLocalFile(url) webpage.mainFrame().setHtml( self._document.getMainPage(mathOutput='svg'), baseUrl) while not self._loaded and not self._canceled: qApp.processEvents() self.ui.label.setText('Typesetting math equations...') if not self._canceled: # Wait for the MathJax to typeset while not self._mathTypeset and not self._canceled: qApp.processEvents() progress = int(webpage.mainFrame().evaluateJavaScript( misc.js_command('GetMathTypesetProgress', [])).toInt()[0]) self.ui.progressBar.setValue(progress) self._mathTypeset = webpage.mainFrame().evaluateJavaScript( misc.js_command('IsMathTypeset', [])).toBool() # If I haven't canceled yet, let's convert the document in a # separate thread if not self._canceled: self._thread = ExportToHtmlThread( unicode(webpage.mainFrame().evaluateJavaScript( misc.js_command('GetBodyHTML', [])).toString()), self._configuration, self._assigner, self._filePath) self._thread.onProgress.connect(self.ui.progressBar.setValue) self._thread.onProgressLabel.connect(self.ui.label.setText) self._thread.finished.connect(self._threadFinished) self.ui.cancelButton.clicked.connect(self._thread.quit) self._thread.start()
def zoomReset(self): ''' Called by application to reset the zoom factor to 1.0 ''' self._zoomIndex = self.DEFAULT_ZOOM_INDEX self.setZoomFactor(self.ZOOM_LEVELS[self._zoomIndex]) self.update() # Scroll view to the highlight cursor self.page().mainFrame().evaluateJavaScript(misc.js_command('ScrollToHighlight', [True]))
def zoomOut(self): ''' Called by application to zoom the view out. ''' self._zoomIndex -= 1 if self._zoomIndex < 0: self._zoomIndex = 0 self.setZoomFactor(self.ZOOM_LEVELS[self._zoomIndex]) self.update() # Scroll view to the highlight cursor self.page().mainFrame().evaluateJavaScript(misc.js_command('ScrollToHighlight', [True]))
def keyPressEvent(self, event): # Ctrl+A (Select All) if (event.key() == Qt.Key_A) and (event.nativeModifiers() and Qt.ControlModifier): self.page().triggerAction(QWebPage.SelectAll) event.ignore() elif event.key() == Qt.Key_Space: self.mainWindow.toggleSpeech() if self._keyboardNavEnabled: # Arrow Up if event.key() == Qt.Key_Up: self.page().mainFrame().evaluateJavaScript(misc.js_command('MoveCursorUp', [])) event.ignore() # Arrow Down elif event.key() == Qt.Key_Down: self.page().mainFrame().evaluateJavaScript(misc.js_command('MoveCursorDown', [])) event.ignore() # Arrow left elif event.key() == Qt.Key_Left: self.page().mainFrame().evaluateJavaScript(misc.js_command('MoveCursorLeft', [])) event.ignore() # Arrow right elif event.key() == Qt.Key_Right: self.page().mainFrame().evaluateJavaScript(misc.js_command('MoveCursorRight', [])) event.ignore() # Home elif event.key() == Qt.Key_Home: self.page().mainFrame().evaluateJavaScript(misc.js_command('MoveCursorToStart', [])) event.ignore() # End elif event.key() == Qt.Key_End: self.page().mainFrame().evaluateJavaScript(misc.js_command('MoveCursorToEnd', [])) event.ignore() # Page Up elif event.key() == Qt.Key_PageUp: self.page().mainFrame().evaluateJavaScript(misc.js_command('MoveCursorToPreviousBookmark', [])) # Page Down elif event.key() == Qt.Key_PageDown: self.page().mainFrame().evaluateJavaScript(misc.js_command('MoveCursorToNextBookmark', []))
def setZoom(self, newZoom): ''' Sets the zoom level that most closely matches my levels ''' deltas = [] for i in range(len(self.ZOOM_LEVELS)): deltas.append((i, abs(self.ZOOM_LEVELS[i] - newZoom))) deltas = sorted(deltas, key=lambda x : x[1]) self._zoomIndex = deltas[0][0] self.setZoomFactor(self.ZOOM_LEVELS[self._zoomIndex]) self.update() # Scroll view to the highlight cursor self.page().mainFrame().evaluateJavaScript(misc.js_command('ScrollToHighlight', [True]))