honor expand setting

This commit is contained in:
Damien Elmes 2019-12-20 09:27:14 +10:00
parent b2ea4ee36c
commit 879db95148

View file

@ -413,6 +413,9 @@ class SidebarModel(QAbstractItemModel):
self.root = root
self.iconCache: Dict[str, QIcon] = {}
# Qt API
######################################################################
def rowCount(self, parent: QModelIndex = QModelIndex()) -> int:
if not parent.isValid():
return len(self.root.children)
@ -420,12 +423,6 @@ class SidebarModel(QAbstractItemModel):
item: SidebarItem = parent.internalPointer()
return len(item.children)
def hasChildren(self, parent: QModelIndex = QModelIndex()) -> bool:
if not parent.isValid():
return True
item: SidebarItem = parent.internalPointer()
return len(item.children) > 0
def columnCount(self, parent: QModelIndex = QModelIndex()) -> int:
return 1
@ -472,6 +469,9 @@ class SidebarModel(QAbstractItemModel):
else:
return QVariant(self.iconFromRef(item.icon))
# Helpers
######################################################################
def iconFromRef(self, iconRef: str) -> QIcon:
icon = self.iconCache.get(iconRef)
if icon is None:
@ -479,6 +479,32 @@ class SidebarModel(QAbstractItemModel):
self.iconCache[iconRef] = icon
return icon
def expandWhereNeccessary(self, tree: QTreeView) -> None:
for row, child in enumerate(self.root.children):
if child.expanded:
idx = self.index(row, 0, QModelIndex())
self._expandWhereNeccessary(idx, tree)
def _expandWhereNeccessary(self, parent: QModelIndex, tree: QTreeView) -> None:
if not parent.isValid():
parentItem = self.root
else:
parentItem: SidebarItem = parent.internalPointer()
# nothing to do?
if not parentItem.expanded:
return
# expand children
for row, child in enumerate(parentItem.children):
if not child.expanded:
continue
childIdx = self.index(row, 0, parent)
self._expandWhereNeccessary(childIdx, tree)
# then ourselves
tree.setExpanded(parent, True)
# Browser window
######################################################################
@ -928,6 +954,7 @@ by clicking on one on the left."""))
self.sidebarTree.setUniformRowHeights(True)
self.sidebarTree.setHeaderHidden(True)
self.sidebarTree.setIndentation(15)
self.sidebarTree.expanded.connect(self.onSidebarItemExpanded)
dw.setWidget(self.sidebarTree)
p = QPalette()
p.setColor(QPalette.Base, p.window().color())
@ -937,6 +964,10 @@ by clicking on one on the left."""))
self.sidebarDockWidget.setTitleBarWidget(QWidget())
self.addDockWidget(Qt.LeftDockWidgetArea, dw)
def onSidebarItemExpanded(self, idx: QModelIndex) -> None:
item: SidebarItem = idx.internalPointer()
#item.on
def onSidebarVisChanged(self, _visible: bool) -> None:
self.maybeRefreshSidebar()
@ -951,6 +982,7 @@ by clicking on one on the left."""))
root = self.buildTree()
model = SidebarModel(root)
self.sidebarTree.setModel(model)
model.expandWhereNeccessary(self.sidebarTree)
self.mw.progress.timer(10, deferredDisplay, False)
def buildTree(self) -> SidebarItem: