diff --git a/qt/aqt/addcards.py b/qt/aqt/addcards.py index 5a8d07607..a13e2f0ec 100644 --- a/qt/aqt/addcards.py +++ b/qt/aqt/addcards.py @@ -162,7 +162,7 @@ class AddCards(QDialog): m.exec_(self.historyButton.mapToGlobal(QPoint(0, 0))) def editHistory(self, nid): - self.mw.browser_search(SearchTerm(nid=nid)) + aqt.dialogs.open("Browser", self.mw, search=(SearchTerm(nid=nid),)) def addNote(self, note) -> Optional[Note]: note.model()["did"] = self.deckChooser.selectedId() diff --git a/qt/aqt/browser.py b/qt/aqt/browser.py index 29e10274e..4bf3ea6a6 100644 --- a/qt/aqt/browser.py +++ b/qt/aqt/browser.py @@ -437,7 +437,12 @@ class Browser(QMainWindow): col: Collection editor: Optional[Editor] - def __init__(self, mw: AnkiQt) -> None: + def __init__( + self, + mw: AnkiQt, + card: Optional[Card] = None, + search: Optional[Tuple[Union[str, SearchTerm]]] = None, + ) -> None: QMainWindow.__init__(self, None, Qt.Window) self.mw = mw self.col = self.mw.col @@ -461,7 +466,7 @@ class Browser(QMainWindow): self.setupEditor() self.updateFont() self.onUndoState(self.mw.form.actionUndo.isEnabled()) - self.setupSearch() + self.setupSearch(card, search) gui_hooks.browser_will_show(self) self.show() @@ -600,17 +605,41 @@ class Browser(QMainWindow): ] self.columns.sort(key=itemgetter(1)) + def reopen( + self, + _mw: AnkiQt, + card: Optional[Card] = None, + search: Optional[Tuple[Union[str, SearchTerm]]] = None, + ) -> None: + if search is not None: + self.search_for_terms(*search) + self.form.searchEdit.setFocus() + elif card: + self.show_single_card(card) + self.form.searchEdit.setFocus() + # Searching ###################################################################### - def setupSearch(self): + def setupSearch( + self, + card: Optional[Card] = None, + search: Optional[Tuple[Union[str, SearchTerm]]] = None, + ): qconnect(self.form.searchEdit.lineEdit().returnPressed, self.onSearchActivated) self.form.searchEdit.setCompleter(None) self.form.searchEdit.lineEdit().setPlaceholderText( tr(TR.BROWSING_SEARCH_BAR_HINT) ) self.form.searchEdit.addItems(self.mw.pm.profile["searchHistory"]) - self.search_for(self.col.build_search_string(SearchTerm(deck="current")), "") + if search is not None: + self.search_for_terms(*search) + elif card: + self.show_single_card(card) + else: + self.search_for( + self.col.build_search_string(SearchTerm(deck="current")), "" + ) self.form.searchEdit.setFocus() # search triggered by user @@ -669,15 +698,17 @@ class Browser(QMainWindow): ) return selected - def show_single_card(self, card: Optional[Card]): - """Try to search for the according note and select the given card.""" + def search_for_terms(self, *search_terms: Union[str, SearchTerm]): + search = self.col.build_search_string(*search_terms) + self.form.searchEdit.setEditText(search) + self.onSearchActivated() - nid: Optional[int] = card and card.nid or 0 - if nid: + def show_single_card(self, card: Card): + if card.nid: def on_show_single_card(): self.card = card - search = self.col.build_search_string(SearchTerm(nid=nid)) + search = self.col.build_search_string(SearchTerm(nid=card.nid)) search = gui_hooks.default_search(search, card) self.search_for(search, "") self.focusCid(card.id) diff --git a/qt/aqt/editor.py b/qt/aqt/editor.py index f609089c9..c38d6c6a0 100644 --- a/qt/aqt/editor.py +++ b/qt/aqt/editor.py @@ -538,11 +538,16 @@ class Editor: self.web.eval("setBackgrounds(%s);" % json.dumps(cols)) def showDupes(self): - self.mw.browser_search( - SearchTerm( - dupe=SearchTerm.Dupe( - notetype_id=self.note.model()["id"], first_field=self.note.fields[0] - ) + aqt.dialogs.open( + "Browser", + self.mw, + search=( + SearchTerm( + dupe=SearchTerm.Dupe( + notetype_id=self.note.model()["id"], + first_field=self.note.fields[0], + ) + ), ) ) diff --git a/qt/aqt/emptycards.py b/qt/aqt/emptycards.py index b9e94d8de..d037c88bc 100644 --- a/qt/aqt/emptycards.py +++ b/qt/aqt/emptycards.py @@ -66,7 +66,7 @@ class EmptyCardsDialog(QDialog): self._delete_button.clicked.connect(self._on_delete) def _on_note_link_clicked(self, link): - self.mw.browser_search(link) + aqt.dialogs.open("Browser", self.mw, search=(link,)) def _on_delete(self): self.mw.progress.start() diff --git a/qt/aqt/main.py b/qt/aqt/main.py index fde039084..73cb7ee68 100644 --- a/qt/aqt/main.py +++ b/qt/aqt/main.py @@ -27,7 +27,7 @@ import aqt.toolbar import aqt.webview from anki import hooks from anki._backend import RustBackend as _RustBackend -from anki.collection import Collection, SearchTerm +from anki.collection import Collection from anki.decks import Deck from anki.hooks import runHook from anki.sound import AVTag, SoundOrVideoTag @@ -1044,8 +1044,7 @@ title="%s" %s>%s""" % ( aqt.dialogs.open("AddCards", self) def onBrowse(self) -> None: - browser = aqt.dialogs.open("Browser", self) - browser.show_single_card(self.reviewer.card) + aqt.dialogs.open("Browser", self, card=self.reviewer.card) def onEditCurrent(self): aqt.dialogs.open("EditCurrent", self) @@ -1598,14 +1597,3 @@ title="%s" %s>%s""" % ( def serverURL(self) -> str: return "http://127.0.0.1:%d/" % self.mediaServer.getPort() - - # Helpers for all windows - ########################################################################## - - def browser_search(self, *terms: Union[str, SearchTerm]) -> None: - """Wrapper for col.build_search_string() to look up the result in the browser.""" - - search = self.col.build_search_string(*terms) - browser = aqt.dialogs.open("Browser", self) - browser.form.searchEdit.lineEdit().setText(search) - browser.onSearchActivated() diff --git a/qt/aqt/mediacheck.py b/qt/aqt/mediacheck.py index 0f844a643..9ac8e30d1 100644 --- a/qt/aqt/mediacheck.py +++ b/qt/aqt/mediacheck.py @@ -148,7 +148,7 @@ class MediaChecker: if out is not None: nid, err = out - self.mw.browser_search(SearchTerm(nid=nid)) + aqt.dialogs.open("Browser", self.mw, search=(SearchTerm(nid=nid),)) showText(err, type="html") else: tooltip(tr(TR.MEDIA_CHECK_ALL_LATEX_RENDERED))