Remove old implementation.

This commit is contained in:
Jordan Petridis 2017-12-01 02:57:55 +02:00
parent b4b2f24c77
commit 326ee75cd8
No known key found for this signature in database
GPG Key ID: CEABAD9F5683B9A6
6 changed files with 50 additions and 133 deletions

38
hammond-gtk/src/app.rs Normal file
View File

@ -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,
}
}
}

View File

@ -4,8 +4,7 @@ use gtk::prelude::*;
// use diesel::Identifiable; // use diesel::Identifiable;
// use hammond_data::dbqueries; use hammond_data::Podcast;
// use hammond_data::Podcast;
use widgets::podcast::PodcastWidget; use widgets::podcast::PodcastWidget;
use views::podcasts::PopulatedView; use views::podcasts::PopulatedView;
@ -16,7 +15,7 @@ pub struct Content {
pub stack: gtk::Stack, pub stack: gtk::Stack,
pub state: ContentState, pub state: ContentState,
widget: PodcastWidget, widget: PodcastWidget,
podcasts: PopulatedView, pub podcasts: PopulatedView,
empty: EmptyView, empty: EmptyView,
} }

View File

@ -75,49 +75,6 @@ impl Header {
} }
} }
pub fn get_headerbar(stack: &gtk::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: &gtk::Stack, entry: &gtk::Entry) { fn on_add_bttn_clicked(stack: &gtk::Stack, entry: &gtk::Entry) {
let url = entry.get_text().unwrap_or_default(); let url = entry.get_text().unwrap_or_default();
let url = url_cleaner(&url); let url = url_cleaner(&url);

View File

@ -1,5 +1,3 @@
#![allow(dead_code)]
extern crate gdk; extern crate gdk;
extern crate gdk_pixbuf; extern crate gdk_pixbuf;
extern crate gio; extern crate gio;
@ -67,8 +65,8 @@ fn build_ui(app: &gtk::Application) {
window.set_default_size(1150, 650); window.set_default_size(1150, 650);
// Setup the Stack that will manage the switch between podcasts_view and podcast_widget. // Setup the Stack that will manage the switch between podcasts_view and podcast_widget.
// let stack = podcasts::setup_stack(); // let stack = podcasts::setup_stack();
let content = content::Content::new(); let ct = content::Content::new();
let stack = content.stack.clone(); let stack = ct.stack.clone();
window.add(&stack); window.add(&stack);
window.connect_delete_event(|w, _| { window.connect_delete_event(|w, _| {
@ -103,8 +101,6 @@ fn build_ui(app: &gtk::Application) {
}); });
// Get the headerbar // Get the headerbar
// let header = headerbar::get_headerbar(&stack);
// window.set_titlebar(&header);
let header = headerbar::Header::new_initialized(&stack); let header = headerbar::Header::new_initialized(&stack);
window.set_titlebar(&header.container); window.set_titlebar(&header.container);

View File

@ -12,7 +12,7 @@ use utils::get_pixbuf_from_path;
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct PopulatedView { pub struct PopulatedView {
pub container: gtk::Box, pub container: gtk::Box,
flowbox: gtk::FlowBox, pub flowbox: gtk::FlowBox,
viewport: gtk::Viewport, viewport: gtk::Viewport,
} }
@ -48,12 +48,6 @@ impl PopulatedView {
} }
} }
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();
stack.add_named(&view, "empty");
}
fn show_empty_view(stack: &gtk::Stack) { fn show_empty_view(stack: &gtk::Stack) {
stack.set_visible_child_name("empty"); stack.set_visible_child_name("empty");
@ -118,11 +112,12 @@ fn configure_banner(pd: &Podcast, banner: &gtk::Image, banner_title: &gtk::Label
fn on_flowbox_child_activate(stack: &gtk::Stack, parent: &Podcast) { fn on_flowbox_child_activate(stack: &gtk::Stack, parent: &Podcast) {
let old = stack.get_child_by_name("pdw").unwrap(); 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.remove(&old);
stack.add_named(&pdw, "pdw"); stack.add_named(&pdw.container, "pdw");
stack.set_visible_child(&pdw); stack.set_visible_child_name("pdw");
// aggresive memory cleanup // aggresive memory cleanup
// probably not needed // probably not needed
@ -146,15 +141,6 @@ fn setup_podcasts_flowbox(stack: &gtk::Stack) -> gtk::FlowBox {
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: &gtk::Stack) { pub fn update_podcasts_view(stack: &gtk::Stack) {
let vis = stack.get_visible_child_name().unwrap(); let vis = stack.get_visible_child_name().unwrap();
let old = stack.get_child_by_name("fb_parent").unwrap(); let old = stack.get_child_by_name("fb_parent").unwrap();

View File

@ -86,48 +86,6 @@ impl PodcastWidget {
} }
} }
pub fn podcast_widget(stack: &gtk::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 // Note: Stack manipulation
fn on_unsub_button_clicked(stack: &gtk::Stack, pd: &Podcast, unsub_button: &gtk::Button) { fn on_unsub_button_clicked(stack: &gtk::Stack, pd: &Podcast, unsub_button: &gtk::Button) {
let res = dbqueries::remove_feed(pd); let res = dbqueries::remove_feed(pd);
@ -155,32 +113,15 @@ fn on_played_button_clicked(stack: &gtk::Stack, pd: &Podcast) {
update_podcast_widget(stack, pd); update_podcast_widget(stack, pd);
} }
fn show_played_button(pd: &Podcast, played_button: &gtk::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: &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();
stack.add_named(&pd_widget, "pdw");
}
// Note: Stack manipulation // Note: Stack manipulation
pub fn update_podcast_widget(stack: &gtk::Stack, pd: &Podcast) { pub fn update_podcast_widget(stack: &gtk::Stack, pd: &Podcast) {
let old = stack.get_child_by_name("pdw").unwrap(); 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(); let vis = stack.get_visible_child_name().unwrap();
stack.remove(&old); stack.remove(&old);
stack.add_named(&pdw, "pdw"); stack.add_named(&pdw.container, "pdw");
stack.set_visible_child_name(&vis); stack.set_visible_child_name(&vis);
old.destroy(); old.destroy();
} }