Skip to content

Port instance display names + root-color highlighting onto nav-rail UI#51

Merged
RobThePCGuy merged 1 commit into
masterfrom
feat/instance-display-names-port
Jul 17, 2026
Merged

Port instance display names + root-color highlighting onto nav-rail UI#51
RobThePCGuy merged 1 commit into
masterfrom
feat/instance-display-names-port

Conversation

@RobThePCGuy

Copy link
Copy Markdown
Owner

What & why

Closes #47 by porting it forward. #47 (display-name column, root-status color highlighting, scroll area for large instance lists) was written against the old single-file main.py. #45 merged first and replaced that file with the nav-rail views/ layout, so #47 no longer applies and can't be rebased cleanly — the UI it touched doesn't exist in that shape anymore.

All credit to Chris Borneman (@Hobbes4Pres) — the feature, the config-parsing approach, and the scroll-area fix for his 20+-instance setup are his, from #47. This PR is that work carried onto the new file layout, plus the test coverage the original didn't have.

Changes

Testing

  • New tests/test_config_handler.py + 4 new tests in tests/test_instances_page.py (display name + fallback, root-color highlighting, no widget leak across refresh). Confirmed each fails against pre-fix code before the change, passes after.
  • Live-smoke-tested through the real MainWindow with 25 synthetic instances (mixed display names / rooted states): correct row count, correct highlight count (9/25 green), scroll area actually engaged (737px content in a fixed-height window), stable across a simulated refresh.
  • Full suite: 81 passed. ruff check --select E9,F63,F7,F82,F401 . and python -m compileall -q . clean.

Closes #47.

#47)

#47 (display_name config parsing, root-status color highlighting, and a
scroll area for large instance lists) predates #45's rewrite into the
views/ package and no longer applies to the old main.py it was written
against. This ports the same feature onto views/instances_page.py and
views/main_window.py:

- constants.py / config_handler.py: unchanged from #47's approach --
  DISPLAY_NAME_KEY + display_names dict parsed alongside instance_statuses.
  Also fixed the isfile()-false early return to include the display_names
  key (matching the exception-handler fix #47 already had), so both empty
  paths agree on shape.
- views/instances_page.py: display-name column, green highlight on rooted
  rows, and the QScrollArea from #47 (for Chris's 20+ instance setup)
  wrapping the grid so a large instance count doesn't force the window
  taller than the screen.
- views/main_window.py: wires display_names through update_instance_data.

All credit to Chris Borneman (@Hobbes4Pres) -- the feature, the regex
approach, and the scroll-area idea are his from #47. This is that PR
ported onto the new file layout plus the test coverage #47 didn't have.

Testing
- New tests/test_config_handler.py (display_names parsing, both empty-
  result paths) and 4 new tests in tests/test_instances_page.py (display
  name rendering + fallback, root-color highlighting, no widget leak on
  refresh). All 5 confirmed to fail against pre-fix code.
- Live-smoke-tested through the real MainWindow with 25 synthetic
  instances (mixed display names / rooted states): correct row count,
  correct highlight count, scroll area actually engaged, stable across
  a simulated refresh.
- Full suite: 81 passed. ruff + compileall clean (same gates CI runs).

Co-authored-by: Chris Borneman <75288580+Hobbes4Pres@users.noreply.github.com>
@gemini-code-assist

Copy link
Copy Markdown

Caution

The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased.

@RobThePCGuy
RobThePCGuy merged commit fc68864 into master Jul 17, 2026
4 checks passed
@RobThePCGuy
RobThePCGuy deleted the feat/instance-display-names-port branch July 17, 2026 16:42
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