# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import simplejson from aqt.qt import * from anki.consts import NEW_CARDS_RANDOM from anki.hooks import addHook from aqt.utils import limitedCount, showInfo class Overview(object): "Deck overview." def __init__(self, mw): self.mw = mw self.web = mw.web addHook("reset", self.refresh) def show(self): self.web.setKeyHandler(self._keyHandler) self.web.setLinkHandler(self._linkHandler) self.refresh() def refresh(self): self._renderPage() # Handlers ############################################################ def _keyHandler(self, evt): txt = evt.text() if txt == "s": self._linkHandler("study") elif txt == "c": self._linkHandler("cram") else: return return True def _linkHandler(self, url): print "link", url if url == "study": self.mw.col.reset() self.mw.moveToState("review") elif url == "anki": print "anki menu" elif url == "cram": return showInfo("not yet implemented") #self.mw.col.cramGroups() #self.mw.moveToState("review") elif url == "opts": self.mw.onStudyOptions() elif url == "decks": self.mw.moveToState("deckBrowser") # HTML ############################################################ def _renderPage(self): css = self.mw.sharedCSS + self._overviewCSS fc = self._ovForecast() tbl = self._overviewTable() but = self.mw.button deck = self.mw.col.decks.current() sid = deck.get("sharedFrom") if True: # sid: shareLink = 'Reviews and Updates' else: shareLink = "" header = "" self.web.stdHtml(self._overviewBody % dict( title=_("Overview"), table=tbl, fcsub=_("Reviews over next two weeks"), deck=deck['name'], shareLink=shareLink, desc="", header=header, fcdata=fc, ), css) _overviewBody = """ %(header)s

%(deck)s

%(shareLink)s %(desc)s

%(fcsub)s

""" _overviewCSS = """ .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): return "" but = self.mw.button buf = "" buf += "" % _("Due") buf += "" % _("New") line = "" line += "" buf += line % ( "%s" % _("Selected Groups"), counts[0], counts[1], but("study", _("Study"), _("s"), "gbut", id="study") + but("cram", _("Cram"), "c")) buf += line % ( _("Whole Deck"), counts[2], counts[3], but("opts", _("Study Options"))) buf += "
%s%s
%s%s%s%s
" return buf def _ovOpts(self): return "" # Data ########################################################################## def _ovForecast(self): 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)))