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"],