Skip to content

feat(terminal): live state column in the node list (closes #44)#231

Merged
Assar63 merged 1 commit into
masterfrom
feat/rich-node-list
Jul 6, 2026
Merged

feat(terminal): live state column in the node list (closes #44)#231
Assar63 merged 1 commit into
masterfrom
feat/rich-node-list

Conversation

@Assar63

@Assar63 Assar63 commented Jul 3, 2026

Copy link
Copy Markdown
Owner

Summary

Turns the terminal's always-visible node-list pane into a rich, live list by adding a state column — each row is now # name state sec, where state is the node's current headline value from the value cache (#213). This is the "dedicated window with a live state column" #44 asks for, superseding the one-shot [l] dump.

Changes

  • NodeRow gains state; the model now fetches GetNodeValues for every node (refreshSelectedValuesrefreshValues), populating each row's full value list plus a headline value picked by priority: binary_switchmultilevel_switchsetpointsensorconfigbattery, else the first value (empty if the node hasn't reported yet).
  • Because every row now carries its values, selection moves no longer refetch (snappier), and the detail pane / node-info modal read straight from the model.
  • render.cpp gains a padRight() helper so the id/name/state columns line up; the header and rows share the layout.
  • Refresh stays signal-driven (nodesDirty/valuesDirty), so the column updates live as nodes report; [r] forces a manual refresh.

Verification

  • Both gnu and llvm build clean (daemon + terminal); 483/483 ctest; clang-tidy + clang-format clean on the changed files.

Docs

MANUAL §13 (the pane's live state column), CLAUDE.md, TODO.md (#44 marked done).

🤖 Generated with Claude Code

The always-visible node-list pane gains a live "state" column, turning the
one-shot [l] dump into a rich, always-current list. Each row is now
`# name state sec`, where `state` is the node's headline cached value.

- NodeRow gains `state`; the model now fetches GetNodeValues for *every*
  node (refreshSelectedValues -> refreshValues), populating each row's full
  value list + a headline picked by priority (binary_switch > multilevel >
  setpoint > sensor > config > battery, else first value).
- Since every row now carries its values, selection moves no longer refetch,
  and the detail pane / node-info modal read straight from the model.
- render.cpp gains padRight() so the id/name/state columns line up; header
  and rows share the layout.

Docs: MANUAL §13, CLAUDE.md, TODO.md (#44 done).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@Assar63 Assar63 merged commit 23ccbf2 into master Jul 6, 2026
4 checks passed
@Assar63 Assar63 deleted the feat/rich-node-list branch July 6, 2026 18:01
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