From 1c02869bd309c4689b20644c87642bceb2b04e1f Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Fri, 29 May 2026 21:23:28 +0200 Subject: [PATCH] gui_client: keep collapsed nodes collapsed on record updates collect: capture apply_procedural return value Co-Authored-By: Claude Sonnet 4.6 --- client/gui_client.py | 28 +++++++++++++--------------- server/collect.py | 2 +- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/client/gui_client.py b/client/gui_client.py index 8e1ae4b..6b24fda 100644 --- a/client/gui_client.py +++ b/client/gui_client.py @@ -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 ────────────────────────────────────────────────────────────────── diff --git a/server/collect.py b/server/collect.py index 664791f..df73a95 100644 --- a/server/collect.py +++ b/server/collect.py @@ -86,7 +86,7 @@ def run(args: argparse.Namespace) -> None: try: we_connect.update(wc) snapshot = extract_all(vehicle) - apply_procedural(snapshot) + snapshot = apply_procedural(snapshot) store["records"].append(snapshot) save_store(out, store, args.max_records) if args.diff: