Trying out storeless designt.
This commit is contained in:
parent
51f52c3408
commit
716806e0e9
@ -4,11 +4,14 @@ use gtk;
|
|||||||
use gtk::prelude::*;
|
use gtk::prelude::*;
|
||||||
|
|
||||||
use diesel::prelude::SqliteConnection;
|
use diesel::prelude::SqliteConnection;
|
||||||
|
use hammond_data::dbqueries;
|
||||||
|
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
|
|
||||||
use widgets::podcast::*;
|
use widgets::podcast::*;
|
||||||
|
|
||||||
|
// NOT IN USE.
|
||||||
|
// TRYING OUT STORELESS ATM.
|
||||||
pub fn populate_podcasts_flowbox(
|
pub fn populate_podcasts_flowbox(
|
||||||
db: Arc<Mutex<SqliteConnection>>,
|
db: Arc<Mutex<SqliteConnection>>,
|
||||||
stack: >k::Stack,
|
stack: >k::Stack,
|
||||||
@ -59,6 +62,7 @@ pub fn populate_podcasts_flowbox(
|
|||||||
stack_clone.remove(&old);
|
stack_clone.remove(&old);
|
||||||
stack_clone.add_named(&pdw, "pdw");
|
stack_clone.add_named(&pdw, "pdw");
|
||||||
stack_clone.set_visible_child(&pdw);
|
stack_clone.set_visible_child(&pdw);
|
||||||
|
old.destroy();
|
||||||
println!("Hello World!, child activated");
|
println!("Hello World!, child activated");
|
||||||
});
|
});
|
||||||
flowbox.add(&f);
|
flowbox.add(&f);
|
||||||
@ -70,6 +74,46 @@ pub fn populate_podcasts_flowbox(
|
|||||||
flowbox.show_all();
|
flowbox.show_all();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn show_empty_view(stack: >k::Stack) {
|
||||||
|
let builder = include_str!("../../gtk/empty_view.ui");
|
||||||
|
let builder = gtk::Builder::new_from_string(builder);
|
||||||
|
let view: gtk::Box = builder.get_object("empty_view").unwrap();
|
||||||
|
stack.add_named(&view, "empty");
|
||||||
|
stack.set_visible_child_name("empty");
|
||||||
|
|
||||||
|
info!("Empty view.");
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn pop_flowbox_no_store(
|
||||||
|
db: Arc<Mutex<SqliteConnection>>,
|
||||||
|
stack: >k::Stack,
|
||||||
|
flowbox: >k::FlowBox,
|
||||||
|
) {
|
||||||
|
let podcasts = {
|
||||||
|
let db = db.lock().unwrap();
|
||||||
|
dbqueries::get_podcasts(&db)
|
||||||
|
};
|
||||||
|
|
||||||
|
if let Ok(pds) = podcasts {
|
||||||
|
pds.iter().for_each(|parent| {
|
||||||
|
let title = parent.title();
|
||||||
|
let img = parent.image_uri();
|
||||||
|
let pixbuf = get_pixbuf_from_path(img, title);
|
||||||
|
let f = create_flowbox_child(title, pixbuf.clone());
|
||||||
|
|
||||||
|
let db = db.clone();
|
||||||
|
let stack = stack.clone();
|
||||||
|
let parent = parent.clone();
|
||||||
|
f.connect_activate(move |_| {
|
||||||
|
on_flowbox_child_activate(db.clone(), &stack, &parent, pixbuf.clone());
|
||||||
|
});
|
||||||
|
flowbox.add(&f);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
show_empty_view(&stack);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn setup_podcast_widget(db: Arc<Mutex<SqliteConnection>>, stack: >k::Stack) {
|
fn setup_podcast_widget(db: Arc<Mutex<SqliteConnection>>, stack: >k::Stack) {
|
||||||
let pd_widget = podcast_widget(db, None, None, None);
|
let pd_widget = podcast_widget(db, None, None, None);
|
||||||
stack.add_named(&pd_widget, "pdw");
|
stack.add_named(&pd_widget, "pdw");
|
||||||
@ -86,7 +130,8 @@ fn setup_podcasts_grid(db: Arc<Mutex<SqliteConnection>>, stack: >k::Stack) {
|
|||||||
// FIXME: flowbox childs activate with space/enter but not with clicks.
|
// FIXME: flowbox childs activate with space/enter but not with clicks.
|
||||||
let flowbox: gtk::FlowBox = builder.get_object("flowbox").unwrap();
|
let flowbox: gtk::FlowBox = builder.get_object("flowbox").unwrap();
|
||||||
// Populate the flowbox with the Podcasts.
|
// Populate the flowbox with the Podcasts.
|
||||||
populate_podcasts_flowbox(db, stack, &flowbox);
|
// populate_podcasts_flowbox(db, stack, &flowbox);
|
||||||
|
pop_flowbox_no_store(db, stack, &flowbox);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn setup_stack(db: Arc<Mutex<SqliteConnection>>) -> gtk::Stack {
|
pub fn setup_stack(db: Arc<Mutex<SqliteConnection>>) -> gtk::Stack {
|
||||||
@ -112,4 +157,5 @@ pub fn update_podcasts_view(db: Arc<Mutex<SqliteConnection>>, stack: >k::Stack
|
|||||||
stack.add_named(&grid, "pd_grid");
|
stack.add_named(&grid, "pd_grid");
|
||||||
// preserve the visible widget
|
// preserve the visible widget
|
||||||
stack.set_visible_child_name(&vis);
|
stack.set_visible_child_name(&vis);
|
||||||
|
old.destroy();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -72,7 +72,24 @@ pub fn create_flowbox_child(title: &str, cover: Option<Pixbuf>) -> gtk::FlowBoxC
|
|||||||
fbc
|
fbc
|
||||||
}
|
}
|
||||||
|
|
||||||
// Figure if its better to completly ditch stores and just create the views from diesel models.
|
pub fn on_flowbox_child_activate(
|
||||||
|
db: Arc<Mutex<SqliteConnection>>,
|
||||||
|
stack: >k::Stack,
|
||||||
|
parent: &Podcast,
|
||||||
|
pixbuf: Option<Pixbuf>,
|
||||||
|
) {
|
||||||
|
let old = stack.get_child_by_name("pdw").unwrap();
|
||||||
|
let pdw = podcast_widget(db, Some(parent.title()), Some(parent.description()), pixbuf);
|
||||||
|
|
||||||
|
stack.remove(&old);
|
||||||
|
stack.add_named(&pdw, "pdw");
|
||||||
|
stack.set_visible_child(&pdw);
|
||||||
|
old.destroy();
|
||||||
|
println!("Hello World!, child activated");
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOT IN USE.
|
||||||
|
// TRYING OUT STORELESS ATM.
|
||||||
pub fn podcast_liststore(connection: &SqliteConnection) -> gtk::ListStore {
|
pub fn podcast_liststore(connection: &SqliteConnection) -> gtk::ListStore {
|
||||||
let builder = include_str!("../../gtk/podcast_widget.ui");
|
let builder = include_str!("../../gtk/podcast_widget.ui");
|
||||||
let builder = gtk::Builder::new_from_string(builder);
|
let builder = gtk::Builder::new_from_string(builder);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user