diff --git a/aqt/browser.py b/aqt/browser.py index d18916568..e43a58a60 100644 --- a/aqt/browser.py +++ b/aqt/browser.py @@ -1015,6 +1015,10 @@ where id in %s""" % ids2str(sf)) self._previewWeb = AnkiWebView(True) vbox.addWidget(self._previewWeb) bbox = QDialogButtonBox() + self._previewReplay = bbox.addButton(_("Replay Audio"), QDialogButtonBox.ActionRole) + self._previewReplay.setAutoDefault(False) + self._previewReplay.setShortcut(QKeySequence("R")) + self._previewReplay.setToolTip(_("Shortcut key: %s" % "R")) self._previewPrev = bbox.addButton("<", QDialogButtonBox.ActionRole) self._previewPrev.setAutoDefault(False) self._previewPrev.setShortcut(QKeySequence("Left")) @@ -1023,6 +1027,7 @@ where id in %s""" % ids2str(sf)) self._previewNext.setShortcut(QKeySequence("Right")) c(self._previewPrev, SIGNAL("clicked()"), self._onPreviewPrev) c(self._previewNext, SIGNAL("clicked()"), self._onPreviewNext) + c(self._previewReplay, SIGNAL("clicked()"), self._onReplayAudio) vbox.addWidget(bbox) self._previewWindow.setLayout(vbox) restoreGeom(self._previewWindow, "preview") @@ -1050,6 +1055,9 @@ where id in %s""" % ids2str(sf)) self.onNextCard() self._updatePreviewButtons() + def _onReplayAudio(self): + self.mw.reviewer.replayAudio(self) + def _updatePreviewButtons(self): if not self._previewWindow: return diff --git a/aqt/reviewer.py b/aqt/reviewer.py index c00bbf76c..40a5dcdc9 100644 --- a/aqt/reviewer.py +++ b/aqt/reviewer.py @@ -106,14 +106,19 @@ class Reviewer(object): # Audio ########################################################################## - def replayAudio(self): + def replayAudio(self, previewer=None): + if previewer: + state = previewer._previewState + c = previewer.card + else: + state = self.state + c = self.card clearAudioQueue() - c = self.card - if self.state == "question": + if state == "question": playFromText(c.q()) - elif self.state == "answer": + elif state == "answer": txt = "" - if self._replayq(c): + if self._replayq(c, previewer): txt = c.q() txt += c.a() playFromText(txt) @@ -218,9 +223,10 @@ The front of this card is empty. Please run Tools>Empty Cards.""") return self.mw.col.decks.confForDid( card.odid or card.did)['autoplay'] - def _replayq(self, card): - return self.mw.col.decks.confForDid( - self.card.odid or self.card.did).get('replayq', True) + def _replayq(self, card, previewer=None): + s = previewer if previewer else self + return s.mw.col.decks.confForDid( + s.card.odid or s.card.did).get('replayq', True) def _toggleStar(self): self.web.eval("_toggleStar(%s);" % json.dumps(