docs: close the GUI layout review, release 0.16.0

Stage 9 of the GUI layout plan: the roadmap item the review was raised
under is closed, so the plan and the findings document go with it — what
they established now lives in STANDARDS and the CHANGELOG.

STANDARDS gains the rule the review produced: a size that must follow the
theme is measured at build time, not written as a pixel constant, because
a hand-tuned number is only correct for the theme it was tuned against.
rowOverlap, captionColumnWidth, textColumnWidth, activityRowsHeight and
initialSplitOffset are the worked examples.

The CHANGELOG entry keeps to what the user can see: the window opens at
the size it asks for and drags smaller, the Jobs divider is draggable,
History columns hold their content on a scaled UI, and the Settings
button row and block spacing are as their layouts intended.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mixeme
2026-07-27 16:42:20 +03:00
parent d0dc17a067
commit c5f300b670
6 changed files with 56 additions and 908 deletions
-44
View File
@@ -81,50 +81,6 @@ Design notes / open questions:
Service exposes import/export operations; the UI only picks the file and
shows the outcome.
### GUI review — custom layouts and composition
**The review has been carried out — its findings are in
[GUI-LAYOUT-REVIEW.md](GUI-LAYOUT-REVIEW.md).** This item stays open until they
are applied; F9, F13 and F15 there are larger than a single fix and come back
here once the rest has landed. The agenda below is what the pass was asked to
answer.
The `ui` package has accumulated hand-written layouts and tuned constants that
work but have never been reviewed as a whole:
[`layout.go`](../src/ui/layout.go) holds four custom `fyne.Layout`
implementations (`minWidthLayout`, `compactVBoxLayout`, `fixedHeightLayout`,
`captionValueLayout`), and the views drive them with negative spacings
(`detailRowSpacing = -8`, `jobRowSpacing = -8`, `settingsRowSpacing = -6`) that
cancel out the built-in padding of Fyne widgets.
Do a focused pass over composition only — not a general code review — and
answer, per layout and per constant: is it still needed, is it the smallest
thing that works, and does it hold up at different window sizes and theme
scales.
What to look for:
- *Negative spacing as a workaround.* Pulling rows together to overlap label
padding is a workaround for widget metrics, not a layout decision. Check
whether a `widget.Form`, a grid, or a custom text row would express the same
result without depending on the padding a future Fyne release may change.
- *Hard-coded pixel constants.* Widths and heights expressed in raw pixels
(`logColumnMinWidth`, `minJobsSidebarWidth`, `settingsControlWidth`) do not
follow `theme.Padding()` / text size, so they behave differently under a
scaled UI. `activityRowsHeight` already derives its height from the theme —
decide which of the rest should do the same.
- *Layouts with one call site.* `fixedHeightLayout` is used once. If a stock
container expresses the same intent, deleting the type is a net win — the
complexity rule in [REVIEW.md](REVIEW.md) §2 applies to layouts too.
- *File size.* `settings_view.go` is well past the ~250-line guideline in
[ARCHITECTURE.md](ARCHITECTURE.md) and should be split the way `jobs_view.go`
was.
- *Behaviour at small sizes.* The details pane was condensed to fit 720p; verify
the current composition still degrades sensibly when the window is narrow or
short, instead of clipping.
Findings that are single fixes go straight in; anything larger comes back here.
### Window size persistence *(frozen)*
Window size is currently **not** saved on quit or close. Saving was disabled