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 anki.models import NoteType
from aqt.qt import QDialog, QEvent, QMenu from aqt.qt import QDialog, QEvent, QMenu
from aqt.tagedit import TagEdit from aqt.tagedit import TagEdit
from aqt.models import Models
# New hook/filter handling # New hook/filter handling
############################################################################## ##############################################################################
@ -1869,6 +1870,55 @@ class _ModelsAdvancedWillShowHook:
models_advanced_will_show = _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: class _OverviewDidRefreshHook:
"""Allow to update the overview window. E.g. add the deck name in the """Allow to update the overview window. E.g. add the deck name in the
title.""" title."""

View file

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