fix stats, start work on revamped overview

This commit is contained in:
Damien Elmes 2011-11-26 13:20:55 +09:00
parent 67c2ccc954
commit 5f1b762a15
9 changed files with 57 additions and 66 deletions

View file

@ -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
##########################################################################

View file

@ -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()

View file

@ -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)

View file

@ -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)

View file

@ -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()

View file

@ -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 = "&nbsp;" * 2
ctxt = '<font color="#000099">%s</font>' % counts[0]

View file

@ -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()

View file

@ -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()

View file

@ -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>