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.
This commit is contained in:
RumovZ 2021-03-05 12:22:49 +01:00
parent 39dad049cd
commit cce1b1f702

View file

@ -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()