v0.31.5: Library button edge to edge with the playlists; one floor; floating top row

The sidebar gets 8px of bare window on its left, and the Library button
spans exactly the playlist list below it, scrollbar included. The Library
button, search box, playlist name, times and playhead all stand on one
floor 5px above the lists (text by its baseline). The top row floats:
equal space before, between and after the controls, with the now-playing
panel a fixed share of the width (700px at 1920). The header row grows if
the app font makes the Library button taller than the strip.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-28 23:04:12 -07:00
co-authored by Claude Opus 5.5
parent d5cdddee33
commit 6f50248202
9 changed files with 167 additions and 85 deletions
+8 -4
View File
@@ -131,10 +131,14 @@ persistence) → GUI (Qt widgets that read the manager and connect to its signal
horizontal `QSplitter` (`SidebarPanel` | stacked `LibraryView`/`PlaylistView`).
The bar's second row (`transport.HeaderRow`, placed by hand) holds three
things owned elsewhere: the sidebar's Library button (`SidebarPanel.header`,
kept as wide as the sidebar via `track_split`), the shown view's `header`
(search box, playlist name — mounted on the content stack's
`currentChanged`, returned to its view when it goes), and the seek row,
exactly under the now-playing panel. Since the Library button left the
kept edge to edge with the playlist list — `list_area`, scrollbar included —
via `track_split`), the shown view's `header` (search box, playlist name —
mounted on the content stack's `currentChanged`, returned to its view when
it goes), and the seek row, exactly under the now-playing panel. Everything
in it stands on one floor (`HeaderRow.BOTTOM` above the lists): boxes by
their bottom edge, text by its baseline. The row of boxes above floats —
equal space before, between and after the controls, with the panel a fixed
share of the width. Since the Library button left the
sidebar, `MainWindow` must hand it the first focus, or the playlist tree
takes it and opens its first playlist at startup.
`track_table.py` is the shared track grid (drag/drop, copy/paste, drop