mirror of
https://github.com/ankitects/anki.git
synced 2025-09-19 14:32:22 -04:00
showing cards
This commit is contained in:
parent
d554fc22ba
commit
b8f03c298b
1 changed files with 28 additions and 67 deletions
|
@ -10,7 +10,7 @@ import time, types, sys, re
|
|||
from operator import attrgetter, itemgetter
|
||||
import anki, anki.utils, aqt.forms
|
||||
from anki.utils import fmtTimeSpan, parseTags, hasTag, addTags, delTags, \
|
||||
ids2str
|
||||
ids2str, stripHTMLMedia
|
||||
from aqt.utils import saveGeom, restoreGeom, saveSplitter, restoreSplitter, \
|
||||
saveHeader, restoreHeader, saveState, restoreState, applyStyles
|
||||
from anki.errors import *
|
||||
|
@ -20,22 +20,6 @@ from anki.hooks import runHook, addHook, removeHook
|
|||
|
||||
# - first answered needs updating
|
||||
|
||||
CARD_ID = 0
|
||||
CARD_QUESTION = 1
|
||||
CARD_ANSWER = 2
|
||||
CARD_DUE = 3
|
||||
CARD_REPS = 4
|
||||
CARD_FACTID = 5
|
||||
CARD_CREATED = 6
|
||||
CARD_MODIFIED = 7
|
||||
CARD_INTERVAL = 8
|
||||
CARD_EASE = 9
|
||||
CARD_NO = 10
|
||||
CARD_TYPE = 11
|
||||
CARD_TAGS = 12
|
||||
CARD_FACTCREATED = 13
|
||||
CARD_FIRSTANSWERED = 14
|
||||
|
||||
COLOUR_SUSPENDED1 = "#ffffcc"
|
||||
COLOUR_SUSPENDED2 = "#ffffaa"
|
||||
COLOUR_INACTIVE1 = "#ffcccc"
|
||||
|
@ -48,10 +32,10 @@ COLOUR_MARKED2 = "#aaaaff"
|
|||
|
||||
class DeckModel(QAbstractTableModel):
|
||||
|
||||
def __init__(self, parent, deck):
|
||||
def __init__(self, parent):
|
||||
QAbstractTableModel.__init__(self)
|
||||
self.parent = parent
|
||||
self.deck = deck
|
||||
self.deck = parent.deck
|
||||
self.filterTag = None
|
||||
self.sortKey = None
|
||||
# column title, display accessor, sort attr
|
||||
|
@ -62,7 +46,7 @@ class DeckModel(QAbstractTableModel):
|
|||
self.searchStr = ""
|
||||
self.lastSearch = ""
|
||||
self.cards = []
|
||||
self.deleted = {}
|
||||
self.cardObjs = {}
|
||||
|
||||
# Model interface
|
||||
######################################################################
|
||||
|
@ -78,21 +62,19 @@ class DeckModel(QAbstractTableModel):
|
|||
return QVariant()
|
||||
if role == Qt.FontRole:
|
||||
f = QFont()
|
||||
f.setPixelSize(self.parent.config['editFontSize'])
|
||||
f.setPixelSize(self.parent.mw.config['editFontSize'])
|
||||
return QVariant(f)
|
||||
if role == Qt.TextAlignmentRole and index.column() == 2:
|
||||
return QVariant(Qt.AlignHCenter)
|
||||
elif role == Qt.DisplayRole or role == Qt.EditRole:
|
||||
if len(self.cards[index.row()]) == 1:
|
||||
# not cached yet
|
||||
self.updateCard(index)
|
||||
c = self.getCard(index)
|
||||
s = self.columns[index.column()][1](index)
|
||||
s = self.limitContent(s)
|
||||
s = s.replace("<br>", u" ")
|
||||
s = s.replace("<br />", u" ")
|
||||
s = s.replace("\n", u" ")
|
||||
s = re.sub("\[sound:[^]]+\]", "", s)
|
||||
s = stripHTMLAlt(s)
|
||||
s = stripHTMLMedia(s)
|
||||
s = s.strip()
|
||||
return QVariant(s)
|
||||
else:
|
||||
|
@ -125,56 +107,37 @@ class DeckModel(QAbstractTableModel):
|
|||
######################################################################
|
||||
|
||||
def showMatching(self, force=True):
|
||||
return
|
||||
self.cards = self.deck.findCards(self.searchStr.strip(), "factFld")
|
||||
# if self.deck.getInt('reverseOrder'):
|
||||
# self.cards.reverse()
|
||||
self.reset()
|
||||
|
||||
def updateCard(self, index):
|
||||
try:
|
||||
self.cards[index.row()] = self.deck.db.first("""
|
||||
select id, question, answer, due, reps, factId, created, modified,
|
||||
interval, factor, lapses, type, (select tags from facts where
|
||||
facts.id = cards.factId), (select created from facts where
|
||||
facts.id = cards.factId) from cards where id = :id""",
|
||||
id=self.cards[index.row()][0])
|
||||
self.emit(SIGNAL("layoutChanged()"))
|
||||
except:
|
||||
# called after search changed
|
||||
pass
|
||||
|
||||
def refresh(self):
|
||||
self.cards = [[x[0]] for x in self.cards]
|
||||
self.cardObjs = {}
|
||||
self.emit(SIGNAL("layoutChanged()"))
|
||||
|
||||
# Tools
|
||||
######################################################################
|
||||
|
||||
def getCardID(self, index):
|
||||
return self.cards[index.row()][0]
|
||||
|
||||
def getCard(self, index):
|
||||
try:
|
||||
return self.deck.db.query(Card).get(self.getCardID(index))
|
||||
except IndexError:
|
||||
return None
|
||||
|
||||
def cardIndex(self, card):
|
||||
"Return the index of CARD, if currently displayed."
|
||||
return self.cards.index(card)
|
||||
id = self.cards[index.row()]
|
||||
if not id in self.cardObjs:
|
||||
self.cardObjs[id] = self.deck.getCard(id)
|
||||
return self.cardObjs[id]
|
||||
|
||||
def currentQuestion(self, index):
|
||||
return self.cards[index.row()][CARD_QUESTION]
|
||||
return self.getCard(index).q()
|
||||
|
||||
def currentAnswer(self, index):
|
||||
return self.cards[index.row()][CARD_ANSWER]
|
||||
return self.getCard(index).a()
|
||||
|
||||
def nextDue(self, index):
|
||||
d = self.cards[index.row()][CARD_DUE]
|
||||
reps = self.cards[index.row()][CARD_REPS]
|
||||
c = self.getCard(index)
|
||||
d = c.due
|
||||
reps = c.reps
|
||||
secs = d - time.time()
|
||||
if secs <= 0:
|
||||
if not reps and self.deck.newCardOrder == 0:
|
||||
if not reps:
|
||||
return _("(new card)")
|
||||
else:
|
||||
return _("%s ago") % fmtTimeSpan(abs(secs), pad=0)
|
||||
|
@ -262,10 +225,8 @@ class StatusDelegate(QItemDelegate):
|
|||
self.model = model
|
||||
|
||||
def paint(self, painter, option, index):
|
||||
if len(self.model.cards[index.row()]) == 1:
|
||||
self.model.updateCard(index)
|
||||
row = self.model.cards[index.row()]
|
||||
if row[CARD_TYPE] < 0:
|
||||
c = self.model.getCard(index)
|
||||
if c.queue < 0:
|
||||
# custom render
|
||||
if index.row() % 2 == 0:
|
||||
brush = QBrush(QColor(COLOUR_SUSPENDED1))
|
||||
|
@ -274,7 +235,7 @@ class StatusDelegate(QItemDelegate):
|
|||
painter.save()
|
||||
painter.fillRect(option.rect, brush)
|
||||
painter.restore()
|
||||
elif "Marked" in row[CARD_TAGS]:
|
||||
elif c.fact().hasTag("Marked"):
|
||||
if index.row() % 2 == 0:
|
||||
brush = QBrush(QColor(COLOUR_MARKED1))
|
||||
else:
|
||||
|
@ -305,7 +266,7 @@ class Browser(QMainWindow):
|
|||
self.mw.config['iconSize']))
|
||||
self.dialog.toolBar.toggleViewAction().setText(_("Toggle Toolbar"))
|
||||
# flush all changes before we load
|
||||
self.model = DeckModel(self.mw, self.mw.deck)
|
||||
self.model = DeckModel(self)
|
||||
self.dialog.tableView.setSortingEnabled(False)
|
||||
self.dialog.tableView.setShowGrid(False)
|
||||
self.dialog.tableView.setModel(self.model)
|
||||
|
@ -543,8 +504,8 @@ class Browser(QMainWindow):
|
|||
self.updateAfterCardChange()
|
||||
else:
|
||||
# update list
|
||||
if self.currentRow and self.model.cards:
|
||||
self.model.updateCard(self.currentRow)
|
||||
# if self.currentRow and self.model.cards:
|
||||
# self.model.updateCard(self.currentRow)
|
||||
if type == "tag":
|
||||
self.drawTags()
|
||||
|
||||
|
@ -690,8 +651,8 @@ class Browser(QMainWindow):
|
|||
if not self.currentCard:
|
||||
self.editor.setFact(None, True)
|
||||
return
|
||||
fact = self.currentCard.fact
|
||||
self.editor.setFact(fact, True)
|
||||
fact = self.currentCard.fact()
|
||||
self.editor.setFact(fact)
|
||||
self.editor.card = self.currentCard
|
||||
self.showCardInfo(self.currentCard)
|
||||
self.onEvent()
|
||||
|
@ -820,7 +781,7 @@ where id in (%s)""" % ",".join([
|
|||
self.updateAfterCardChange()
|
||||
|
||||
def isMarked(self):
|
||||
return self.currentCard and "Marked" in self.currentCard.fact.tags
|
||||
return self.currentCard and self.currentCard.fact().hasTag("Marked")
|
||||
|
||||
def onMark(self, mark):
|
||||
if mark:
|
||||
|
|
Loading…
Reference in a new issue