Merge pull request #61 from hssm/browser-deck-collapse

Add expand/collapse support for decks in browser tree.
This commit is contained in:
Damien Elmes 2014-02-15 23:43:00 +09:00
commit 23c557af6e
2 changed files with 23 additions and 5 deletions

View file

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

View file

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