mirror of
https://github.com/ankitects/anki.git
synced 2026-01-05 18:13:56 -05:00
Note types manager select the relevant note type
If the note type was renamed, the same note type is still selected. If a note type is added, it's selected. This allows both to see what was done (e.g. proof read the new name) and to follow adding the note type by editing its fields/card types.
This commit is contained in:
parent
8f2144534b
commit
fc56d9182b
1 changed files with 32 additions and 16 deletions
|
|
@ -6,11 +6,10 @@ from __future__ import annotations
|
|||
from collections.abc import Callable, Sequence
|
||||
from concurrent.futures import Future
|
||||
from operator import itemgetter
|
||||
from typing import Any
|
||||
|
||||
import aqt.clayout
|
||||
from anki import stdmodels
|
||||
from anki.collection import Collection
|
||||
from anki.collection import Collection, OpChangesWithId
|
||||
from anki.lang import without_unicode_isolation
|
||||
from anki.models import NotetypeDict, NotetypeId, NotetypeNameIdUseCount
|
||||
from anki.notes import Note
|
||||
|
|
@ -74,12 +73,18 @@ class Models(QDialog):
|
|||
# Models
|
||||
##########################################################################
|
||||
|
||||
def maybe_select_provided_notetype(self) -> None:
|
||||
if not self.selected_notetype_id:
|
||||
self.form.modelsList.setCurrentRow(0)
|
||||
def maybe_select_provided_notetype(
|
||||
self, selected_notetype_id: NotetypeId | None = None, row: int = 0
|
||||
) -> None:
|
||||
"""Select the provided notetype ID, if any.
|
||||
Otherwise the one at `self.selected_notetype_id`,
|
||||
otherwise the `row`-th element."""
|
||||
selected_notetype_id = selected_notetype_id or self.selected_notetype_id
|
||||
if not selected_notetype_id:
|
||||
self.form.modelsList.setCurrentRow(row)
|
||||
return
|
||||
for i, m in enumerate(self.models):
|
||||
if m.id == self.selected_notetype_id:
|
||||
if m.id == selected_notetype_id:
|
||||
self.form.modelsList.setCurrentRow(i)
|
||||
break
|
||||
|
||||
|
|
@ -117,24 +122,31 @@ class Models(QDialog):
|
|||
self.mw.taskman.with_progress(self.col.models.all_use_counts, on_done, self)
|
||||
maybeHideClose(box)
|
||||
|
||||
def refresh_list(self, *ignored_args: Any) -> None:
|
||||
def refresh_list(self, selected_notetype_id: NotetypeId | None = None) -> None:
|
||||
QueryOp(
|
||||
parent=self,
|
||||
op=lambda col: col.models.all_use_counts(),
|
||||
success=self.updateModelsList,
|
||||
success=lambda notetypes: self.updateModelsList(
|
||||
notetypes, selected_notetype_id
|
||||
),
|
||||
).run_in_background()
|
||||
|
||||
def onRename(self) -> None:
|
||||
nt = self.current_notetype()
|
||||
text, ok = getText(tr.actions_new_name(), default=nt["name"])
|
||||
if ok and text.strip():
|
||||
selected_notetype_id = nt["id"]
|
||||
nt["name"] = text
|
||||
|
||||
update_notetype_legacy(parent=self, notetype=nt).success(
|
||||
self.refresh_list
|
||||
lambda _: self.refresh_list(selected_notetype_id)
|
||||
).run_in_background()
|
||||
|
||||
def updateModelsList(self, notetypes: Sequence[NotetypeNameIdUseCount]) -> None:
|
||||
def updateModelsList(
|
||||
self,
|
||||
notetypes: Sequence[NotetypeNameIdUseCount],
|
||||
selected_notetype_id: NotetypeId | None = None,
|
||||
) -> None:
|
||||
row = self.form.modelsList.currentRow()
|
||||
if row == -1:
|
||||
row = 0
|
||||
|
|
@ -145,7 +157,7 @@ class Models(QDialog):
|
|||
mUse = tr.browsing_note_count(count=m.use_count)
|
||||
item = QListWidgetItem(f"{m.name} [{mUse}]")
|
||||
self.form.modelsList.addItem(item)
|
||||
self.form.modelsList.setCurrentRow(row)
|
||||
self.maybe_select_provided_notetype(selected_notetype_id, row)
|
||||
|
||||
def current_notetype(self) -> NotetypeDict:
|
||||
row = self.form.modelsList.currentRow()
|
||||
|
|
@ -154,8 +166,9 @@ class Models(QDialog):
|
|||
def onAdd(self) -> None:
|
||||
def on_success(notetype: NotetypeDict) -> None:
|
||||
# if legacy add-ons already added the notetype, skip adding
|
||||
if notetype["id"]:
|
||||
self.refresh_list()
|
||||
nid = notetype["id"]
|
||||
if nid:
|
||||
self.refresh_list(nid)
|
||||
return
|
||||
|
||||
# prompt for name
|
||||
|
|
@ -164,8 +177,11 @@ class Models(QDialog):
|
|||
return
|
||||
notetype["name"] = text
|
||||
|
||||
def refresh_list(op: OpChangesWithId) -> None:
|
||||
self.refresh_list(NotetypeId(op.id))
|
||||
|
||||
add_notetype_legacy(parent=self, notetype=notetype).success(
|
||||
self.refresh_list
|
||||
refresh_list
|
||||
).run_in_background()
|
||||
|
||||
AddModel(self.mw, on_success, self)
|
||||
|
|
@ -188,7 +204,7 @@ class Models(QDialog):
|
|||
|
||||
nt = self.current_notetype()
|
||||
remove_notetype(parent=self, notetype_id=nt["id"]).success(
|
||||
lambda _: self.refresh_list()
|
||||
lambda _: self.refresh_list(None)
|
||||
).run_in_background()
|
||||
|
||||
def onAdvanced(self) -> None:
|
||||
|
|
@ -212,7 +228,7 @@ class Models(QDialog):
|
|||
nt["latexPre"] = str(frm.latexHeader.toPlainText())
|
||||
nt["latexPost"] = str(frm.latexFooter.toPlainText())
|
||||
update_notetype_legacy(parent=self, notetype=nt).success(
|
||||
self.refresh_list
|
||||
lambda _: self.refresh_list(nt["id"])
|
||||
).run_in_background()
|
||||
|
||||
def _tmpNote(self) -> Note:
|
||||
|
|
|
|||
Loading…
Reference in a new issue