From f81134830bd45c6bc1d32b9b0c2de3412a9c6a43 Mon Sep 17 00:00:00 2001 From: Arthur Milchior Date: Sat, 29 Feb 2020 17:01:38 +0100 Subject: [PATCH 1/2] move deck_browser hooks apart --- qt/tools/genhooks_gui.py | 52 +++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/qt/tools/genhooks_gui.py b/qt/tools/genhooks_gui.py index 54b131f51..39b334e4c 100644 --- a/qt/tools/genhooks_gui.py +++ b/qt/tools/genhooks_gui.py @@ -45,31 +45,6 @@ hooks = [ content.table += "\n
my html
" """, ), - Hook( - name="deck_browser_did_render", - args=["deck_browser: aqt.deckbrowser.DeckBrowser"], - doc="""Allow to update the deck browser window. E.g. change its title.""", - ), - Hook( - name="deck_browser_will_render_content", - args=[ - "deck_browser: aqt.deckbrowser.DeckBrowser", - "content: aqt.deckbrowser.DeckBrowserContent", - ], - doc="""Used to modify HTML content sections in the deck browser body - - 'content' contains the sections of HTML content the deck browser body - will be updated with. - - When modifying the content of a particular section, please make sure your - changes only perform the minimum required edits to make your add-on work. - You should avoid overwriting or interfering with existing data as much - as possible, instead opting to append your own changes, e.g.: - - def on_deck_browser_will_render_content(deck_browser, content): - content.stats += "\n
my html
" - """, - ), Hook( name="reviewer_did_show_question", args=["card: Card"], @@ -121,6 +96,33 @@ hooks = [ legacy_hook="prepareQA", doc="Can modify card text before review/preview.", ), + # Deck browser + ################### + Hook( + name="deck_browser_did_render", + args=["deck_browser: aqt.deckbrowser.DeckBrowser"], + doc="""Allow to update the deck browser window. E.g. change its title.""", + ), + Hook( + name="deck_browser_will_render_content", + args=[ + "deck_browser: aqt.deckbrowser.DeckBrowser", + "content: aqt.deckbrowser.DeckBrowserContent", + ], + doc="""Used to modify HTML content sections in the deck browser body + + 'content' contains the sections of HTML content the deck browser body + will be updated with. + + When modifying the content of a particular section, please make sure your + changes only perform the minimum required edits to make your add-on work. + You should avoid overwriting or interfering with existing data as much + as possible, instead opting to append your own changes, e.g.: + + def on_deck_browser_will_render_content(deck_browser, content): + content.stats += "\n
my html
" + """, + ), # Deck options ################### Hook( From 047e027e01982b8ba963cb2733173b91d41fa39f Mon Sep 17 00:00:00 2001 From: Arthur Milchior Date: Sat, 29 Feb 2020 17:02:51 +0100 Subject: [PATCH 2/2] browser_did_init --- qt/aqt/browser.py | 1 + qt/aqt/gui_hooks.py | 24 ++++++++++++++++++++++++ qt/tools/genhooks_gui.py | 1 + 3 files changed, 26 insertions(+) diff --git a/qt/aqt/browser.py b/qt/aqt/browser.py index 4a1f7b317..ecdcbe1ab 100644 --- a/qt/aqt/browser.py +++ b/qt/aqt/browser.py @@ -596,6 +596,7 @@ class Browser(QMainWindow): self.updateFont() self.onUndoState(self.mw.form.actionUndo.isEnabled()) self.setupSearch() + gui_hooks.browser_will_show(self) self.show() def setupMenus(self) -> None: diff --git a/qt/aqt/gui_hooks.py b/qt/aqt/gui_hooks.py index 5a001251e..08746896e 100644 --- a/qt/aqt/gui_hooks.py +++ b/qt/aqt/gui_hooks.py @@ -302,6 +302,30 @@ class _BrowserWillBuildTreeFilter: browser_will_build_tree = _BrowserWillBuildTreeFilter() +class _BrowserWillShowHook: + _hooks: List[Callable[["aqt.browser.Browser"], None]] = [] + + def append(self, cb: Callable[["aqt.browser.Browser"], None]) -> None: + """(browser: aqt.browser.Browser)""" + self._hooks.append(cb) + + def remove(self, cb: Callable[["aqt.browser.Browser"], None]) -> None: + if cb in self._hooks: + self._hooks.remove(cb) + + def __call__(self, browser: aqt.browser.Browser) -> None: + for hook in self._hooks: + try: + hook(browser) + except: + # if the hook fails, remove it + self._hooks.remove(hook) + raise + + +browser_will_show = _BrowserWillShowHook() + + class _BrowserWillShowContextMenuHook: _hooks: List[Callable[["aqt.browser.Browser", QMenu], None]] = [] diff --git a/qt/tools/genhooks_gui.py b/qt/tools/genhooks_gui.py index 39b334e4c..849ed1212 100644 --- a/qt/tools/genhooks_gui.py +++ b/qt/tools/genhooks_gui.py @@ -147,6 +147,7 @@ hooks = [ ), # Browser ################### + Hook(name="browser_will_show", args=["browser: aqt.browser.Browser"]), Hook( name="browser_menus_did_init", args=["browser: aqt.browser.Browser"],