Add compiled hook model_did_init_buttons

This commit is contained in:
Henrik Giesel 2020-08-23 16:57:20 +02:00
parent ad27e0149a
commit 633d769490
2 changed files with 51 additions and 1 deletions

View file

@ -17,6 +17,7 @@ from anki.hooks import runFilter, runHook
from anki.models import NoteType
from aqt.qt import QDialog, QEvent, QMenu
from aqt.tagedit import TagEdit
from aqt.models import Models
# New hook/filter handling
##############################################################################
@ -1869,6 +1870,55 @@ class _ModelsAdvancedWillShowHook:
models_advanced_will_show = _ModelsAdvancedWillShowHook()
class _ModelsDidInitButtonsFilter:
"""Allows adding buttons to the Model dialog"""
_hooks: List[
Callable[
[List[Tuple[str, Callable[[Models], None]]], Models],
List[Tuple[str, Callable[[Models], None]]],
]
] = []
def append(
self,
cb: Callable[
[List[Tuple[str, Callable[[Models], None]]], Models],
List[Tuple[str, Callable[[Models], None]]],
],
) -> None:
"""(buttons: List[Tuple[str, Callable[[Models], None]]], models: Models)"""
self._hooks.append(cb)
def remove(
self,
cb: Callable[
[List[Tuple[str, Callable[[Models], None]]], Models],
List[Tuple[str, Callable[[Models], None]]],
],
) -> None:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(
self, buttons: List[Tuple[str, Callable[[Models], None]]], models: Models
) -> List[Tuple[str, Callable[[Models], None]]]:
for filter in self._hooks:
try:
buttons = filter(buttons, models)
except:
# if the hook fails, remove it
self._hooks.remove(filter)
raise
return buttons
models_did_init_buttons = _ModelsDidInitButtonsFilter()
class _OverviewDidRefreshHook:
"""Allow to update the overview window. E.g. add the deck name in the
title."""

View file

@ -689,7 +689,7 @@ hooks = [
Hook(
name="models_did_init_buttons",
args=["buttons: List[Tuple[str, Callable[[Models], None]]]", "models: Models"],
return_type="buttons: List[Tuple[str, Callable[[Models], None]]]",
return_type="List[Tuple[str, Callable[[Models], None]]]",
doc="""Allows adding buttons to the Model dialog""",
),
# Stats