From 7cc9311b79ec3ae7592902db4c5f9a76943cf353 Mon Sep 17 00:00:00 2001 From: Glutanimate Date: Mon, 24 Feb 2020 15:29:23 +0100 Subject: [PATCH] Add deck_conf_did_setup_ui_form hook Called earlier than deck_conf_will_show, allowing add-on authors to perform UI modifications before the deck config is loaded. --- qt/aqt/deckconf.py | 1 + qt/aqt/gui_hooks.py | 26 ++++++++++++++++++++++++++ qt/tools/genhooks_gui.py | 5 +++++ 3 files changed, 32 insertions(+) diff --git a/qt/aqt/deckconf.py b/qt/aqt/deckconf.py index bacfd816e..219632ebc 100644 --- a/qt/aqt/deckconf.py +++ b/qt/aqt/deckconf.py @@ -29,6 +29,7 @@ class DeckConf(QDialog): self._origNewOrder = None self.form = aqt.forms.dconf.Ui_Dialog() self.form.setupUi(self) + gui_hooks.deck_conf_did_setup_ui_form(self) self.mw.checkpoint(_("Options")) self.setupCombos() self.setupConfs() diff --git a/qt/aqt/gui_hooks.py b/qt/aqt/gui_hooks.py index 80c7b4630..f019a803f 100644 --- a/qt/aqt/gui_hooks.py +++ b/qt/aqt/gui_hooks.py @@ -544,6 +544,32 @@ class _DeckConfDidLoadConfigHook: deck_conf_did_load_config = _DeckConfDidLoadConfigHook() +class _DeckConfDidSetupUiFormHook: + """Allows modifying or adding widgets in the deck options UI form""" + + _hooks: List[Callable[["aqt.deckconf.DeckConf"], None]] = [] + + def append(self, cb: Callable[["aqt.deckconf.DeckConf"], None]) -> None: + """(deck_conf: aqt.deckconf.DeckConf)""" + self._hooks.append(cb) + + def remove(self, cb: Callable[["aqt.deckconf.DeckConf"], None]) -> None: + if cb in self._hooks: + self._hooks.remove(cb) + + def __call__(self, deck_conf: aqt.deckconf.DeckConf) -> None: + for hook in self._hooks: + try: + hook(deck_conf) + except: + # if the hook fails, remove it + self._hooks.remove(hook) + raise + + +deck_conf_did_setup_ui_form = _DeckConfDidSetupUiFormHook() + + class _DeckConfWillSaveConfigHook: """Called before widget state is saved to config""" diff --git a/qt/tools/genhooks_gui.py b/qt/tools/genhooks_gui.py index 0d475b53a..c7d959f51 100644 --- a/qt/tools/genhooks_gui.py +++ b/qt/tools/genhooks_gui.py @@ -123,6 +123,11 @@ hooks = [ ), # Deck options ################### + Hook( + name="deck_conf_did_setup_ui_form", + args=["deck_conf: aqt.deckconf.DeckConf"], + doc="Allows modifying or adding widgets in the deck options UI form", + ), Hook( name="deck_conf_will_show", args=["deck_conf: aqt.deckconf.DeckConf"],