feat(qbz-slint): album detail page
Clicking an album card opens the album detail view: a back button, the album header (224px artwork, title, artist, and info line — year, label, genre, track count, duration — plus play / shuffle / favorite / more action buttons), and the track list with a column header (#, title, artist, duration, quality). - album.rs: fetches the album via QbzCore::get_album, maps it (info line, per-track quality tier, durations) onto the AlbumState global, and loads the header artwork through the shared image cache. - AlbumPageView.slint, with NavState driving the shell content region between Home and the album page. - Album clicks bubble AlbumCard -> Carousel -> HomeView -> AppShell -> AppWindow -> main; the back button returns to Home. cc
This commit is contained in:
10 files changed
+628
-15
No files matched your search
@@ -1,16 +1,16 @@
|
||||
// QBZ Slint POC — UI entry point.
|
||||
// QBZ Slint MVP — UI entry point.
|
||||
//
|
||||
// Stays thin: imports the feature screens and exports the single
|
||||
// top-level window. No raw visual constants or domain logic here
|
||||
// (POC ADR, sections 13 and 21).
|
||||
// (MVP ADR, sections 13 and 21).
|
||||
|
||||
import { Theme } from "foundation/semantic-colors.slint";
|
||||
import { SplashScreen } from "splash/SplashScreen.slint";
|
||||
import { LoginScreen } from "login/LoginScreen.slint";
|
||||
import { AppShell } from "shell/AppShell.slint";
|
||||
|
||||
// Re-export the HomeState global so the Rust layer can populate it.
|
||||
export { HomeState } from "state.slint";
|
||||
// Re-export the state globals so the Rust layer can populate them.
|
||||
export { HomeState, AlbumState, NavState } from "state.slint";
|
||||
|
||||
// Which top-level screen is shown. The app starts on `splash` while it
|
||||
// restores a saved session, then resolves to `shell` or `login`.
|
||||
@@ -26,11 +26,12 @@ export component AppWindow inherits Window {
|
||||
|
||||
in-out property <AppScreen> screen: AppScreen.splash;
|
||||
|
||||
// Forwarded to the Rust layer, which maps them to typed AppCommands.
|
||||
// Forwarded to the Rust layer.
|
||||
callback sign-in-via-browser();
|
||||
callback use-system-browser();
|
||||
callback start-offline();
|
||||
callback open-tos();
|
||||
callback open-album(string);
|
||||
|
||||
if root.screen == AppScreen.splash: SplashScreen { }
|
||||
|
||||
@@ -49,5 +50,9 @@ export component AppWindow inherits Window {
|
||||
}
|
||||
}
|
||||
|
||||
if root.screen == AppScreen.shell: AppShell { }
|
||||
if root.screen == AppScreen.shell: AppShell {
|
||||
open-album(id) => {
|
||||
root.open-album(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user