mirror of
https://github.com/ankitects/anki.git
synced 2025-09-23 16:26:40 -04:00
drop tags/decks/etc from Filter button
https://github.com/ankitects/help-wanted/issues/6 These are a relic from when the sidebar defaulted to off, and I don't think enough people are using them to bother keeping them around. Once the the card state and saved filter functionality moves into the sidebar and top menus, we may be able to remove the Filter button completely.
This commit is contained in:
parent
6aba1a879c
commit
9db3f0dd19
2 changed files with 0 additions and 118 deletions
|
@ -1251,14 +1251,8 @@ QTableView {{ gridline-color: {grid} }}
|
|||
def onFilterButton(self):
|
||||
ml = MenuList()
|
||||
|
||||
ml.addChild(self._commonFilters())
|
||||
ml.addSeparator()
|
||||
|
||||
ml.addChild(self._todayFilters())
|
||||
ml.addChild(self._cardStateFilters())
|
||||
ml.addChild(self._deckFilters())
|
||||
ml.addChild(self._noteTypeFilters())
|
||||
ml.addChild(self._tagFilters())
|
||||
ml.addSeparator()
|
||||
|
||||
ml.addChild(self.sidebarDockWidget.toggleViewAction())
|
||||
|
@ -1339,14 +1333,6 @@ QTableView {{ gridline-color: {grid} }}
|
|||
def _saved_filter(self, saved: str) -> Callable:
|
||||
return lambda: self.setFilter(saved)
|
||||
|
||||
def _commonFilters(self):
|
||||
return self._simpleFilters(
|
||||
(
|
||||
(tr(TR.BROWSING_WHOLE_COLLECTION), NamedFilter.WHOLE_COLLECTION),
|
||||
(tr(TR.BROWSING_CURRENT_DECK), NamedFilter.CURRENT_DECK),
|
||||
)
|
||||
)
|
||||
|
||||
def _todayFilters(self):
|
||||
subm = SubMenu(tr(TR.BROWSING_TODAY))
|
||||
subm.addChild(
|
||||
|
@ -1387,76 +1373,6 @@ QTableView {{ gridline-color: {grid} }}
|
|||
def _escapeMenuItem(self, label):
|
||||
return label.replace("&", "&&")
|
||||
|
||||
def _tagFilters(self):
|
||||
m = SubMenu(tr(TR.EDITING_TAGS))
|
||||
|
||||
m.addItem(tr(TR.BROWSING_CLEAR_UNUSED), self.clearUnusedTags)
|
||||
m.addSeparator()
|
||||
|
||||
tagList = MenuList()
|
||||
for t in sorted(self.col.tags.all(), key=lambda s: s.lower()):
|
||||
tagList.addItem(self._escapeMenuItem(t), self._tag_filter(t))
|
||||
|
||||
m.addChild(tagList.chunked())
|
||||
return m
|
||||
|
||||
def _deckFilters(self):
|
||||
def addDecks(parent, decks, parent_prefix):
|
||||
for node in decks:
|
||||
escaped_name = self._escapeMenuItem(node.name)
|
||||
# pylint: disable=cell-var-from-loop
|
||||
fullname = parent_prefix + node.name
|
||||
if node.children:
|
||||
subm = parent.addMenu(escaped_name)
|
||||
subm.addItem(tr(TR.ACTIONS_FILTER), self._deck_filter(fullname))
|
||||
subm.addSeparator()
|
||||
addDecks(subm, node.children, fullname + "::")
|
||||
else:
|
||||
parent.addItem(escaped_name, self._deck_filter(fullname))
|
||||
|
||||
alldecks = self.col.decks.deck_tree()
|
||||
ml = MenuList()
|
||||
addDecks(ml, alldecks.children, "")
|
||||
|
||||
root = SubMenu(tr(TR.ACTIONS_DECKS))
|
||||
root.addChild(ml.chunked())
|
||||
|
||||
return root
|
||||
|
||||
def _noteTypeFilters(self):
|
||||
m = SubMenu(tr(TR.NOTETYPES_NOTE_TYPES))
|
||||
|
||||
m.addItem(tr(TR.ACTIONS_MANAGE), self.mw.onNoteTypes)
|
||||
m.addSeparator()
|
||||
|
||||
noteTypes = MenuList()
|
||||
for nt in sorted(self.col.models.all(), key=lambda nt: nt["name"].lower()):
|
||||
escaped_nt_name = self._escapeMenuItem(nt["name"])
|
||||
# no sub menu if it's a single template
|
||||
if len(nt["tmpls"]) == 1:
|
||||
noteTypes.addItem(escaped_nt_name, self._note_filter(nt["name"]))
|
||||
else:
|
||||
subm = noteTypes.addMenu(escaped_nt_name)
|
||||
|
||||
subm.addItem(
|
||||
tr(TR.BROWSING_ALL_CARD_TYPES), self._note_filter(nt["name"])
|
||||
)
|
||||
subm.addSeparator()
|
||||
|
||||
# add templates
|
||||
for c, tmpl in enumerate(nt["tmpls"]):
|
||||
# T: name is a card type name. n it's order in the list of card type.
|
||||
# T: this is shown in browser's filter, when seeing the list of card type of a note type.
|
||||
name = tr(
|
||||
TR.BROWSING_ND_NAMES,
|
||||
num=c + 1,
|
||||
name=self._escapeMenuItem(tmpl["name"]),
|
||||
)
|
||||
subm.addItem(name, self._template_filter(nt["name"], c))
|
||||
|
||||
m.addChild(noteTypes.chunked())
|
||||
return m
|
||||
|
||||
# Favourites
|
||||
######################################################################
|
||||
|
||||
|
@ -1473,14 +1389,6 @@ QTableView {{ gridline-color: {grid} }}
|
|||
else:
|
||||
ml.addItem(tr(TR.BROWSING_SAVE_CURRENT_FILTER), self._onSaveFilter)
|
||||
|
||||
saved = self.col.get_config("savedFilters")
|
||||
if not saved:
|
||||
return ml
|
||||
|
||||
ml.addSeparator()
|
||||
for name, filt in sorted(saved.items()):
|
||||
ml.addItem(self._escapeMenuItem(name), self._saved_filter(filt))
|
||||
|
||||
return ml
|
||||
|
||||
def _onSaveFilter(self) -> None:
|
||||
|
|
|
@ -699,32 +699,6 @@ class MenuList:
|
|||
self.renderTo(qmenu)
|
||||
qmenu.exec_(widget.mapToGlobal(QPoint(0, 0)))
|
||||
|
||||
# Chunking
|
||||
######################################################################
|
||||
|
||||
chunkSize = 30
|
||||
|
||||
def chunked(self):
|
||||
if len(self.children) <= self.chunkSize:
|
||||
return self
|
||||
|
||||
newList = MenuList()
|
||||
oldItems = self.children[:]
|
||||
while oldItems:
|
||||
chunk = oldItems[: self.chunkSize]
|
||||
del oldItems[: self.chunkSize]
|
||||
label = self._chunkLabel(chunk)
|
||||
menu = newList.addMenu(label)
|
||||
menu.children = chunk
|
||||
return newList
|
||||
|
||||
def _chunkLabel(self, items):
|
||||
start = items[0].title
|
||||
end = items[-1].title
|
||||
prefix = os.path.commonprefix([start.upper(), end.upper()])
|
||||
n = len(prefix) + 1
|
||||
return "{}-{}".format(start[:n].upper(), end[:n].upper())
|
||||
|
||||
|
||||
class SubMenu(MenuList):
|
||||
def __init__(self, title):
|
||||
|
|
Loading…
Reference in a new issue