Tree State Sync System
Modules
pyqt_reactive.widgets.shared.tree_state_adapterpyqt_reactive.widgets.shared.tree_rebuild_coordinatorpyqt_reactive.widgets.shared.tree_sync_adapter
Problem
Frequent tree refreshes can destroy user context (collapsed nodes re-open, selection disappears, stale children remain).
Solution
pyqt-reactive splits tree concerns into orthogonal adapters:
TreeStateAdapter: capture/restore expansion and selected-item stateTreeRebuildCoordinator: clear + rebuild + restore in one safe sequenceTreeSyncAdapter: recursive typed node synchronization and child pruning
Stable Item Identity
TreeItemKeyBuilderABC provides stable keys per item. The default
DictPayloadTreeItemKeyBuilder keys by payload metadata (port/type/node_id)
and falls back to text when metadata is absent.
Typed Node Model
TreeNode is a pure data representation for tree rows:
node_idnode_typelabelstatusinfochildren
This keeps synchronization deterministic and testable.
Usage Pattern
Build typed
TreeNodestructures from domain state.Use
TreeSyncAdapter.sync_childrento mutate Qt items.Wrap full refresh in
TreeRebuildCoordinator.rebuildto preserve user state.