From 326ee75cd8c56b4a1850f794452191d0b7edd5cd Mon Sep 17 00:00:00 2001 From: Jordan Petridis Date: Fri, 1 Dec 2017 02:57:55 +0200 Subject: [PATCH] Remove old implementation. --- hammond-gtk/src/app.rs | 38 +++++++++++++++++ hammond-gtk/src/content.rs | 5 +-- hammond-gtk/src/headerbar.rs | 43 -------------------- hammond-gtk/src/main.rs | 8 +--- hammond-gtk/src/views/podcasts.rs | 24 +++-------- hammond-gtk/src/widgets/podcast.rs | 65 ++---------------------------- 6 files changed, 50 insertions(+), 133 deletions(-) create mode 100644 hammond-gtk/src/app.rs diff --git a/hammond-gtk/src/app.rs b/hammond-gtk/src/app.rs new file mode 100644 index 0000000..eab786a --- /dev/null +++ b/hammond-gtk/src/app.rs @@ -0,0 +1,38 @@ +use gtk::prelude::*; +use gtk::{Window, WindowType}; + +use headerbar::Header; +use content::Content; + +#[derive(Debug)] +pub struct App<'a> { + window: Window, + header: Header, + content: Content<'a>, +} + +impl <'a>App<'a> { + pub fn new() -> App<'a> { + let window = Window::new(WindowType::Toplevel); + let content = Content::new(); + let header = Header::new(content.stack.clone()); + + window.set_default_size(1150, 650); + window.connect_delete_event(|w, _| { + w.destroy(); + Inhibit(false) + }); + + window.set_titlebar(&header.container); + window.add(&content.stack); + + window.show_all(); + window.activate(); + + App { + window, + header, + content, + } + } +} diff --git a/hammond-gtk/src/content.rs b/hammond-gtk/src/content.rs index 05eefb4..cb492c7 100644 --- a/hammond-gtk/src/content.rs +++ b/hammond-gtk/src/content.rs @@ -4,8 +4,7 @@ use gtk::prelude::*; // use diesel::Identifiable; -// use hammond_data::dbqueries; -// use hammond_data::Podcast; +use hammond_data::Podcast; use widgets::podcast::PodcastWidget; use views::podcasts::PopulatedView; @@ -16,7 +15,7 @@ pub struct Content { pub stack: gtk::Stack, pub state: ContentState, widget: PodcastWidget, - podcasts: PopulatedView, + pub podcasts: PopulatedView, empty: EmptyView, } diff --git a/hammond-gtk/src/headerbar.rs b/hammond-gtk/src/headerbar.rs index 56aa666..9675a3f 100644 --- a/hammond-gtk/src/headerbar.rs +++ b/hammond-gtk/src/headerbar.rs @@ -75,49 +75,6 @@ impl Header { } } -pub fn get_headerbar(stack: >k::Stack) -> gtk::HeaderBar { - let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/headerbar.ui"); - - let header: gtk::HeaderBar = builder.get_object("headerbar1").unwrap(); - let home_button: gtk::Button = builder.get_object("homebutton").unwrap(); - let refresh_button: gtk::Button = builder.get_object("refbutton").unwrap(); - - let add_toggle_button: gtk::MenuButton = builder.get_object("add-toggle-button").unwrap(); - let add_popover: gtk::Popover = builder.get_object("add-popover").unwrap(); - let new_url: gtk::Entry = builder.get_object("new-url").unwrap(); - let add_button: gtk::Button = builder.get_object("add-button").unwrap(); - // TODO: check if url exists in the db and lock the button - new_url.connect_changed(move |url| { - println!("{:?}", url.get_text()); - }); - - add_button.connect_clicked(clone!(stack, add_popover, new_url => move |_| { - on_add_bttn_clicked(&stack, &new_url); - - // TODO: lock the button instead of hiding and add notification of feed added. - // TODO: map the spinner - add_popover.hide(); - })); - add_toggle_button.set_popover(&add_popover); - - // TODO: make it a back arrow button, that will hide when appropriate, - // and add a StackSwitcher when more views are added. - home_button.connect_clicked(clone!(stack => move |_| { - let vis = stack.get_visible_child_name().unwrap(); - stack.set_visible_child_name("fb_parent"); - if vis != "pdw" { - update_podcasts_view(&stack); - } - })); - - // FIXME: There appears to be a memmory leak here. - refresh_button.connect_clicked(clone!(stack => move |_| { - utils::refresh_feed(&stack, None, None); - })); - - header -} - fn on_add_bttn_clicked(stack: >k::Stack, entry: >k::Entry) { let url = entry.get_text().unwrap_or_default(); let url = url_cleaner(&url); diff --git a/hammond-gtk/src/main.rs b/hammond-gtk/src/main.rs index fd0a024..ff4e601 100644 --- a/hammond-gtk/src/main.rs +++ b/hammond-gtk/src/main.rs @@ -1,5 +1,3 @@ -#![allow(dead_code)] - extern crate gdk; extern crate gdk_pixbuf; extern crate gio; @@ -67,8 +65,8 @@ fn build_ui(app: >k::Application) { window.set_default_size(1150, 650); // Setup the Stack that will manage the switch between podcasts_view and podcast_widget. // let stack = podcasts::setup_stack(); - let content = content::Content::new(); - let stack = content.stack.clone(); + let ct = content::Content::new(); + let stack = ct.stack.clone(); window.add(&stack); window.connect_delete_event(|w, _| { @@ -103,8 +101,6 @@ fn build_ui(app: >k::Application) { }); // Get the headerbar - // let header = headerbar::get_headerbar(&stack); - // window.set_titlebar(&header); let header = headerbar::Header::new_initialized(&stack); window.set_titlebar(&header.container); diff --git a/hammond-gtk/src/views/podcasts.rs b/hammond-gtk/src/views/podcasts.rs index fee922a..1690ef1 100644 --- a/hammond-gtk/src/views/podcasts.rs +++ b/hammond-gtk/src/views/podcasts.rs @@ -12,7 +12,7 @@ use utils::get_pixbuf_from_path; #[derive(Debug, Clone)] pub struct PopulatedView { pub container: gtk::Box, - flowbox: gtk::FlowBox, + pub flowbox: gtk::FlowBox, viewport: gtk::Viewport, } @@ -48,12 +48,6 @@ impl PopulatedView { } } -fn setup_empty_view(stack: >k::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(); - stack.add_named(&view, "empty"); -} - fn show_empty_view(stack: >k::Stack) { stack.set_visible_child_name("empty"); @@ -118,11 +112,12 @@ fn configure_banner(pd: &Podcast, banner: >k::Image, banner_title: >k::Label fn on_flowbox_child_activate(stack: >k::Stack, parent: &Podcast) { let old = stack.get_child_by_name("pdw").unwrap(); - let pdw = podcast_widget(stack, parent); + let pdw = PodcastWidget::new(); + pdw.init(stack, parent); stack.remove(&old); - stack.add_named(&pdw, "pdw"); - stack.set_visible_child(&pdw); + stack.add_named(&pdw.container, "pdw"); + stack.set_visible_child_name("pdw"); // aggresive memory cleanup // probably not needed @@ -146,15 +141,6 @@ fn setup_podcasts_flowbox(stack: >k::Stack) -> gtk::FlowBox { flowbox } -pub fn setup_stack() -> gtk::Stack { - let stack = gtk::Stack::new(); - stack.set_transition_type(gtk::StackTransitionType::SlideLeftRight); - setup_empty_view(&stack); - setup_podcast_widget(&stack); - setup_podcasts_flowbox(&stack); - stack -} - pub fn update_podcasts_view(stack: >k::Stack) { let vis = stack.get_visible_child_name().unwrap(); let old = stack.get_child_by_name("fb_parent").unwrap(); diff --git a/hammond-gtk/src/widgets/podcast.rs b/hammond-gtk/src/widgets/podcast.rs index 68a940e..dc8c458 100644 --- a/hammond-gtk/src/widgets/podcast.rs +++ b/hammond-gtk/src/widgets/podcast.rs @@ -86,48 +86,6 @@ impl PodcastWidget { } } -pub fn podcast_widget(stack: >k::Stack, pd: &Podcast) -> gtk::Box { - // Adapted from gnome-music AlbumWidget - 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(); - - let cover: gtk::Image = builder.get_object("cover").unwrap(); - let title_label: gtk::Label = builder.get_object("title_label").unwrap(); - let desc_text_view: gtk::TextView = builder.get_object("desc_text_view").unwrap(); - let view: gtk::Viewport = builder.get_object("view").unwrap(); - let unsub_button: gtk::Button = builder.get_object("unsub_button").unwrap(); - let played_button: gtk::Button = builder.get_object("mark_all_played_button").unwrap(); - - // TODO: should spawn a thread to avoid locking the UI probably. - unsub_button.connect_clicked(clone!(stack, pd => move |bttn| { - on_unsub_button_clicked(&stack, &pd, bttn); - })); - - title_label.set_text(pd.title()); - let listbox = episodes_listbox(pd); - if let Ok(l) = listbox { - view.add(&l); - } - - { - let buff = desc_text_view.get_buffer().unwrap(); - buff.set_text(pd.description()); - } - - let img = get_pixbuf_from_path(pd); - if let Some(i) = img { - cover.set_from_pixbuf(&i); - } - - played_button.connect_clicked(clone!(stack, pd => move |_| { - on_played_button_clicked(&stack, &pd); - })); - - show_played_button(pd, &played_button); - - pd_widget -} - // Note: Stack manipulation fn on_unsub_button_clicked(stack: >k::Stack, pd: &Podcast, unsub_button: >k::Button) { let res = dbqueries::remove_feed(pd); @@ -155,32 +113,15 @@ fn on_played_button_clicked(stack: >k::Stack, pd: &Podcast) { update_podcast_widget(stack, pd); } -fn show_played_button(pd: &Podcast, played_button: >k::Button) { - let new_episodes = dbqueries::get_pd_unplayed_episodes(pd); - - if let Ok(n) = new_episodes { - if !n.is_empty() { - played_button.show() - } - } -} - -// Note: Stack manipulation -pub fn setup_podcast_widget(stack: >k::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(); - - stack.add_named(&pd_widget, "pdw"); -} - // Note: Stack manipulation pub fn update_podcast_widget(stack: >k::Stack, pd: &Podcast) { let old = stack.get_child_by_name("pdw").unwrap(); - let pdw = podcast_widget(stack, pd); + let pdw = PodcastWidget::new(); + pdw.init(stack, pd); let vis = stack.get_visible_child_name().unwrap(); stack.remove(&old); - stack.add_named(&pdw, "pdw"); + stack.add_named(&pdw.container, "pdw"); stack.set_visible_child_name(&vis); old.destroy(); }