v0.31.3: header row moves up beside the seek bar; knolled top row

The Library button, the view's header (search box or playlist name) and
the seek row now share one band under the transport boxes, instead of the
seek row hanging alone with a header strip below it. The now-playing panel
caps at 560px and the gaps between controls share the rest evenly; more
room under the menu bar. Long playlist names shrink up to 2pt, then elide.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-28 22:43:21 -07:00
co-authored by Claude Opus 5.5
parent 8797e63bd8
commit 43d7b91aa6
12 changed files with 423 additions and 276 deletions
+8
View File
@@ -129,6 +129,14 @@ persistence) → GUI (Qt widgets that read the manager and connect to its signal
- **`lintunes/gui/`** — `main_window.py` assembles a top `TransportBar` over a
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
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
indicator). `playlist_ops.py::add_tracks_with_dup_check` is the single funnel
for every add-to-playlist path. `theme.py` applies the palette (highlight