tidy up flag/mark code

This commit is contained in:
Damien Elmes 2021-03-18 12:06:45 +10:00
parent 0331d8b588
commit 2d8e45b6da
3 changed files with 35 additions and 32 deletions

View file

@ -23,6 +23,7 @@ from anki.utils import ids2str
# public exports # public exports
TagTreeNode = _pb.TagTreeNode TagTreeNode = _pb.TagTreeNode
MARKED_TAG = "marked"
class TagManager: class TagManager:

View file

@ -19,6 +19,7 @@ from anki.errors import InvalidInput, NotFoundError
from anki.lang import without_unicode_isolation from anki.lang import without_unicode_isolation
from anki.models import NoteType from anki.models import NoteType
from anki.stats import CardStats from anki.stats import CardStats
from anki.tags import MARKED_TAG
from anki.utils import htmlToTextLine, ids2str, isMac, isWin from anki.utils import htmlToTextLine, ids2str, isMac, isWin
from aqt import AnkiQt, colors, gui_hooks from aqt import AnkiQt, colors, gui_hooks
from aqt.card_ops import set_card_deck, set_card_flag from aqt.card_ops import set_card_deck, set_card_flag
@ -454,7 +455,7 @@ class StatusDelegate(QItemDelegate):
col = None col = None
if c.user_flag() > 0: if c.user_flag() > 0:
col = getattr(colors, f"FLAG{c.user_flag()}_BG") col = getattr(colors, f"FLAG{c.user_flag()}_BG")
elif c.note().has_tag("Marked"): elif c.note().has_tag(MARKED_TAG):
col = colors.MARKED_BG col = colors.MARKED_BG
elif c.queue == QUEUE_TYPE_SUSPENDED: elif c.queue == QUEUE_TYPE_SUSPENDED:
col = colors.SUSPENDED_BG col = colors.SUSPENDED_BG
@ -562,7 +563,9 @@ class Browser(QMainWindow):
lambda: self.remove_tags_from_selected_notes(), lambda: self.remove_tags_from_selected_notes(),
) )
qconnect(f.actionClear_Unused_Tags.triggered, self.clear_unused_tags) qconnect(f.actionClear_Unused_Tags.triggered, self.clear_unused_tags)
qconnect(f.actionToggle_Mark.triggered, lambda: self.onMark()) qconnect(
f.actionToggle_Mark.triggered, lambda: self.toggle_mark_of_selected_notes()
)
qconnect(f.actionChangeModel.triggered, self.onChangeModel) qconnect(f.actionChangeModel.triggered, self.onChangeModel)
qconnect(f.actionFindDuplicates.triggered, self.onFindDupes) qconnect(f.actionFindDuplicates.triggered, self.onFindDupes)
qconnect(f.actionFindReplace.triggered, self.onFindReplace) qconnect(f.actionFindReplace.triggered, self.onFindReplace)
@ -575,10 +578,16 @@ class Browser(QMainWindow):
qconnect(f.action_set_due_date.triggered, self.set_due_date) qconnect(f.action_set_due_date.triggered, self.set_due_date)
qconnect(f.action_forget.triggered, self.forget_cards) qconnect(f.action_forget.triggered, self.forget_cards)
qconnect(f.actionToggle_Suspend.triggered, self.suspend_selected_cards) qconnect(f.actionToggle_Suspend.triggered, self.suspend_selected_cards)
qconnect(f.actionRed_Flag.triggered, lambda: self.onSetFlag(1)) qconnect(f.actionRed_Flag.triggered, lambda: self.set_flag_of_selected_cards(1))
qconnect(f.actionOrange_Flag.triggered, lambda: self.onSetFlag(2)) qconnect(
qconnect(f.actionGreen_Flag.triggered, lambda: self.onSetFlag(3)) f.actionOrange_Flag.triggered, lambda: self.set_flag_of_selected_cards(2)
qconnect(f.actionBlue_Flag.triggered, lambda: self.onSetFlag(4)) )
qconnect(
f.actionGreen_Flag.triggered, lambda: self.set_flag_of_selected_cards(3)
)
qconnect(
f.actionBlue_Flag.triggered, lambda: self.set_flag_of_selected_cards(4)
)
qconnect(f.actionExport.triggered, lambda: self._on_export_notes()) qconnect(f.actionExport.triggered, lambda: self._on_export_notes())
# jumps # jumps
qconnect(f.actionPreviousCard.triggered, self.onPreviousCard) qconnect(f.actionPreviousCard.triggered, self.onPreviousCard)
@ -870,7 +879,7 @@ QTableView {{ gridline-color: {grid} }}
self.focusTo = None self.focusTo = None
self.editor.card = self.card self.editor.card = self.card
self.singleCard = True self.singleCard = True
self._updateFlagsMenu() self._update_flags_menu()
gui_hooks.browser_did_change_row(self) gui_hooks.browser_did_change_row(self)
def currentRow(self) -> int: def currentRow(self) -> int:
@ -1296,29 +1305,26 @@ where id in %s"""
# Flags & Marking # Flags & Marking
###################################################################### ######################################################################
def onSetFlag(self, n: int) -> None: @ensure_editor_saved
def set_flag_of_selected_cards(self, flag: int) -> None:
if not self.card: if not self.card:
return return
self.editor.call_after_note_saved(lambda: self._on_set_flag(n))
def _on_set_flag(self, flag: int) -> None:
# flag needs toggling off? # flag needs toggling off?
if flag == self.card.user_flag(): if flag == self.card.user_flag():
flag = 0 flag = 0
cids = self.selected_cards() set_card_flag(mw=self.mw, card_ids=self.selected_cards(), flag=flag)
set_card_flag(mw=self.mw, card_ids=cids, flag=flag)
def _updateFlagsMenu(self) -> None: def _update_flags_menu(self) -> None:
flag = self.card and self.card.user_flag() flag = self.card and self.card.user_flag()
flag = flag or 0 flag = flag or 0
f = self.form
flagActions = [ flagActions = [
f.actionRed_Flag, self.form.actionRed_Flag,
f.actionOrange_Flag, self.form.actionOrange_Flag,
f.actionGreen_Flag, self.form.actionGreen_Flag,
f.actionBlue_Flag, self.form.actionBlue_Flag,
] ]
for c, act in enumerate(flagActions): for c, act in enumerate(flagActions):
@ -1326,16 +1332,12 @@ where id in %s"""
qtMenuShortcutWorkaround(self.form.menuFlag) qtMenuShortcutWorkaround(self.form.menuFlag)
def onMark(self, mark: bool = None) -> None: def toggle_mark_of_selected_notes(self) -> None:
if mark is None: have_mark = bool(self.card and self.card.note().has_tag(MARKED_TAG))
mark = not self.isMarked() if have_mark:
if mark: self.remove_tags_from_selected_notes(tags=MARKED_TAG)
self.add_tags_to_selected_notes(tags="marked")
else: else:
self.remove_tags_from_selected_notes(tags="marked") self.add_tags_to_selected_notes(tags=MARKED_TAG)
def isMarked(self) -> bool:
return bool(self.card and self.card.note().has_tag("Marked"))
# Scheduling # Scheduling
###################################################################### ######################################################################

