From 4467b7c991df4b71493f62335f6d8951f3afcd9f Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Wed, 16 Aug 2017 20:30:29 +1000 Subject: [PATCH] restore marking support maybe multiple mark types would make sense in the future, but for now let's stick to what will work in the older clients --- aqt/browser.py | 18 ++++++++++++++++-- aqt/reviewer.py | 17 +++++++++++++++++ designer/browser.ui | 9 +++++++++ web/reviewer.css | 15 ++++++++++++++- web/reviewer.js | 9 +++++++++ 5 files changed, 65 insertions(+), 3 deletions(-) diff --git a/aqt/browser.py b/aqt/browser.py index d23abc576..7d1b594cc 100644 --- a/aqt/browser.py +++ b/aqt/browser.py @@ -314,6 +314,7 @@ class DataModel(QAbstractTableModel): ###################################################################### COLOUR_SUSPENDED = "#FFFFB2" +COLOUR_MARKED = "#ccc" flagColours = { 1: "#F5B7B1", @@ -345,7 +346,8 @@ class StatusDelegate(QItemDelegate): col = COLOUR_SUSPENDED elif c.userFlag() > 0: col = flagColours[c.userFlag()] - + elif c.note().hasTag("Marked"): + col = COLOUR_MARKED if col: brush = QBrush(QColor(col)) painter.save() @@ -408,6 +410,7 @@ class Browser(QMainWindow): f.actionAdd_Tags.triggered.connect(lambda: self.addTags()) f.actionRemove_Tags.triggered.connect(lambda: self.deleteTags()) f.actionClear_Unused_Tags.triggered.connect(self.clearUnusedTags) + f.actionToggle_Mark.triggered.connect(lambda: self.onMark()) f.actionChangeModel.triggered.connect(self.onChangeModel) f.actionFindDuplicates.triggered.connect(self.onFindDupes) f.actionFindReplace.triggered.connect(self.onFindReplace) @@ -1464,13 +1467,24 @@ update cards set usn=?, mod=?, did=? where id in """ + scids, self.model.reset() self.mw.requireReset() - # Flags + # Flags & Marking ###################################################################### def onSetFlag(self, n): self.col.setUserFlag(n, self.selectedCards()) self.model.reset() + def onMark(self, mark=None): + if mark is None: + mark = not self.isMarked() + if mark: + self.addTags(tags="marked", label=False) + else: + self.deleteTags(tags="marked", label=False) + + def isMarked(self): + return not not (self.card and self.card.note().hasTag("Marked")) + # Repositioning ###################################################################### diff --git a/aqt/reviewer.py b/aqt/reviewer.py index 452da6972..2a6003a05 100644 --- a/aqt/reviewer.py +++ b/aqt/reviewer.py @@ -120,6 +120,7 @@ class Reviewer: def revHtml(self): extra = self.mw.col.conf.get("reviewExtra", "") return f""" +
{extra} @@ -171,6 +172,7 @@ The front of this card is empty. Please run Tools>Empty Cards.""") self.web.eval("_showQuestion(%s,'%s');" % (json.dumps(q), bodyclass)) self._drawFlag() + self._drawMark() self._showAnswerButton() # if we have a type answer field, focus main web if self.typeCorrect: @@ -190,6 +192,10 @@ The front of this card is empty. Please run Tools>Empty Cards.""") def _drawFlag(self): self.web.eval("_drawFlag(%s);" % self.card.userFlag()) + def _drawMark(self): + self.web.eval("_drawMark(%s);" % json.dumps( + self.card.note().hasTag("marked"))) + # Showing the answer ########################################################################## @@ -243,6 +249,7 @@ The front of this card is empty. Please run Tools>Empty Cards.""") ("Ctrl+3", lambda: self.setFlag(3)), ("Ctrl+4", lambda: self.setFlag(4)), ("Ctrl+0", lambda: self.setFlag(0)), + ("*", self.onMark), ("=", self.onBuryNote), ("-", self.onBuryCard), ("!", self.onSuspend), @@ -574,6 +581,7 @@ time = %(time)d; [_("Blue Flag"), "Ctrl+4", lambda: self.setFlag(4)], [_("No Flag"), "Ctrl+5", lambda: self.setFlag(0)], ]], + [_("Mark Note"), "*", self.onMark], [_("Bury Card"), "-", self.onBuryCard], [_("Bury Note"), "=", self.onBuryNote], [_("Suspend Card"), "@", self.onSuspendCard], @@ -616,6 +624,15 @@ time = %(time)d; self.card.flush() self._drawFlag() + def onMark(self): + f = self.card.note() + if f.hasTag("marked"): + f.delTag("marked") + else: + f.addTag("marked") + f.flush() + self._drawMark() + def onSuspend(self): self.mw.checkpoint(_("Suspend")) self.mw.col.sched.suspendCards( diff --git a/designer/browser.ui b/designer/browser.ui index c85c37288..38713fcc6 100644 --- a/designer/browser.ui +++ b/designer/browser.ui @@ -294,6 +294,7 @@ + @@ -569,6 +570,14 @@ Manage Note Types... + + + Toggle Mark + + + Ctrl+K + + diff --git a/web/reviewer.css b/web/reviewer.css index 44967cbaf..59c2f8561 100644 --- a/web/reviewer.css +++ b/web/reviewer.css @@ -14,10 +14,23 @@ img { #_flag { position: fixed; - right: 7px; + right: 10px; top: 0; font-size: 30px; display: none; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: black; +} + +#_mark { + position: fixed; + left: 10px; + top: 0; + font-size: 30px; + color: yellow; + display: none; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: black; } #typeans { diff --git a/web/reviewer.js b/web/reviewer.js index 5b195c134..ef2b21e24 100644 --- a/web/reviewer.js +++ b/web/reviewer.js @@ -76,6 +76,15 @@ function _drawFlag(flag) { elem.css("color", _flagColours[flag]); } +function _drawMark(mark) { + var elem = $("#_mark"); + if (!mark) { + elem.hide(); + } else { + elem.show(); + } +} + function _typeAnsPress() { if (window.event.keyCode === 13) { pycmd("ans");