Skip to content

M1: virtualized inline IEC 61850 detail grid and canonical selection - #155

Merged
masarray merged 6 commits into
mainfrom
ux/workbench-hierarchical-grid-m1
Oct 14, 2026
Merged

masarray merged 6 commits into
mainfrom
ux/workbench-hierarchical-grid-m1

Conversation

@masarray

Copy link
Copy Markdown
Owner

Baseline & intent

Stacked on PR #152 exact head 27c9d40c5bb2917089e93b6e30daf765da50ee5d. This is the native Qt apps/ied_simulator Workbench; no web UI, SMV injector, ESP32-P4 firmware, or protocol TX changes.

M1 implementation

  • Add MmsLiveDetailModel, a bounded (max 4096 rows) QAbstractListModel projection over stable canonical MmsLiveTreeModel node indices; there is no second IEC 61850 model and no per-delegate QVariantMap materialization.
  • Inline expand/collapse LD/LN/DO/DA in the right engineering panel; include indent, disclosure state, FC and latest known value.
  • Explicit row selection remains attached to the existing canonical tree for read/control context without changing the active detail root.
  • Keep network Read / Read All explicit; navigating the detail tree no longer issues unintended MMS reads.
  • Notify the presentation model when live values update; values without runtime evidence stay unknown.
  • Extend 60,106-node QA and QML contract to lock projection and selection behavior.

Risk controls and remaining scope

  • Do not merge before exact-head CI and native GUI smoke pass.
  • PR Workbench Browser workflow convergence #152 remains draft; this stacked PR must be reviewed/merged in order, or rebased after Workbench Browser workflow convergence #152 merges.
  • Advanced DA nesting, IEC quality-bit expansion, typed phasor/unit formatting, DataSet member hierarchy, GOOSE/Report runtime QA, full pixel-perfect visual benchmark, and board/live physical test are subsequent milestones, not claimed by M1.
  • No release / installer publication from this branch.

Acceptance

  • Native Qt release build + large-model regression pass.
  • User can expand DO rows in-place without round-tripping to a separate page.
  • Selected detail node is the correct canonical selection for commands.
  • No automatic MMS reads on expand/collapse.
  • No eager construction proportional to total discovered nodes.

Add virtualized Qt detail model with bounded lazy expansion, selection, current-value updates, and large-model regression gates. No extra semantic tree, implicit MMS read, or protocol-runtime changes.
Use canonical detail projection with click-to-select and inline disclosure without automatic MMS reads. Lock renderer interaction regression.
Replace full-model reset on ordinary branch expansion with bounded insert/remove notifications. Keep stable selection when collapsing a selected descendant; rebuild only when a capped projection must be rehydrated.
@masarray
masarray changed the base branch from main-workbench-browser-convergence to main October 14, 2026 07:16
@masarray
masarray marked this pull request as ready for review October 14, 2026 07:17
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-14T07:20:41.048660Z 0f9fe86 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@masarray
masarray merged commit dfea185 into main Oct 14, 2026
22 checks passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

detailModel_->setRoot(next);

P2 Badge Synchronize the detail root on same-node tree clicks

After a user selects an LD/LN/DO in the inline pane, MmsLiveDetailModel::select() updates selectedNode_ while intentionally retaining the current detail root. If the user then clicks that same node in the left Engineering Explorer, IedBrowserNavigation.qml calls selectRow(), but its equality check returns before this setRoot() call, leaving the right-hand header and rows on the old ancestor until another node is selected. Ensure a same-node tree selection can still promote that node to the detail root.


text: childRow.model.value
|| childRow.model.description
|| (childRow.model.childCount > 0
? childRow.model.childCount + " item(s)" : "—")

P2 Badge Expose childCount before using it in the delegate

The new MmsLiveDetailModel does not define a childCount role, so this expression reads an undefined property. For branch nodes without a value or description—such as a data object with no inferred CDC—the intended "N item(s)" fallback never appears and the UI displays — instead (potentially with a QML missing-property warning). Add the count role to the detail model or derive the count from an exposed property.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant