diff --git a/hammond-gtk/src/content.rs b/hammond-gtk/src/content.rs index c87f88f..adc4cb6 100644 --- a/hammond-gtk/src/content.rs +++ b/hammond-gtk/src/content.rs @@ -60,8 +60,8 @@ impl ShowStack { header: header.clone(), }); - let pop = ShowsPopulated::new_initialized(show.clone(), header); - let widget = ShowWidget::new(); + let pop = ShowsPopulated::new(show.clone(), header); + let widget = ShowWidget::default(); let empty = EmptyView::new(); show.stack.add_named(&pop.container, "podcasts"); @@ -90,7 +90,7 @@ impl ShowStack { let vis = self.stack.get_visible_child_name().unwrap(); let old = self.stack.get_child_by_name("podcasts").unwrap(); - let pop = ShowsPopulated::new(); + let pop = ShowsPopulated::default(); pop.init(Rc::new(self.clone()), self.header.clone()); self.stack.remove(&old); @@ -109,7 +109,7 @@ impl ShowStack { pub fn replace_widget(&self, pd: &Podcast) { let old = self.stack.get_child_by_name("widget").unwrap(); - let new = ShowWidget::new_initialized(Rc::new(self.clone()), self.header.clone(), pd); + let new = ShowWidget::new(Rc::new(self.clone()), self.header.clone(), pd); self.stack.remove(&old); self.stack.add_named(&new.container, "widget"); diff --git a/hammond-gtk/src/headerbar.rs b/hammond-gtk/src/headerbar.rs index d683591..057957e 100644 --- a/hammond-gtk/src/headerbar.rs +++ b/hammond-gtk/src/headerbar.rs @@ -19,8 +19,8 @@ pub struct Header { show_title: gtk::Label, } -impl Header { - pub fn new() -> Rc
{ +impl Default for Header { + fn default() -> Header { let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/headerbar.ui"); let header: gtk::HeaderBar = builder.get_object("headerbar").unwrap(); @@ -33,14 +33,23 @@ impl Header { switch.set_halign(gtk::Align::Center); switch.show(); - Rc::new(Header { + Header { container: header, refresh, add_toggle, switch, back_button, show_title, - }) + } + } +} + +impl Header { + #[allow(dead_code)] + pub fn new(content: Rc) -> Rc
{ + let h = Header::default(); + h.init(content); + Rc::new(h) } pub fn init(&self, content: Rc) { diff --git a/hammond-gtk/src/main.rs b/hammond-gtk/src/main.rs index ef03853..dbe6c3a 100644 --- a/hammond-gtk/src/main.rs +++ b/hammond-gtk/src/main.rs @@ -24,6 +24,7 @@ use hammond_data::utils::checkup; use gtk::prelude::*; use gio::{ActionMapExt, ApplicationExt, MenuExt, SimpleActionExt}; +use std::rc::Rc; // http://gtk-rs.org/tuto/closures #[macro_export] @@ -52,8 +53,6 @@ mod content; mod utils; mod static_resource; -// THIS IS STILL A PROTOTYPE. - fn build_ui(app: >k::Application) { let menu = gio::Menu::new(); menu.append("Quit", "app.quit"); @@ -64,14 +63,8 @@ fn build_ui(app: >k::Application) { let window = gtk::ApplicationWindow::new(app); window.set_default_size(1150, 650); - // TODO: this will blow horribly - // let ct = content::ContentState::new().unwrap(); - // let stack = ct.get_stack(); - - // let ct = content::Content::new_initialized(); - // Get the headerbar - let header = headerbar::Header::new(); + let header = Rc::new(headerbar::Header::default()); let ct = content::Content::new(header.clone()); header.init(ct.clone()); window.set_titlebar(&header.container); diff --git a/hammond-gtk/src/views/empty.rs b/hammond-gtk/src/views/empty.rs index 1c93da7..ad3d152 100644 --- a/hammond-gtk/src/views/empty.rs +++ b/hammond-gtk/src/views/empty.rs @@ -5,11 +5,17 @@ pub struct EmptyView { pub container: gtk::Box, } -impl EmptyView { - pub fn new() -> EmptyView { +impl Default for EmptyView { + fn default() -> Self { let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/empty_view.ui"); let view: gtk::Box = builder.get_object("empty_view").unwrap(); EmptyView { container: view } } } + +impl EmptyView { + pub fn new() -> EmptyView { + EmptyView::default() + } +} diff --git a/hammond-gtk/src/views/shows.rs b/hammond-gtk/src/views/shows.rs index 981469b..327a9b8 100644 --- a/hammond-gtk/src/views/shows.rs +++ b/hammond-gtk/src/views/shows.rs @@ -19,18 +19,8 @@ pub struct ShowsPopulated { viewport: gtk::Viewport, } -#[derive(Debug)] -struct ShowsChild { - container: gtk::Box, - title: gtk::Label, - cover: gtk::Image, - banner: gtk::Image, - number: gtk::Label, - child: gtk::FlowBoxChild, -} - -impl ShowsPopulated { - pub fn new() -> ShowsPopulated { +impl Default for ShowsPopulated { + fn default() -> Self { let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/shows_view.ui"); let container: gtk::Box = builder.get_object("fb_parent").unwrap(); let flowbox: gtk::FlowBox = builder.get_object("flowbox").unwrap(); @@ -42,10 +32,11 @@ impl ShowsPopulated { viewport, } } +} - #[allow(dead_code)] - pub fn new_initialized(show: Rc, header: Rc
) -> ShowsPopulated { - let pop = ShowsPopulated::new(); +impl ShowsPopulated { + pub fn new(show: Rc, header: Rc
) -> ShowsPopulated { + let pop = ShowsPopulated::default(); pop.init(show, header); pop } @@ -74,7 +65,7 @@ impl ShowsPopulated { if let Ok(pds) = podcasts { pds.iter().for_each(|parent| { - let flowbox_child = ShowsChild::new_initialized(parent); + let flowbox_child = ShowsChild::new(parent); self.flowbox.add(&flowbox_child.child); }); self.flowbox.show_all(); @@ -86,11 +77,20 @@ impl ShowsPopulated { } } -impl ShowsChild { - fn new() -> ShowsChild { +#[derive(Debug)] +struct ShowsChild { + container: gtk::Box, + title: gtk::Label, + cover: gtk::Image, + banner: gtk::Image, + number: gtk::Label, + child: gtk::FlowBoxChild, +} + +impl Default for ShowsChild { + fn default() -> Self { let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/shows_child.ui"); - // Copy of gnome-music AlbumWidget let container: gtk::Box = builder.get_object("fb_child").unwrap(); let title: gtk::Label = builder.get_object("pd_title").unwrap(); let cover: gtk::Image = builder.get_object("pd_cover").unwrap(); @@ -109,6 +109,15 @@ impl ShowsChild { child, } } +} + +impl ShowsChild { + pub fn new(pd: &Podcast) -> ShowsChild { + let child = ShowsChild::default(); + child.init(pd); + + child + } fn init(&self, pd: &Podcast) { self.title.set_text(pd.title()); @@ -122,13 +131,6 @@ impl ShowsChild { self.configure_banner(pd); } - pub fn new_initialized(pd: &Podcast) -> ShowsChild { - let child = ShowsChild::new(); - child.init(pd); - - child - } - fn configure_banner(&self, pd: &Podcast) { let bann = Pixbuf::new_from_resource_at_scale("/org/gnome/hammond/banner.png", 256, 256, true); diff --git a/hammond-gtk/src/widgets/episode.rs b/hammond-gtk/src/widgets/episode.rs index 11e2fbc..9a9c673 100644 --- a/hammond-gtk/src/widgets/episode.rs +++ b/hammond-gtk/src/widgets/episode.rs @@ -47,8 +47,8 @@ struct EpisodeWidget { progress_label: gtk::Label, } -impl EpisodeWidget { - fn new() -> EpisodeWidget { +impl Default for EpisodeWidget { + fn default() -> Self { let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/episode_widget.ui"); let container: gtk::Box = builder.get_object("episode_container").unwrap(); @@ -95,9 +95,11 @@ impl EpisodeWidget { progress_label, } } +} - pub fn new_initialized(episode: &mut EpisodeWidgetQuery, pd: &Podcast) -> EpisodeWidget { - let widget = EpisodeWidget::new(); +impl EpisodeWidget { + pub fn new(episode: &mut EpisodeWidgetQuery, pd: &Podcast) -> EpisodeWidget { + let widget = EpisodeWidget::default(); widget.init(episode, pd); widget } @@ -284,7 +286,7 @@ pub fn episodes_listbox(pd: &Podcast) -> Result { let list = gtk::ListBox::new(); episodes.into_iter().for_each(|mut ep| { - let widget = EpisodeWidget::new_initialized(&mut ep, pd); + let widget = EpisodeWidget::new(&mut ep, pd); list.add(&widget.container); let sep = gtk::Separator::new(gtk::Orientation::Vertical); diff --git a/hammond-gtk/src/widgets/show.rs b/hammond-gtk/src/widgets/show.rs index 308964c..c232661 100644 --- a/hammond-gtk/src/widgets/show.rs +++ b/hammond-gtk/src/widgets/show.rs @@ -28,8 +28,8 @@ pub struct ShowWidget { episodes: gtk::Frame, } -impl ShowWidget { - pub fn new() -> ShowWidget { +impl Default for ShowWidget { + fn default() -> Self { let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/show_widget.ui"); let container: gtk::Box = builder.get_object("container").unwrap(); let episodes: gtk::Frame = builder.get_object("episodes").unwrap(); @@ -54,9 +54,11 @@ impl ShowWidget { episodes, } } +} - pub fn new_initialized(shows: Rc, header: Rc
, pd: &Podcast) -> ShowWidget { - let pdw = ShowWidget::new(); +impl ShowWidget { + pub fn new(shows: Rc, header: Rc
, pd: &Podcast) -> ShowWidget { + let pdw = ShowWidget::default(); pdw.init(shows, header, pd); pdw }