コード例 #1
0
    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()
コード例 #2
0
 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]))
コード例 #3
0
 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]))
コード例 #4
0
    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', []))
コード例 #5
0
 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]))