mirror of
https://github.com/ankitects/anki.git
synced 2025-09-19 14:32:22 -04:00
give the preview window the same treatment
different approach to timer handling so that it's more responsive when the user clicks a navigation button
This commit is contained in:
parent
4d064e1cba
commit
23f8e15816
2 changed files with 56 additions and 28 deletions
|
@ -8,6 +8,7 @@ import time
|
||||||
import re
|
import re
|
||||||
from operator import itemgetter
|
from operator import itemgetter
|
||||||
from anki.lang import ngettext
|
from anki.lang import ngettext
|
||||||
|
import json
|
||||||
|
|
||||||
from aqt.qt import *
|
from aqt.qt import *
|
||||||
import anki
|
import anki
|
||||||
|
@ -482,6 +483,7 @@ class Browser(QMainWindow):
|
||||||
self.close()
|
self.close()
|
||||||
|
|
||||||
def _closeEventCleanup(self):
|
def _closeEventCleanup(self):
|
||||||
|
self._cancelPreviewTimer()
|
||||||
self.editor.setNote(None)
|
self.editor.setNote(None)
|
||||||
saveSplitter(self.form.splitter_2, "editor2")
|
saveSplitter(self.form.splitter_2, "editor2")
|
||||||
saveSplitter(self.form.splitter, "editor3")
|
saveSplitter(self.form.splitter, "editor3")
|
||||||
|
@ -624,6 +626,7 @@ class Browser(QMainWindow):
|
||||||
if not show:
|
if not show:
|
||||||
self.editor.setNote(None)
|
self.editor.setNote(None)
|
||||||
self.singleCard = False
|
self.singleCard = False
|
||||||
|
self.card = None
|
||||||
else:
|
else:
|
||||||
self.card = self.model.getCard(
|
self.card = self.model.getCard(
|
||||||
self.form.tableView.selectionModel().currentIndex())
|
self.form.tableView.selectionModel().currentIndex())
|
||||||
|
@ -1020,6 +1023,9 @@ where id in %s""" % ids2str(sf))
|
||||||
# Preview
|
# Preview
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
|
_previewTimer = None
|
||||||
|
_lastPreviewRender = 0
|
||||||
|
|
||||||
def onTogglePreview(self):
|
def onTogglePreview(self):
|
||||||
if self._previewWindow:
|
if self._previewWindow:
|
||||||
self._closePreview()
|
self._closePreview()
|
||||||
|
@ -1057,6 +1063,8 @@ where id in %s""" % ids2str(sf))
|
||||||
self._previewNext.clicked.connect(self._onPreviewNext)
|
self._previewNext.clicked.connect(self._onPreviewNext)
|
||||||
self._previewReplay.clicked.connect(self._onReplayAudio)
|
self._previewReplay.clicked.connect(self._onReplayAudio)
|
||||||
|
|
||||||
|
self._setupPreviewWebview()
|
||||||
|
|
||||||
vbox.addWidget(bbox)
|
vbox.addWidget(bbox)
|
||||||
self._previewWindow.setLayout(vbox)
|
self._previewWindow.setLayout(vbox)
|
||||||
restoreGeom(self._previewWindow, "preview")
|
restoreGeom(self._previewWindow, "preview")
|
||||||
|
@ -1105,35 +1113,57 @@ where id in %s""" % ids2str(sf))
|
||||||
def _onClosePreview(self):
|
def _onClosePreview(self):
|
||||||
self._previewWindow = self._previewPrev = self._previewNext = None
|
self._previewWindow = self._previewPrev = self._previewNext = None
|
||||||
|
|
||||||
def _renderPreview(self, cardChanged=False):
|
def _setupPreviewWebview(self):
|
||||||
if not self._previewWindow:
|
|
||||||
return
|
|
||||||
c = self.card
|
|
||||||
if not c:
|
|
||||||
txt = _("(please select 1 card)")
|
|
||||||
self._previewWeb.stdHtml(txt)
|
|
||||||
self._updatePreviewButtons()
|
|
||||||
return
|
|
||||||
self._updatePreviewButtons()
|
|
||||||
if cardChanged:
|
|
||||||
self._previewState = "question"
|
|
||||||
# need to force reload even if answer
|
|
||||||
txt = c.q(reload=True)
|
|
||||||
if self._previewState == "answer":
|
|
||||||
txt = c.a()
|
|
||||||
txt = re.sub("\[\[type:[^]]+\]\]", "", txt)
|
|
||||||
ti = lambda x: x
|
|
||||||
base = self.mw.baseHTML()
|
base = self.mw.baseHTML()
|
||||||
jsinc = ["jquery.js","browsersel.js",
|
jsinc = ["jquery.js","browsersel.js",
|
||||||
"mathjax/conf.js", "mathjax/MathJax.js",
|
"mathjax/conf.js", "mathjax/MathJax.js",
|
||||||
"mathjax/queue-typeset.js"]
|
"reviewer.js"]
|
||||||
self._previewWeb.stdHtml(
|
self._previewWeb.stdHtml(self.mw.reviewer._revHtml+
|
||||||
ti(mungeQA(self.col, txt))+self._previewWeb.bundledCSS("reviewer.css"),
|
self._previewWeb.bundledCSS("reviewer.css"),
|
||||||
bodyClass="card card%d" % (c.ord+1), head=base,
|
head=base, js=jsinc)
|
||||||
js=jsinc)
|
|
||||||
clearAudioQueue()
|
|
||||||
if self.mw.reviewer.autoplay(c):
|
def _renderPreview(self, cardChanged=False):
|
||||||
playFromText(txt)
|
self._cancelPreviewTimer()
|
||||||
|
# avoid rendering in quick succession
|
||||||
|
elapMS = int((time.time() - self._lastPreviewRender)*1000)
|
||||||
|
if elapMS < 500:
|
||||||
|
self._previewTimer = self.mw.progress.timer(
|
||||||
|
500-elapMS, lambda: self._renderScheduledPreview(cardChanged), False)
|
||||||
|
else:
|
||||||
|
self._renderScheduledPreview(cardChanged)
|
||||||
|
|
||||||
|
def _cancelPreviewTimer(self):
|
||||||
|
if self._previewTimer:
|
||||||
|
self._previewTimer.stop()
|
||||||
|
self._previewTimer = None
|
||||||
|
|
||||||
|
def _renderScheduledPreview(self, cardChanged=False):
|
||||||
|
self._lastPreviewRender = time.time()
|
||||||
|
if not self._previewWindow:
|
||||||
|
return
|
||||||
|
c = self.card
|
||||||
|
self._updatePreviewButtons()
|
||||||
|
if not c:
|
||||||
|
txt = _("(please select 1 card)")
|
||||||
|
bodyclass = ""
|
||||||
|
else:
|
||||||
|
if cardChanged:
|
||||||
|
self._previewState = "question"
|
||||||
|
# need to force reload even if answer
|
||||||
|
txt = c.q(reload=True)
|
||||||
|
if self._previewState == "answer":
|
||||||
|
txt = c.a()
|
||||||
|
txt = re.sub("\[\[type:[^]]+\]\]", "", txt)
|
||||||
|
|
||||||
|
bodyclass="card card%d" % (c.ord+1)
|
||||||
|
|
||||||
|
clearAudioQueue()
|
||||||
|
if self.mw.reviewer.autoplay(c):
|
||||||
|
playFromText(txt)
|
||||||
|
|
||||||
|
self._previewWeb.eval(
|
||||||
|
"_showQuestion(%s,'%s');" % (json.dumps(txt), bodyclass))
|
||||||
|
|
||||||
# Card deletion
|
# Card deletion
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
|
|
||||||
|
|
Loading…
Reference in a new issue