Skip to content

Preserve PySide TreeView selection/expansion across keyed reorders - #179

Merged
berendkleinhaneveld merged 1 commit into
masterfrom
fix-issue-keyed-reorder-reprise
Jun 24, 2026
Merged

Preserve PySide TreeView selection/expansion across keyed reorders#179
berendkleinhaneveld merged 1 commit into
masterfrom
fix-issue-keyed-reorder-reprise

Conversation

@berendkleinhaneveld

@berendkleinhaneveld berendkleinhaneveld commented Jun 24, 2026

Copy link
Copy Markdown
Collaborator

What this changes

  • Preserve QTreeView item UI state (selection and expansion) when keyed v-for rows are reordered in QStandardItemModel.
  • Add snapshot and restore handling in:
    • collagraph/renderers/pyside/objects/itemmodel.py
    • collagraph/renderers/pyside/objects/standarditem.py
  • Ensure deferred selected and expanded attributes are applied correctly when items are inserted.
  • Add focused regression tests in tests/pyside/test_treeview_keyed_selection.py for:
    • bound selected and expanded surviving reorder
    • manual parent selection surviving reorder
    • manual child selection surviving parent reorder
  • Add a trimmed manual demo: examples/pyside/keyed_tree_demo.cgx.

Why

Keyed reconciliation already preserves fragment identity, but Qt model/view state can still be lost when items are detached and reinserted during reorder operations. This PR preserves that UI state so moved items keep the same selection and expansion behavior.

Verification

  • uv run pytest tests/pyside/test_treeview_keyed_selection.py -q
  • Commit hooks passed on commit (lint, format, pytest).

Notes

This PR is a reimplementation of the intent from #142 against the current codebase architecture, rather than a direct application of the old patch.

@berendkleinhaneveld
berendkleinhaneveld merged commit cbc7b3c into master Jun 24, 2026
9 checks passed
@berendkleinhaneveld
berendkleinhaneveld deleted the fix-issue-keyed-reorder-reprise branch June 24, 2026 12:57
berendkleinhaneveld added a commit that referenced this pull request Jul 6, 2026
This release includes the following:

- Restore support for text expressions (#148)
- Support pygfx text elements (#181)
- Use renderer text-element API for template text nodes (#180)
- Preserve PySide TreeView selection/expansion across keyed reorders (#179)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant