mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 14:02:21 -04:00
fix stats, start work on revamped overview
This commit is contained in:
parent
67c2ccc954
commit
5f1b762a15
9 changed files with 57 additions and 66 deletions
|
@ -25,8 +25,7 @@ class DeckBrowser(object):
|
|||
else:
|
||||
cmd = url
|
||||
if cmd == "open":
|
||||
deck = self._decks[int(arg)]
|
||||
self._selDeck(deck)
|
||||
self._selDeck(arg)
|
||||
elif cmd == "opts":
|
||||
self._optsForRow(int(arg))
|
||||
elif cmd == "download":
|
||||
|
@ -42,8 +41,9 @@ class DeckBrowser(object):
|
|||
elif cmd == "refresh":
|
||||
self.refresh()
|
||||
|
||||
def _selDeck(self, rec):
|
||||
print rec
|
||||
def _selDeck(self, did):
|
||||
self.mw.col.decks.select(did)
|
||||
self.mw.moveToState("overview")
|
||||
|
||||
# HTML generation
|
||||
##########################################################################
|
||||
|
|
|
@ -190,7 +190,7 @@ Are you sure?"""):
|
|||
self.onSync()
|
||||
# then load collection and launch into the deck browser
|
||||
self.col = Collection(self.pm.collectionPath())
|
||||
self.moveToState("deckBrowser")
|
||||
self.moveToState("overview")
|
||||
|
||||
def unloadProfile(self):
|
||||
self.col = None
|
||||
|
@ -227,6 +227,7 @@ Are you sure?"""):
|
|||
self.reviewer.show()
|
||||
|
||||
def _reviewCleanup(self, newState):
|
||||
print "rethink cleanup code?"
|
||||
if newState != "resetRequired":
|
||||
self.reviewer.cleanup()
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ class ModelChooser(QHBoxLayout):
|
|||
QHBoxLayout.__init__(self)
|
||||
self.widget = widget
|
||||
self.mw = mw
|
||||
self.deck = mw.deck
|
||||
self.deck = mw.col
|
||||
self.handleCards = cards
|
||||
self.label = label
|
||||
self._ignoreReset = False
|
||||
|
@ -151,7 +151,7 @@ class AddModel(QDialog):
|
|||
def __init__(self, mw, parent=None):
|
||||
self.parent = parent or mw
|
||||
self.mw = mw
|
||||
self.deck = mw.deck
|
||||
self.deck = mw.col
|
||||
QDialog.__init__(self, self.parent, Qt.Window)
|
||||
self.model = None
|
||||
self.dialog = aqt.forms.addmodel.Ui_Dialog()
|
||||
|
@ -191,7 +191,7 @@ class AddModel(QDialog):
|
|||
self.model = model(self.deck)
|
||||
else:
|
||||
# add copy to deck
|
||||
self.mw.deck.addModel(model)
|
||||
self.mw.col.addModel(model)
|
||||
self.model = model
|
||||
QDialog.accept(self)
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ class Models(QDialog):
|
|||
self.mw = mw
|
||||
self.parent = parent or mw
|
||||
QDialog.__init__(self, self.parent, Qt.Window)
|
||||
self.deck = mw.deck
|
||||
self.deck = mw.col
|
||||
self.mw.checkpoint(_("Models"))
|
||||
self.form = aqt.forms.models.Ui_Dialog()
|
||||
self.form.setupUi(self)
|
||||
|
|
|
@ -17,7 +17,6 @@ class Overview(object):
|
|||
addHook("reset", self.refresh)
|
||||
|
||||
def show(self):
|
||||
self._setupToolbar()
|
||||
self.web.setKeyHandler(self._keyHandler)
|
||||
self.web.setLinkHandler(self._linkHandler)
|
||||
self.refresh()
|
||||
|
@ -41,11 +40,11 @@ class Overview(object):
|
|||
def _linkHandler(self, url):
|
||||
print "link", url
|
||||
if url == "study":
|
||||
self.mw.deck.reset()
|
||||
self.mw.col.reset()
|
||||
self.mw.moveToState("review")
|
||||
elif url == "cram":
|
||||
return showInfo("not yet implemented")
|
||||
#self.mw.deck.cramGroups()
|
||||
#self.mw.col.cramGroups()
|
||||
#self.mw.moveToState("review")
|
||||
elif url == "opts":
|
||||
self.mw.onStudyOptions()
|
||||
|
@ -60,18 +59,28 @@ class Overview(object):
|
|||
fc = self._ovForecast()
|
||||
tbl = self._overviewTable()
|
||||
but = self.mw.button
|
||||
deck = self.mw.col.decks.current()
|
||||
dname = deck['name']
|
||||
sid = deck.get("sharedFrom")
|
||||
if True: # sid:
|
||||
shareLink = '<a class=smallLink href="review">Reviews and Updates</a>'
|
||||
else:
|
||||
shareLink = ""
|
||||
self.web.stdHtml(self._overviewBody % dict(
|
||||
title=_("Overview"),
|
||||
table=tbl,
|
||||
fcsub=_("Reviews over next two weeks"),
|
||||
deck=deck['name'],
|
||||
shareLink=shareLink,
|
||||
desc="",
|
||||
fcdata=fc,
|
||||
), css)
|
||||
|
||||
_overviewBody = """
|
||||
<center>
|
||||
<h1>%(title)s</h1>
|
||||
<p>
|
||||
%(table)s
|
||||
<h3>%(deck)s</h3>
|
||||
%(shareLink)s
|
||||
%(desc)s
|
||||
<p>
|
||||
<div id="placeholder" style="width:350px; height:100px;"></div>
|
||||
<span class=sub>%(fcsub)s</span>
|
||||
|
@ -101,10 +110,12 @@ $(function () {
|
|||
.due { text-align: right; }
|
||||
.new { text-align: right; }
|
||||
.sub { font-size: 80%; color: #555; }
|
||||
.smallLink { font-size: 12px; }
|
||||
h3 { margin-bottom: 0; }
|
||||
"""
|
||||
|
||||
def _overviewTable(self):
|
||||
counts = self._ovCounts()
|
||||
return ""
|
||||
but = self.mw.button
|
||||
buf = "<table cellspacing=0 cellpadding=3 width=400>"
|
||||
buf += "<tr><th></th><th align=right>%s</th>" % _("Due")
|
||||
|
@ -129,27 +140,8 @@ $(function () {
|
|||
# Data
|
||||
##########################################################################
|
||||
|
||||
def _ovCounts(self):
|
||||
# we have the limited count already
|
||||
selcnt = [0,0,0] #self.mw.deck.sched.selCounts()
|
||||
allcnt = [0,0,0] #self.mw.deck.sched.allCounts()
|
||||
return [
|
||||
limitedCount(selcnt[1] + selcnt[2]),
|
||||
selcnt[0],
|
||||
limitedCount(allcnt[1] + allcnt[2]),
|
||||
allcnt[0],
|
||||
]
|
||||
|
||||
def _ovForecast(self):
|
||||
fc = self.mw.deck.sched.dueForecast(14)
|
||||
fc = self.mw.col.sched.dueForecast(14)
|
||||
if not sum(fc):
|
||||
return "'%s'" % _('No cards due in next two weeks')
|
||||
return simplejson.dumps(tuple(enumerate(fc)))
|
||||
|
||||
# Toolbar
|
||||
##########################################################################
|
||||
|
||||
def _setupToolbar(self):
|
||||
if not self.mw.config['showToolbar']:
|
||||
return
|
||||
self.mw.form.toolBar.show()
|
||||
|
|
|
@ -37,7 +37,7 @@ class Reviewer(object):
|
|||
def lastCard(self):
|
||||
if self._answeredIds:
|
||||
if not self.card or self._answeredIds[-1] != self.card.id:
|
||||
return self.mw.deck.getCard(self._answeredIds[-1])
|
||||
return self.mw.col.getCard(self._answeredIds[-1])
|
||||
|
||||
def cleanup(self):
|
||||
self._hideStatus()
|
||||
|
@ -52,7 +52,7 @@ class Reviewer(object):
|
|||
# a card has been retrieved from undo
|
||||
c = self.cardQueue.pop()
|
||||
else:
|
||||
c = self.mw.deck.sched.getCard()
|
||||
c = self.mw.col.sched.getCard()
|
||||
self.card = c
|
||||
clearAudioQueue()
|
||||
if c:
|
||||
|
@ -65,7 +65,7 @@ class Reviewer(object):
|
|||
else:
|
||||
self._hideStatus()
|
||||
self.mw.disableCardMenuItems()
|
||||
if self.mw.deck.cardCount():
|
||||
if self.mw.col.cardCount():
|
||||
self._showCongrats()
|
||||
else:
|
||||
self._showEmpty()
|
||||
|
@ -184,7 +184,7 @@ $(".ansbut").focus();
|
|||
if self.mw.config['autoplaySounds']:
|
||||
playFromText(q)
|
||||
# render
|
||||
esc = self.mw.deck.media.escapeImages
|
||||
esc = self.mw.col.media.escapeImages
|
||||
q=esc(mungeQA(q)) + self.typeAnsInput()
|
||||
a=esc(mungeQA(a))
|
||||
self.web.eval("_updateQA(%s);" % simplejson.dumps(
|
||||
|
@ -208,13 +208,13 @@ $(".ansbut").focus();
|
|||
##########################################################################
|
||||
|
||||
def _defaultEase(self):
|
||||
if self.mw.deck.sched.answerButtons(self.card) == 4:
|
||||
if self.mw.col.sched.answerButtons(self.card) == 4:
|
||||
return 3
|
||||
else:
|
||||
return 2
|
||||
|
||||
def _answerButtons(self):
|
||||
if self.mw.deck.sched.answerButtons(self.card) == 4:
|
||||
if self.mw.col.sched.answerButtons(self.card) == 4:
|
||||
labels = (_("Again"), _("Hard"), _("Good"), _("Easy"))
|
||||
else:
|
||||
labels = (_("Again"), _("Good"), _("Easy"))
|
||||
|
@ -240,7 +240,7 @@ $(".ansbut").focus();
|
|||
def _buttonTime(self, i, green):
|
||||
if self.mw.config['suppressEstimates']:
|
||||
return ""
|
||||
txt = self.mw.deck.sched.nextIvlStr(self.card, i+1, True)
|
||||
txt = self.mw.col.sched.nextIvlStr(self.card, i+1, True)
|
||||
if i == 0:
|
||||
txt = '<span style="color: #700">%s</span>' % txt
|
||||
elif i == green:
|
||||
|
@ -252,7 +252,7 @@ $(".ansbut").focus();
|
|||
|
||||
def _answerCard(self, ease):
|
||||
"Reschedule card and show next."
|
||||
self.mw.deck.sched.answerCard(self.card, ease)
|
||||
self.mw.col.sched.answerCard(self.card, ease)
|
||||
self._answeredIds.append(self.card.id)
|
||||
self.mw.autosave()
|
||||
self.nextCard()
|
||||
|
@ -373,7 +373,7 @@ div#filler {
|
|||
|
||||
def _styles(self):
|
||||
css = self.mw.sharedCSS
|
||||
css += self.mw.deck.models.css()
|
||||
css += self.mw.col.models.css()
|
||||
css += self._css
|
||||
return css
|
||||
|
||||
|
@ -401,7 +401,7 @@ div#filler {
|
|||
def processTypedAns(self, given):
|
||||
ord = self.typeAns()
|
||||
try:
|
||||
cor = self.mw.deck.media.strip(
|
||||
cor = self.mw.col.media.strip(
|
||||
stripHTML(self.card.note().fields[ord]))
|
||||
except IndexError:
|
||||
self.card.template()['typeAns'] = None
|
||||
|
@ -481,7 +481,7 @@ div#filler {
|
|||
<p>
|
||||
%s
|
||||
<script>$("#ov").focus();</script>
|
||||
</center>""" % (self.mw.deck.sched.finishedMsg(),
|
||||
</center>""" % (self.mw.col.sched.finishedMsg(),
|
||||
self.mw.button(key="o", name=_("Overview"), link="ov", id='ov'))
|
||||
self.web.stdHtml(buf, css=self.mw.sharedCSS)
|
||||
runHook('deckFinished')
|
||||
|
@ -574,8 +574,8 @@ div#filler {
|
|||
|
||||
# fixme: only show progress for reviews, and only when revs due?
|
||||
def _updateRemaining(self):
|
||||
counts = list(self.mw.deck.sched.repCounts())
|
||||
idx = self.mw.deck.sched.countIdx(self.card)
|
||||
counts = list(self.mw.col.sched.repCounts())
|
||||
idx = self.mw.col.sched.countIdx(self.card)
|
||||
counts[idx] = "<u>%s</u>" % (counts[idx]+1)
|
||||
space = " " * 2
|
||||
ctxt = '<font color="#000099">%s</font>' % counts[0]
|
||||
|
|
20
aqt/stats.py
20
aqt/stats.py
|
@ -45,7 +45,7 @@ class CardStats(object):
|
|||
return
|
||||
txt = ""
|
||||
r = self.mw.reviewer
|
||||
d = self.mw.deck
|
||||
d = self.mw.col
|
||||
if r.card:
|
||||
txt += _("<h1>Current</h1>")
|
||||
txt += d.cardStats(r.card)
|
||||
|
@ -70,9 +70,9 @@ class DeckStats(QDialog):
|
|||
self.mw = mw
|
||||
self.name = "deckStats"
|
||||
self.period = 0
|
||||
self.sel = True
|
||||
self.form = aqt.forms.stats.Ui_Dialog()
|
||||
self.oldPos = None
|
||||
self.wholeCollection = False
|
||||
f = self.form
|
||||
f.setupUi(self)
|
||||
restoreGeom(self, self.name)
|
||||
|
@ -82,9 +82,9 @@ class DeckStats(QDialog):
|
|||
b.setAutoDefault(False)
|
||||
c = self.connect
|
||||
s = SIGNAL("clicked()")
|
||||
c(f.groups, s, lambda: self.changeSel(True))
|
||||
c(f.groups, s, lambda: self.changeScope("deck"))
|
||||
f.groups.setShortcut("g")
|
||||
c(f.all, s, lambda: self.changeSel(False))
|
||||
c(f.all, s, lambda: self.changeScope("collection"))
|
||||
c(f.month, s, lambda: self.changePeriod(0))
|
||||
c(f.year, s, lambda: self.changePeriod(1))
|
||||
c(f.life, s, lambda: self.changePeriod(2))
|
||||
|
@ -115,10 +115,8 @@ class DeckStats(QDialog):
|
|||
self.period = n
|
||||
self.refresh()
|
||||
|
||||
def changeSel(self, sel):
|
||||
self.sel = sel
|
||||
if sel:
|
||||
self.mw.onGroups(self)
|
||||
def changeScope(self, type):
|
||||
self.wholeCollection = type == "collection"
|
||||
self.refresh()
|
||||
|
||||
def loadFin(self, b):
|
||||
|
@ -127,8 +125,8 @@ class DeckStats(QDialog):
|
|||
def refresh(self):
|
||||
self.mw.progress.start(immediate=True)
|
||||
self.oldPos = self.form.web.page().mainFrame().scrollPosition()
|
||||
self.report = self.mw.deck.stats().report(
|
||||
type=self.period)
|
||||
stats = self.mw.col.stats()
|
||||
stats.wholeCollection = self.wholeCollection
|
||||
self.report = stats.report(type=self.period)
|
||||
self.form.web.setHtml(self.report)
|
||||
|
||||
self.mw.progress.finish()
|
||||
|
|
|
@ -30,7 +30,7 @@ class StudyOptions(QDialog):
|
|||
|
||||
def load(self):
|
||||
f = self.form
|
||||
d = self.mw.deck
|
||||
d = self.mw.col
|
||||
qc = d.conf
|
||||
f.newPerDay.setValue(qc['newPerDay'])
|
||||
f.newOrder.setCurrentIndex(qc['newOrder'])
|
||||
|
@ -47,7 +47,7 @@ class StudyOptions(QDialog):
|
|||
|
||||
def accept(self):
|
||||
f = self.form
|
||||
d = self.mw.deck
|
||||
d = self.mw.col
|
||||
qc = d.conf
|
||||
old = qc['newOrder']
|
||||
qc['newOrder'] = f.newOrder.currentIndex()
|
||||
|
@ -71,7 +71,7 @@ class StudyOptions(QDialog):
|
|||
return
|
||||
self.mw.progress.start()
|
||||
if new == 1:
|
||||
self.mw.deck.sched.orderCards()
|
||||
self.mw.col.sched.orderCards()
|
||||
else:
|
||||
self.mw.deck.sched.randomizeCards()
|
||||
self.mw.col.sched.randomizeCards()
|
||||
self.mw.progress.finish()
|
||||
|
|
|
@ -59,7 +59,7 @@
|
|||
<item>
|
||||
<widget class="QRadioButton" name="groups">
|
||||
<property name="text">
|
||||
<string>groups</string>
|
||||
<string>deck</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
|
@ -69,7 +69,7 @@
|
|||
<item>
|
||||
<widget class="QRadioButton" name="all">
|
||||
<property name="text">
|
||||
<string>all</string>
|
||||
<string>collection</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
|
Loading…
Reference in a new issue