View file

@ -15,6 +15,7 @@ from PyQt5.QtCore import Qt
from anki import hooks from anki import hooks
from anki.cards import Card from anki.cards import Card
from anki.collection import Config, OpChanges from anki.collection import Config, OpChanges
from anki.tags import MARKED_TAG
from anki.utils import stripHTML from anki.utils import stripHTML
from aqt import AnkiQt, gui_hooks from aqt import AnkiQt, gui_hooks
from aqt.card_ops import set_card_flag from aqt.card_ops import set_card_flag
@ -271,7 +272,7 @@ class Reviewer:
self.web.eval(f"_drawFlag({self.card.user_flag()});") self.web.eval(f"_drawFlag({self.card.user_flag()});")
def _update_mark_icon(self) -> None: def _update_mark_icon(self) -> None:
self.web.eval(f"_drawMark({json.dumps(self.card.note().has_tag('marked'))});") self.web.eval(f"_drawMark({json.dumps(self.card.note().has_tag(MARKED_TAG))});")
_drawMark = _update_mark_icon _drawMark = _update_mark_icon
_drawFlag = _update_flag_icon _drawFlag = _update_flag_icon
@ -844,12 +845,11 @@ time = %(time)d;
set_card_flag(mw=self.mw, card_ids=[self.card.id], flag=flag) set_card_flag(mw=self.mw, card_ids=[self.card.id], flag=flag)
def toggle_mark_on_current_note(self) -> None: def toggle_mark_on_current_note(self) -> None:
tag = "marked"
note = self.card.note() note = self.card.note()
if note.has_tag(tag): if note.has_tag(MARKED_TAG):
remove_tags(mw=self.mw, note_ids=[note.id], space_separated_tags=tag) remove_tags(mw=self.mw, note_ids=[note.id], space_separated_tags=MARKED_TAG)
else: else:
add_tags(mw=self.mw, note_ids=[note.id], space_separated_tags=tag) add_tags(mw=self.mw, note_ids=[note.id], space_separated_tags=MARKED_TAG)
def on_set_due(self) -> None: def on_set_due(self) -> None:
if self.mw.state != "review" or not self.card: if self.mw.state != "review" or not self.card: