Add PopulatedView struct.

This commit is contained in:
Jordan Petridis 2017-12-01 01:00:07 +02:00
parent 84c918bbd5
commit f1f4d10fe3
No known key found for this signature in database
GPG Key ID: CEABAD9F5683B9A6
2 changed files with 53 additions and 1 deletions

View File

@ -9,6 +9,45 @@ use hammond_data::Podcast;
use widgets::podcast::*;
use utils::get_pixbuf_from_path;
#[derive(Debug, Clone)]
pub struct PopulatedView {
container: gtk::Box,
flowbox: gtk::FlowBox,
viewport: gtk::Viewport,
}
impl PopulatedView {
pub fn new() -> PopulatedView {
let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/podcasts_view.ui");
let container: gtk::Box = builder.get_object("fb_parent").unwrap();
let flowbox: gtk::FlowBox = builder.get_object("flowbox").unwrap();
let viewport: gtk::Viewport = builder.get_object("viewport").unwrap();
PopulatedView {
container,
flowbox,
viewport,
}
}
pub fn init(&self, content_stack: &gtk::Stack) {
use gtk::WidgetExt;
// TODO: handle unwraps.
let stack = content_stack;
self.flowbox
.connect_child_activated(clone!(stack => move |_, child| {
// This is such an ugly hack...
// let id = child.get_name().unwrap().parse::<i32>().unwrap();
let id = WidgetExt::get_name(child).unwrap().parse::<i32>().unwrap();
let parent = dbqueries::get_podcast_from_id(id).unwrap();
on_flowbox_child_activate(&stack, &parent);
}));
// Populate the flowbox with the Podcasts.
populate_flowbox(&self.flowbox);
}
}
fn setup_empty_view(stack: &gtk::Stack) {
let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/empty_view.ui");
let view: gtk::Box = builder.get_object("empty_view").unwrap();

View File

@ -72,7 +72,17 @@ impl PodcastWidget {
on_played_button_clicked(&stack, &pd);
}));
show_played_button(pd, &self.played);
self.show_played_button(pd);
}
fn show_played_button(&self, pd: &Podcast) {
let new_episodes = dbqueries::get_pd_unplayed_episodes(pd);
if let Ok(n) = new_episodes {
if !n.is_empty() {
self.played.show()
}
}
}
}
@ -118,6 +128,7 @@ pub fn podcast_widget(stack: &gtk::Stack, pd: &Podcast) -> gtk::Box {
pd_widget
}
// Note: Stack manipulation
fn on_unsub_button_clicked(stack: &gtk::Stack, pd: &Podcast, unsub_button: &gtk::Button) {
let res = dbqueries::remove_feed(pd);
if res.is_ok() {
@ -154,6 +165,7 @@ fn show_played_button(pd: &Podcast, played_button: &gtk::Button) {
}
}
// Note: Stack manipulation
pub fn setup_podcast_widget(stack: &gtk::Stack) {
let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/podcast_widget.ui");
let pd_widget: gtk::Box = builder.get_object("podcast_widget").unwrap();
@ -161,6 +173,7 @@ pub fn setup_podcast_widget(stack: &gtk::Stack) {
stack.add_named(&pd_widget, "pdw");
}
// Note: Stack manipulation
pub fn update_podcast_widget(stack: &gtk::Stack, pd: &Podcast) {
let old = stack.get_child_by_name("pdw").unwrap();
let pdw = podcast_widget(stack, pd);