From 4e1838bba8581f1f2e70f3eb8c3901948e8569c7 Mon Sep 17 00:00:00 2001 From: Arthur Milchior Date: Fri, 6 Mar 2020 21:04:51 +0100 Subject: [PATCH] hook addons_dialog_will_show --- qt/aqt/addons.py | 1 + qt/aqt/gui_hooks.py | 27 +++++++++++++++++++++++++++ qt/tools/genhooks_gui.py | 6 ++++++ 3 files changed, 34 insertions(+) diff --git a/qt/aqt/addons.py b/qt/aqt/addons.py index 58be30716..c51760aea 100644 --- a/qt/aqt/addons.py +++ b/qt/aqt/addons.py @@ -706,6 +706,7 @@ class AddonsDialog(QDialog): self.setAcceptDrops(True) self.redrawAddons() restoreGeom(self, "addons") + gui_hooks.addons_dialog_will_show(self) self.show() def dragEnterEvent(self, event): diff --git a/qt/aqt/gui_hooks.py b/qt/aqt/gui_hooks.py index 86fa5bdb3..4e9e1a8a7 100644 --- a/qt/aqt/gui_hooks.py +++ b/qt/aqt/gui_hooks.py @@ -135,6 +135,33 @@ class _AddonConfigEditorWillSaveJsonFilter: addon_config_editor_will_save_json = _AddonConfigEditorWillSaveJsonFilter() +class _AddonsDialogWillShowHook: + """Allows changing the add-on dialog before it is shown. E.g. add + buttons.""" + + _hooks: List[Callable[["aqt.addons.AddonsDialog"], None]] = [] + + def append(self, cb: Callable[["aqt.addons.AddonsDialog"], None]) -> None: + """(dialog: aqt.addons.AddonsDialog)""" + self._hooks.append(cb) + + def remove(self, cb: Callable[["aqt.addons.AddonsDialog"], None]) -> None: + if cb in self._hooks: + self._hooks.remove(cb) + + def __call__(self, dialog: aqt.addons.AddonsDialog) -> None: + for hook in self._hooks: + try: + hook(dialog) + except: + # if the hook fails, remove it + self._hooks.remove(hook) + raise + + +addons_dialog_will_show = _AddonsDialogWillShowHook() + + class _AvPlayerDidBeginPlayingHook: _hooks: List[Callable[["aqt.sound.Player", "anki.sound.AVTag"], None]] = [] diff --git a/qt/tools/genhooks_gui.py b/qt/tools/genhooks_gui.py index e3049cd00..e88b2f54f 100644 --- a/qt/tools/genhooks_gui.py +++ b/qt/tools/genhooks_gui.py @@ -488,6 +488,12 @@ def emptyNewCard(): received from the user before actually reading it. For example, you can replace new line in strings by some "\\\\n".""", ), + Hook( + name="addons_dialog_will_show", + args=["dialog: aqt.addons.AddonsDialog"], + doc="""Allows changing the add-on dialog before it is shown. E.g. add + buttons.""", + ), # Other ################### Hook(