gui_client: keep collapsed nodes collapsed on record updates

collect: capture apply_procedural return value

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-29 21:23:28 +02:00
co-authored by Claude Sonnet 4.6
parent 73f6b85c05
commit 1c02869bd3
2 changed files with 14 additions and 16 deletions
+13 -15
View File
@@ -328,7 +328,7 @@ class DashboardTab(QWidget):
changed = {p for p, v in curr_flat.items() if v != self._prev_flat.get(p)}
self._prev_flat = curr_flat
expanded = self._expanded_paths()
collapsed = self._collapsed_paths()
self._tree.clear()
bold = QFont()
@@ -365,7 +365,7 @@ class DashboardTab(QWidget):
self._tree.addTopLevelItem(d_item)
self._tree.expandAll()
self._restore_expanded(expanded)
self._apply_collapsed(collapsed)
def _add_fields(self, parent: QTreeWidgetItem, data: dict, path: str, changed: set):
for k, v in data.items():
@@ -389,33 +389,31 @@ class DashboardTab(QWidget):
item.setBackground(col, _CHANGED_BG)
parent.addChild(item)
# ── preserve expand state across refreshes ─────────────────────────────
# ── preserve collapse state across refreshes ─────────────────────────────
def _expanded_paths(self) -> set[str]:
def _collapsed_paths(self) -> set[str]:
paths = set()
root = self._tree.invisibleRootItem()
self._collect_expanded(root, "", paths)
self._collect_collapsed(self._tree.invisibleRootItem(), "", paths)
return paths
def _collect_expanded(self, item, prefix, paths):
def _collect_collapsed(self, item, prefix, paths):
for i in range(item.childCount()):
child = item.child(i)
path = f"{prefix}/{child.text(0)}"
if child.isExpanded():
if child.childCount() > 0 and not child.isExpanded():
paths.add(path)
self._collect_expanded(child, path, paths)
self._collect_collapsed(child, path, paths)
def _restore_expanded(self, paths: set[str]):
root = self._tree.invisibleRootItem()
self._apply_expanded(root, "", paths)
def _apply_collapsed(self, paths: set[str]):
self._set_collapsed(self._tree.invisibleRootItem(), "", paths)
def _apply_expanded(self, item, prefix, paths):
def _set_collapsed(self, item, prefix, paths):
for i in range(item.childCount()):
child = item.child(i)
path = f"{prefix}/{child.text(0)}"
if path in paths:
child.setExpanded(True)
self._apply_expanded(child, path, paths)
child.setExpanded(False)
self._set_collapsed(child, path, paths)
# ── Plot tab ──────────────────────────────────────────────────────────────────