From a64075916cfade3577f692ebaf32b3b13bd19529 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Tue, 19 Apr 2011 13:05:09 +0900 Subject: [PATCH] add a review history dialog --- aqt/browser.py | 71 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 63 insertions(+), 8 deletions(-) diff --git a/aqt/browser.py b/aqt/browser.py index 57ac9afd9..c11160b7a 100644 --- a/aqt/browser.py +++ b/aqt/browser.py @@ -17,6 +17,7 @@ from aqt.utils import saveGeom, restoreGeom, saveSplitter, restoreSplitter, \ from anki.errors import * from anki.db import * from anki.hooks import runHook, addHook, removeHook +from aqt.webview import AnkiWebView COLOUR_SUSPENDED1 = "#ffffcc" COLOUR_SUSPENDED2 = "#ffffaa" @@ -708,22 +709,29 @@ class Browser(QMainWindow): self.cardStats = CardStats(self.deck, None) self.connect(self.form.cardLabel, SIGNAL("linkActivated(const QString&)"), - self.onChangeSortField) + self.onCardLink) def showCardInfo(self, card): self.cardStats.card = self.card rep = self.cardStats.report() rep = "" + rep m = self.card.model() + # add sort field sortf = m.fields[m.sortIdx()]['name'] - rep = rep.replace( - "", - ("%s" - "%s") % ( - _("Sort Field"), - "%s" % sortf)) + extra = self.cardStats.makeLine( + _("Sort Field"), "%s" % sortf) + # and revlog + extra += self.cardStats.makeLine( + _("Reviews"), "%d" % self.card.reps) + rep = rep.replace("", extra) self.form.cardLabel.setText(rep) + def onCardLink(self, url): + if url == "sort": + self.onChangeSortField() + else: + self.onRevlog() + def onChangeSortField(self): from aqt.utils import chooseList m = self.card.model() @@ -736,6 +744,54 @@ class Browser(QMainWindow): self.mw.progress.finish() self.onSearch() + def onRevlog(self): + data = self._revlogData() + d = QDialog(self) + l = QVBoxLayout() + l.setMargin(0) + w = AnkiWebView(self.mw) + l.addWidget(w) + w.stdHtml(data) + bb = QDialogButtonBox(QDialogButtonBox.Close) + l.addWidget(bb) + bb.connect(bb, SIGNAL("rejected()"), d, SLOT("reject()")) + d.setLayout(l) + d.setWindowModality(Qt.WindowModal) + d.exec_() + + def _revlogData(self): + s = "" % _("Date") + s += ("" * 5) % ( + _("Type"), _("Ease"), _("Interval"), _("Factor"), _("Time")) + for (date, ease, ivl, factor, taken, type) in self.mw.deck.db.execute( + "select time/1000, ease, ivl, factor, taken/1000.0, type " + "from revlog where cid = ?", self.card.id): + s += "" % time.strftime(_("%Y-%m-%d @ %H:%M"), + time.localtime(date)) + tstr = [_("Learn"), _("Review"), _("Relearn"), _("Cram"), + _("Resched")][type] + import anki.stats as st + fmt = "%s" + if type == 0: + tstr = fmt % (st.colLearn, tstr) + elif type == 1: + tstr = fmt % (st.colMature, tstr) + elif type == 2: + tstr = fmt % (st.colRelearn, tstr) + elif type == 3: + tstr = fmt % (st.colCram, tstr) + else: + tstr = fmt % ("#000", tstr) + if ease == 1: + ease = fmt % (st.colRelearn, ease) + s += ("" * 5) % ( + tstr, + ease, _("%dd") % ivl if ivl >= 0 else self.cardStats.time(-ivl), + "%d%%" % (factor/10) if factor else "", + self.cardStats.time(taken)) + "" + s += "
%s%s
%s%s
" + return s + # Menu helpers ###################################################################### @@ -836,7 +892,6 @@ where id in %s""" % ids2str(sf)) "update facts set gid = ? where id in " + ids2str( self.selectedFacts()), gid) else: - print "updating cards" self.deck.db.execute(""" update cards set gid = (select gid from facts where id = cards.fid) where id in %s""" % ids2str(self.selectedCards()))