Compare commits

...

3 commits

Author SHA1 Message Date
3940392f2d how 2024-11-13 18:59:14 +01:00
2916fa8f71 center status page 2024-11-13 18:51:55 +01:00
5f46cf2b77 reorder things 2024-11-13 18:49:08 +01:00
6 changed files with 62 additions and 55 deletions

View file

@ -2,8 +2,6 @@ using Gtk 4.0;
using Adw 1; using Adw 1;
template $AudreyUiPlayQueue: Adw.Bin { template $AudreyUiPlayQueue: Adw.Bin {
name: "play-queue";
child: Stack { child: Stack {
visible-child-name: bind $visible_child_name(template.model as <$GListStore>.n-items) as <string>; visible-child-name: bind $visible_child_name(template.model as <$GListStore>.n-items) as <string>;
@ -19,22 +17,56 @@ template $AudreyUiPlayQueue: Adw.Bin {
StackPage { StackPage {
name: "not-empty"; name: "not-empty";
child: ScrolledWindow { child: Box {
hexpand: true; name: "play-queue-page";
hscrollbar-policy: never; homogeneous: true;
ListView view { Adw.Clamp {
single-click-activate: true; halign: center;
activate => $on_row_activated() swapped; margin-top: 24;
margin-bottom: 24;
margin-start: 24;
margin-end: 24;
model: NoSelection { Picture {
model: bind template.model; valign: center;
};
factory: SignalListItemFactory { styles [
setup => $on_song_list_setup() swapped; "frame"
bind => $on_song_list_bind() swapped; ]
unbind => $on_song_list_unbind() swapped;
halign: center;
paintable: bind template.playing-cover-art;
}
}
Adw.Bin {
name: "play-queue";
hexpand: true;
halign: fill;
margin-top: 48;
margin-bottom: 48;
margin-start: 24;
margin-end: 24;
child: ScrolledWindow {
hexpand: true;
hscrollbar-policy: never;
ListView view {
single-click-activate: true;
activate => $on_row_activated() swapped;
model: NoSelection {
model: bind template.model;
};
factory: SignalListItemFactory {
setup => $on_song_list_setup() swapped;
bind => $on_song_list_bind() swapped;
unbind => $on_song_list_unbind() swapped;
};
}
}; };
} }
}; };

View file

@ -6,7 +6,6 @@ template $AudreyUiPlayQueueSong: Box {
Box { Box {
margin-start: 6; margin-start: 6;
width-request: 36; width-request: 36;
focusable: false; focusable: false;
homogeneous: true; homogeneous: true;

View file

@ -8,6 +8,7 @@ template $AudreyUiPlaybar: Adw.Bin {
styles [ styles [
"osd" "osd"
] ]
visible: bind template.show-pulse-bar; visible: bind template.show-pulse-bar;
valign: start; valign: start;
} }

View file

@ -7,7 +7,6 @@ template $AudreyUiWindow: Adw.ApplicationWindow {
default-height: 600; default-height: 600;
Adw.ToolbarView { Adw.ToolbarView {
[top] [top]
Adw.HeaderBar { Adw.HeaderBar {
[start] [start]
@ -84,7 +83,10 @@ template $AudreyUiWindow: Adw.ApplicationWindow {
vexpand: true; vexpand: true;
GridView { GridView {
styles [ "albums" ] styles [
"albums"
]
single-click-activate: true; single-click-activate: true;
model: NoSelection { model: NoSelection {
@ -140,41 +142,11 @@ template $AudreyUiWindow: Adw.ApplicationWindow {
title: _("Play queue"); title: _("Play queue");
name: "play-queue"; name: "play-queue";
child: Box { child: $AudreyUiPlayQueue play_queue {
name: "play-queue-page"; model: bind template.playlist_model;
homogeneous: true; playlist-pos: bind template.playlist-pos;
// playbin: bind template.playbin;
Adw.Clamp { playing-cover-art: bind template.playing-cover-art;
halign: center;
margin-top: 24;
margin-bottom: 24;
margin-start: 24;
margin-end: 24;
Picture {
valign: center;
styles [
"frame"
]
halign: center;
paintable: bind template.playing_cover_art;
}
}
$AudreyUiPlayQueue play_queue {
hexpand: true;
halign: fill;
margin-top: 48;
margin-bottom: 48;
margin-start: 24;
margin-end: 24;
model: bind template.playlist_model;
playlist-pos: bind template.playlist-pos;
// playbin: bind template.playbin;
}
}; };
} }
}; };

View file

@ -2,9 +2,9 @@ pub mod song;
pub use song::Song; pub use song::Song;
mod imp { mod imp {
use adw::{gio, glib, prelude::*, subclass::prelude::*}; use adw::{gdk, gio, glib, prelude::*, subclass::prelude::*};
use glib::{subclass::InitializingObject, WeakRef}; use glib::{subclass::InitializingObject, WeakRef};
use std::cell::Cell; use std::cell::{Cell, RefCell};
use tracing::{event, Level}; use tracing::{event, Level};
#[derive(gtk::CompositeTemplate, glib::Properties, Default)] #[derive(gtk::CompositeTemplate, glib::Properties, Default)]
@ -15,6 +15,8 @@ mod imp {
pub(super) model: WeakRef<gio::ListModel>, pub(super) model: WeakRef<gio::ListModel>,
#[property(get, set)] #[property(get, set)]
_playlist_pos: Cell<i64>, _playlist_pos: Cell<i64>,
#[property(get, set)]
playing_cover_art: RefCell<Option<gdk::Paintable>>,
} }
#[glib::object_subclass] #[glib::object_subclass]

View file

@ -193,6 +193,7 @@ mod imp {
match window.imp().state.get() { match window.imp().state.get() {
State::Idle | State::FileLoading | State::Seeking => {} State::Idle | State::FileLoading | State::Seeking => {}
State::Active => window.notify("time-pos"), State::Active => window.notify("time-pos"),
State::FileEnded => {}
other => unreachable!("{other:?}"), other => unreachable!("{other:?}"),
} }
glib::ControlFlow::Continue glib::ControlFlow::Continue