From 79239c89b75a9ed4e183e16a48c8685f5019dc35 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Fri, 29 Jan 2021 23:05:30 +1000 Subject: [PATCH] move saved search code into sidebar.py, and remove from Filter button --- qt/aqt/browser.py | 79 ----------------------------------------------- qt/aqt/sidebar.py | 67 +++++++++++++++++++++++++++++++++------- 2 files changed, 56 insertions(+), 90 deletions(-) diff --git a/qt/aqt/browser.py b/qt/aqt/browser.py index 9faafa4b2..405caf72b 100644 --- a/qt/aqt/browser.py +++ b/qt/aqt/browser.py @@ -44,7 +44,6 @@ from aqt.utils import ( SubMenu, askUser, disable_help_button, - getOnlyText, getTag, openHelp, qtMenuShortcutWorkaround, @@ -970,9 +969,6 @@ QTableView {{ gridline-color: {grid} }} toggle_sidebar.setCheckable(True) toggle_sidebar.setChecked(self.sidebarDockWidget.isVisible()) ml.addChild(toggle_sidebar) - ml.addSeparator() - - ml.addChild(self._savedSearches()) ml.popupOver(self.form.filter) @@ -1060,81 +1056,6 @@ QTableView {{ gridline-color: {grid} }} ) return subm - # Favourites - ###################################################################### - - def _savedSearches(self): - ml = MenuList() - # make sure exists - if "savedFilters" not in self.col.conf: - self.col.set_config("savedFilters", {}) - - ml.addSeparator() - - if self._currentFilterIsSaved(): - ml.addItem(tr(TR.BROWSING_REMOVE_CURRENT_FILTER), self._onRemoveFilter) - else: - ml.addItem(tr(TR.BROWSING_SAVE_CURRENT_FILTER), self._onSaveFilter) - - return ml - - def _onSaveFilter(self) -> None: - try: - filt = self.col.backend.normalize_search( - self.form.searchEdit.lineEdit().text() - ) - except InvalidInput as e: - show_invalid_search_error(e) - else: - name = getOnlyText(tr(TR.BROWSING_PLEASE_GIVE_YOUR_FILTER_A_NAME)) - if not name: - return - conf = self.col.get_config("savedFilters") - conf[name] = filt - self.col.set_config("savedFilters", conf) - self.sidebar.refresh() - - def _onRemoveFilter(self) -> None: - self.removeFilter(self._currentFilterIsSaved()) - - def removeFilter(self, name: str) -> None: - if not askUser(tr(TR.BROWSING_REMOVE_FROM_YOUR_SAVED_SEARCHES, val=name)): - return - conf = self.col.get_config("savedFilters") - del conf[name] - self.col.set_config("savedFilters", conf) - self.sidebar.refresh() - - def renameFilter(self, old: str) -> None: - conf = self.col.get_config("savedFilters") - try: - filt = conf[old] - except KeyError: - return - new = getOnlyText(tr(TR.ACTIONS_NEW_NAME), default=old) - if new == old or not new: - return - conf[new] = filt - del conf[old] - self.col.set_config("savedFilters", conf) - self.sidebar.refresh() - - # returns name if found - def _currentFilterIsSaved(self) -> Optional[str]: - filt = self.form.searchEdit.lineEdit().text() - try: - filt = self.col.backend.normalize_search(filt) - except InvalidInput: - pass - for k, v in self.col.get_config("savedFilters").items(): - try: - v = self.col.backend.normalize_search(v) - except InvalidInput: - pass - if filt == v: - return k - return None - # Info ###################################################################### diff --git a/qt/aqt/sidebar.py b/qt/aqt/sidebar.py index a27fb765b..a4fcd8305 100644 --- a/qt/aqt/sidebar.py +++ b/qt/aqt/sidebar.py @@ -11,13 +11,27 @@ from typing import TYPE_CHECKING, Dict, Iterable, List, Optional, Sequence, Tupl import aqt from anki.collection import ConfigBoolKey from anki.errors import DeckRenameError -from anki.rsbackend import DeckTreeNode, FilterToSearchIn, NamedFilter, TagTreeNode +from anki.rsbackend import ( + DeckTreeNode, + FilterToSearchIn, + InvalidInput, + NamedFilter, + TagTreeNode, +) from aqt import gui_hooks from aqt.main import ResetReason from aqt.models import Models from aqt.qt import * from aqt.theme import theme_manager -from aqt.utils import TR, getOnlyText, showInfo, showWarning, tr +from aqt.utils import ( + TR, + askUser, + getOnlyText, + show_invalid_search_error, + showInfo, + showWarning, + tr, +) if TYPE_CHECKING: from anki.collection import ConfigBoolKeyValue, TRValue @@ -231,8 +245,8 @@ class SidebarTreeView(QTreeView): (tr(TR.ACTIONS_DELETE), self.remove_tag), ), SidebarItemType.SAVED_SEARCH: ( - (tr(TR.ACTIONS_RENAME), self.rename_filter), - (tr(TR.ACTIONS_DELETE), self.remove_filter), + (tr(TR.ACTIONS_RENAME), self.rename_saved_search), + (tr(TR.ACTIONS_DELETE), self.remove_saved_search), ), SidebarItemType.NOTETYPE: ((tr(TR.ACTIONS_MANAGE), self.manage_notetype),), SidebarItemType.SAVED_SEARCH_ROOT: ( @@ -700,16 +714,47 @@ class SidebarTreeView(QTreeView): self.browser.model.beginReset() self.mw.taskman.run_in_background(do_delete, on_done) - def remove_filter(self, item: "aqt.browser.SidebarItem") -> None: - self.browser.removeFilter(item.name) + def remove_saved_search(self, item: "aqt.browser.SidebarItem") -> None: + name = item.name + if not askUser(tr(TR.BROWSING_REMOVE_FROM_YOUR_SAVED_SEARCHES, val=name)): + return + conf = self.col.get_config("savedFilters") + del conf[name] + self.col.set_config("savedFilters", conf) + self.refresh() - def rename_filter(self, item: "aqt.browser.SidebarItem") -> None: - self.browser.renameFilter(item.name) + def rename_saved_search(self, item: "aqt.browser.SidebarItem") -> None: + old = item.name + conf = self.col.get_config("savedFilters") + try: + filt = conf[old] + except KeyError: + return + new = getOnlyText(tr(TR.ACTIONS_NEW_NAME), default=old) + if new == old or not new: + return + conf[new] = filt + del conf[old] + self.col.set_config("savedFilters", conf) + self.refresh() + + def save_current_search(self, _item=None) -> None: + try: + filt = self.col.backend.normalize_search( + self.browser.form.searchEdit.lineEdit().text() + ) + except InvalidInput as e: + show_invalid_search_error(e) + else: + name = getOnlyText(tr(TR.BROWSING_PLEASE_GIVE_YOUR_FILTER_A_NAME)) + if not name: + return + conf = self.col.get_config("savedFilters") + conf[name] = filt + self.col.set_config("savedFilters", conf) + self.refresh() def manage_notetype(self, item: "aqt.browser.SidebarItem") -> None: Models( self.mw, parent=self.browser, fromMain=True, selected_notetype_id=item.id ) - - def save_current_search(self, _item=None) -> None: - self.browser._onSaveFilter()