mirror of
https://github.com/ankitects/anki.git
synced 2025-09-19 22:42:25 -04:00
Merge pull request #61 from hssm/browser-deck-collapse
Add expand/collapse support for decks in browser tree.
This commit is contained in:
commit
23c557af6e
2 changed files with 23 additions and 5 deletions
|
@ -197,6 +197,12 @@ class DeckManager(object):
|
||||||
deck['collapsed'] = not deck['collapsed']
|
deck['collapsed'] = not deck['collapsed']
|
||||||
self.save(deck)
|
self.save(deck)
|
||||||
|
|
||||||
|
def collapseBrowser(self, did):
|
||||||
|
deck = self.get(did)
|
||||||
|
collapsed = deck.get('browserCollapsed', False)
|
||||||
|
deck['browserCollapsed'] = not collapsed
|
||||||
|
self.save(deck)
|
||||||
|
|
||||||
def count(self):
|
def count(self):
|
||||||
return len(self.decks)
|
return len(self.decks)
|
||||||
|
|
||||||
|
|
|
@ -731,9 +731,10 @@ by clicking on one on the left."""))
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
class CallbackItem(QTreeWidgetItem):
|
class CallbackItem(QTreeWidgetItem):
|
||||||
def __init__(self, root, name, onclick):
|
def __init__(self, root, name, onclick, oncollapse=None):
|
||||||
QTreeWidgetItem.__init__(self, root, [name])
|
QTreeWidgetItem.__init__(self, root, [name])
|
||||||
self.onclick = onclick
|
self.onclick = onclick
|
||||||
|
self.oncollapse = oncollapse
|
||||||
|
|
||||||
def setupTree(self):
|
def setupTree(self):
|
||||||
self.connect(
|
self.connect(
|
||||||
|
@ -743,6 +744,12 @@ by clicking on one on the left."""))
|
||||||
p.setColor(QPalette.Base, QColor("#d6dde0"))
|
p.setColor(QPalette.Base, QColor("#d6dde0"))
|
||||||
self.form.tree.setPalette(p)
|
self.form.tree.setPalette(p)
|
||||||
self.buildTree()
|
self.buildTree()
|
||||||
|
self.connect(
|
||||||
|
self.form.tree, SIGNAL("itemExpanded(QTreeWidgetItem*)"),
|
||||||
|
lambda item: self.onTreeCollapse(item))
|
||||||
|
self.connect(
|
||||||
|
self.form.tree, SIGNAL("itemCollapsed(QTreeWidgetItem*)"),
|
||||||
|
lambda item: self.onTreeCollapse(item))
|
||||||
|
|
||||||
def buildTree(self):
|
def buildTree(self):
|
||||||
self.form.tree.clear()
|
self.form.tree.clear()
|
||||||
|
@ -751,14 +758,16 @@ by clicking on one on the left."""))
|
||||||
self._decksTree(root)
|
self._decksTree(root)
|
||||||
self._modelTree(root)
|
self._modelTree(root)
|
||||||
self._userTagTree(root)
|
self._userTagTree(root)
|
||||||
self.form.tree.expandAll()
|
|
||||||
self.form.tree.setItemsExpandable(False)
|
|
||||||
self.form.tree.setIndentation(15)
|
self.form.tree.setIndentation(15)
|
||||||
|
|
||||||
def onTreeClick(self, item, col):
|
def onTreeClick(self, item, col):
|
||||||
if getattr(item, 'onclick', None):
|
if getattr(item, 'onclick', None):
|
||||||
item.onclick()
|
item.onclick()
|
||||||
|
|
||||||
|
def onTreeCollapse(self, item):
|
||||||
|
if getattr(item, 'oncollapse', None):
|
||||||
|
item.oncollapse()
|
||||||
|
|
||||||
def setFilter(self, *args):
|
def setFilter(self, *args):
|
||||||
if len(args) == 1:
|
if len(args) == 1:
|
||||||
txt = args[0]
|
txt = args[0]
|
||||||
|
@ -821,10 +830,13 @@ by clicking on one on the left."""))
|
||||||
def fillGroups(root, grps, head=""):
|
def fillGroups(root, grps, head=""):
|
||||||
for g in grps:
|
for g in grps:
|
||||||
item = self.CallbackItem(
|
item = self.CallbackItem(
|
||||||
root, g[0], lambda g=g: self.setFilter(
|
root, g[0],
|
||||||
"deck", head+g[0]))
|
lambda g=g: self.setFilter("deck", head+g[0]),
|
||||||
|
lambda g=g: self.mw.col.decks.collapseBrowser(g[1]))
|
||||||
item.setIcon(0, QIcon(":/icons/deck16.png"))
|
item.setIcon(0, QIcon(":/icons/deck16.png"))
|
||||||
newhead = head + g[0]+"::"
|
newhead = head + g[0]+"::"
|
||||||
|
collapsed = self.mw.col.decks.get(g[1]).get('browserCollapsed', False)
|
||||||
|
item.setExpanded(not collapsed)
|
||||||
fillGroups(item, g[5], newhead)
|
fillGroups(item, g[5], newhead)
|
||||||
fillGroups(root, grps)
|
fillGroups(root, grps)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue