diff --git a/podcasts-gtk/resources/gtk/episode_widget.ui b/podcasts-gtk/resources/gtk/episode_widget.ui index d0ac37be85ef5f6aa8f8dbac6dfd42e7dbaea161..4518b72275799863ba3745f294375bd763540eee 100644 --- a/podcasts-gtk/resources/gtk/episode_widget.ui +++ b/podcasts-gtk/resources/gtk/episode_widget.ui @@ -51,15 +51,43 @@ Tobias Bernard vertical 6 - + True False - Episode Title - end - True - False - 1 - 0 + 6 + + + True + False + Episode Title + end + True + False + 1 + 0 + + + False + True + 0 + + + + + True + False + You've already listened to this episode. + object-select-symbolic + + + + False + True + 1 + + False diff --git a/podcasts-gtk/src/meson.build b/podcasts-gtk/src/meson.build index aa9386be2ea28a8fb01781f2e300b347349bd71b..63d07390ac17fde3a42408b61a6aca56eaa55d5d 100644 --- a/podcasts-gtk/src/meson.build +++ b/podcasts-gtk/src/meson.build @@ -41,6 +41,7 @@ podcasts_sources = files( 'widgets/appnotif.rs', 'widgets/base_view.rs', 'widgets/empty.rs', + 'widgets/episode.rs', 'widgets/home_view.rs', 'widgets/mod.rs', 'widgets/player.rs', diff --git a/podcasts-gtk/src/widgets/episode.rs b/podcasts-gtk/src/widgets/episode.rs index 8601db57148b556c089b9ccc476bd81690518df8..81b9013f85b5f97e437e9fdc57e77907155180ba 100644 --- a/podcasts-gtk/src/widgets/episode.rs +++ b/podcasts-gtk/src/widgets/episode.rs @@ -80,6 +80,7 @@ struct InfoLabels { local_size: gtk::Label, size_separator: gtk::Label, total_size: gtk::Label, + played_checkmark: gtk::Image, } #[derive(Clone, Debug)] @@ -110,8 +111,10 @@ impl InfoLabels { if episode.played().is_some() { self.title.get_style_context().add_class("dim-label"); + self.played_checkmark.show(); } else { self.title.get_style_context().remove_class("dim-label"); + self.played_checkmark.hide(); } } @@ -195,6 +198,7 @@ impl Default for EpisodeWidget { let duration = builder.get_object("duration_label").unwrap(); let local_size = builder.get_object("local_size").unwrap(); let total_size = builder.get_object("total_size").unwrap(); + let played_checkmark = builder.get_object("played_checkmark").unwrap(); let separator1 = builder.get_object("separator1").unwrap(); let separator2 = builder.get_object("separator2").unwrap(); @@ -212,6 +216,7 @@ impl Default for EpisodeWidget { local_size, total_size, size_separator, + played_checkmark, }, buttons: Buttons { container: buttons_container, diff --git a/podcasts-gtk/src/widgets/show_menu.rs b/podcasts-gtk/src/widgets/show_menu.rs index 3e5f27bec67aa24d923f43d57a2878f4a0cc8cd4..80e5753ea580d659d17f1ba1d46cd1bdcbc5a943 100644 --- a/podcasts-gtk/src/widgets/show_menu.rs +++ b/podcasts-gtk/src/widgets/show_menu.rs @@ -137,9 +137,13 @@ fn dim_titles(episodes: >k::ListBox) -> Option<()> { .downcast::() .ok()?; let bar = foo.get_children().remove(0).downcast::().ok()?; - let title = bar.get_children().remove(0).downcast::().ok()?; + let baz = bar.get_children().remove(0).downcast::().ok()?; + let title = baz.get_children().remove(0).downcast::().ok()?; title.get_style_context().add_class("dim-label"); + + let checkmark = baz.get_children().remove(1).downcast::().ok()?; + checkmark.show(); } Some(()) }