66e1f876d7
Adding this parameter broke one of my add-on, see https://github.com/Arthur-Milchior/anki-keep-model-in-add-cards/issues/1 Since those parameters are not used, setting them to None by default, as was done in some other method, seems acceptable
111 lines
3.4 KiB
Python
111 lines
3.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Copyright: Ankitects Pty Ltd and contributors
|
|
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|
|
|
from anki.lang import _
|
|
from aqt import gui_hooks
|
|
from aqt.qt import *
|
|
from aqt.utils import shortcut
|
|
|
|
|
|
class DeckChooser(QHBoxLayout):
|
|
def __init__(self, mw, widget: QWidget, label=True, start=None) -> None:
|
|
QHBoxLayout.__init__(self)
|
|
self.widget = widget # type: ignore
|
|
self.mw = mw
|
|
self.deck = mw.col
|
|
self.label = label
|
|
self.setContentsMargins(0, 0, 0, 0)
|
|
self.setSpacing(8)
|
|
self.setupDecks()
|
|
self.widget.setLayout(self)
|
|
gui_hooks.current_note_type_did_change.append(self.onModelChangeNew)
|
|
|
|
def setupDecks(self):
|
|
if self.label:
|
|
self.deckLabel = QLabel(_("Deck"))
|
|
self.addWidget(self.deckLabel)
|
|
# decks box
|
|
self.deck = QPushButton(clicked=self.onDeckChange)
|
|
self.deck.setAutoDefault(False)
|
|
self.deck.setToolTip(shortcut(_("Target Deck (Ctrl+D)")))
|
|
s = QShortcut(
|
|
QKeySequence(_("Ctrl+D")), self.widget, activated=self.onDeckChange
|
|
)
|
|
self.addWidget(self.deck)
|
|
# starting label
|
|
if self.mw.col.conf.get("addToCur", True):
|
|
col = self.mw.col
|
|
did = col.conf["curDeck"]
|
|
if col.decks.isDyn(did):
|
|
# if they're reviewing, try default to current card
|
|
c = self.mw.reviewer.card
|
|
if self.mw.state == "review" and c:
|
|
if not c.odid:
|
|
did = c.did
|
|
else:
|
|
did = c.odid
|
|
else:
|
|
did = 1
|
|
self.setDeckName(self.mw.col.decks.nameOrNone(did) or _("Default"))
|
|
else:
|
|
self.setDeckName(
|
|
self.mw.col.decks.nameOrNone(self.mw.col.models.current()["did"])
|
|
or _("Default")
|
|
)
|
|
# layout
|
|
sizePolicy = QSizePolicy(QSizePolicy.Policy(7), QSizePolicy.Policy(0))
|
|
self.deck.setSizePolicy(sizePolicy)
|
|
|
|
def show(self):
|
|
self.widget.show()
|
|
|
|
def hide(self):
|
|
self.widget.hide()
|
|
|
|
def cleanup(self) -> None:
|
|
gui_hooks.current_note_type_did_change.remove(self.onModelChangeNew)
|
|
|
|
def onModelChangeNew(self, unused=None):
|
|
self.onModelChange()
|
|
|
|
def onModelChange(self):
|
|
if not self.mw.col.conf.get("addToCur", True):
|
|
self.setDeckName(
|
|
self.mw.col.decks.nameOrNone(self.mw.col.models.current()["did"])
|
|
or _("Default")
|
|
)
|
|
|
|
def onDeckChange(self):
|
|
from aqt.studydeck import StudyDeck
|
|
|
|
current = self.deckName()
|
|
ret = StudyDeck(
|
|
self.mw,
|
|
current=current,
|
|
accept=_("Choose"),
|
|
title=_("Choose Deck"),
|
|
help="addingnotes",
|
|
cancel=False,
|
|
parent=self.widget,
|
|
geomKey="selectDeck",
|
|
)
|
|
if ret.name:
|
|
self.setDeckName(ret.name)
|
|
|
|
def setDeckName(self, name):
|
|
self.deck.setText(name.replace("&", "&&"))
|
|
self._deckName = name
|
|
|
|
def deckName(self):
|
|
return self._deckName
|
|
|
|
def selectedId(self):
|
|
# save deck name
|
|
name = self.deckName()
|
|
if not name.strip():
|
|
did = 1
|
|
else:
|
|
did = self.mw.col.decks.id(name)
|
|
return did
|