From cce1b1f7021b1a2a7a7c58f628321149df9411b5 Mon Sep 17 00:00:00 2001 From: RumovZ Date: Fri, 5 Mar 2021 12:22:49 +0100 Subject: [PATCH] Remove context action dict Now that almost all actions can be triggered from outside the context menu and are available for more than one item type, it's easier to check for available actions dynamically. --- qt/aqt/sidebar.py | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/qt/aqt/sidebar.py b/qt/aqt/sidebar.py index f7e84223a..f9bd9f6c2 100644 --- a/qt/aqt/sidebar.py +++ b/qt/aqt/sidebar.py @@ -6,7 +6,7 @@ from __future__ import annotations import re from concurrent.futures import Future from enum import Enum, auto -from typing import Any, Dict, Iterable, List, Optional, Sequence, Tuple, cast +from typing import Dict, Iterable, List, Optional, Tuple, cast import aqt from anki.collection import Config, SearchJoiner, SearchNode @@ -368,13 +368,6 @@ class SidebarTreeView(QTreeView): self.setContextMenuPolicy(Qt.CustomContextMenu) self.customContextMenuRequested.connect(self.onContextMenu) # type: ignore - self.context_menus: Dict[SidebarItemType, Sequence[Tuple[str, Callable]]] = { - SidebarItemType.NOTETYPE: ((tr(TR.ACTIONS_MANAGE), self.manage_notetype),), - SidebarItemType.SAVED_SEARCH_ROOT: ( - (tr(TR.BROWSING_SIDEBAR_SAVE_CURRENT_SEARCH), self.save_current_search), - ), - } - self.setUniformRowHeights(True) self.setHeaderHidden(True) self.setIndentation(15) @@ -1044,19 +1037,11 @@ class SidebarTreeView(QTreeView): self, item: SidebarItem, index: Optional[QModelIndex] ) -> None: m = QMenu() - + self._maybe_add_type_specific_actions(m, item) if item.item_type.is_deletable(): m.addAction(tr(TR.ACTIONS_DELETE), lambda: self._on_delete(index)) if item.item_type.is_editable(): m.addAction(tr(TR.ACTIONS_RENAME), lambda: self.edit(index)) - - if item.item_type in self.context_menus: - for action in self.context_menus[item.item_type]: - act_name = action[0] - act_func = action[1] - a = m.addAction(act_name) - qconnect(a.triggered, lambda _, func=act_func: func(item)) - self._maybe_add_search_actions(m) self._maybe_add_tree_actions(m) @@ -1065,6 +1050,14 @@ class SidebarTreeView(QTreeView): m.exec_(QCursor.pos()) + def _maybe_add_type_specific_actions(self, menu: QMenu, item: SidebarItem) -> None: + if item.item_type in (SidebarItemType.NOTETYPE, SidebarItemType.NOTETYPE_ROOT): + menu.addAction(tr(TR.ACTIONS_MANAGE), lambda: self.manage_notetype(item)) + elif item.item_type == SidebarItemType.SAVED_SEARCH_ROOT: + menu.addAction( + tr(TR.BROWSING_SIDEBAR_SAVE_CURRENT_SEARCH), self.save_current_search + ) + def _maybe_add_search_actions(self, menu: QMenu) -> None: nodes = [ item.search_node for item in self._selected_items() if item.search_node @@ -1298,7 +1291,7 @@ class SidebarTreeView(QTreeView): and item.name == new_name ) - def save_current_search(self, _item: Any = None) -> None: + def save_current_search(self) -> None: try: filt = self.col.build_search_string( self.browser.form.searchEdit.lineEdit().text()