Fixed #1. Though it's an ugly hack for now.

This commit is contained in:
Jordan Petridis 2017-11-04 17:57:50 +02:00
parent 456134ab41
commit a31dc069de
No known key found for this signature in database
GPG Key ID: CEABAD9F5683B9A6
6 changed files with 33 additions and 12 deletions

View File

@ -29,7 +29,7 @@
**FIXME:**
- [ ] Fix Flowbox child activation. [#1](https://gitlab.gnome.org/alatiera/Hammond/issues/1)
- [x] Fix Flowbox child activation. [#1](https://gitlab.gnome.org/alatiera/Hammond/issues/1)
- [ ] Fix Etag/Last-modified implementation. [#2](https://gitlab.gnome.org/alatiera/Hammond/issues/2)

View File

@ -73,9 +73,9 @@ pub fn get_episodes_with_limit(con: &SqliteConnection, limit: u32) -> QueryResul
eps
}
pub fn get_podcast(con: &SqliteConnection, parent: &Source) -> QueryResult<Vec<Podcast>> {
let pd = Podcast::belonging_to(parent).load::<Podcast>(con);
// debug!("Returned Podcasts:\n{:?}", pds);
pub fn get_podcast_from_id(con: &SqliteConnection, pid: i32) -> QueryResult<Podcast> {
use schema::podcast::dsl::*;
let pd = podcast.filter(id.eq(pid)).get_result::<Podcast>(con);
pd
}

View File

@ -31,7 +31,8 @@
<property name="homogeneous">True</property>
<property name="column_spacing">5</property>
<property name="row_spacing">5</property>
<property name="max_children_per_line">25</property>
<property name="max_children_per_line">20</property>
<property name="selection_mode">none</property>
</object>
</child>
</object>

View File

@ -74,6 +74,20 @@ fn build_ui(app: &gtk::Application) {
Inhibit(false)
});
// let builder = gtk::Builder::new_from_string(include_str!("../gtk/foo.glade"));
// let boxx: gtk::Box = builder.get_object("box").unwrap();
// let child: gtk::Box = builder.get_object("child").unwrap();
// let flowbox: gtk::FlowBox = builder.get_object("flowbox").unwrap();
// window.add(&boxx);
// let fbc = gtk::FlowBoxChild::new();
// fbc.add(&child);
// flowbox.connect_child_activated(move |_, f| {
// println!("Hello world");
// println!("child activated: {:?}", f);
// });
// flowbox.add(&fbc);
// Setup quit in the app menu since default is overwritten.
let quit = gio::SimpleAction::new("quit", None);
let window2 = window.clone();
@ -97,7 +111,6 @@ fn build_ui(app: &gtk::Application) {
// Get the headerbar
let header = headerbar::get_headerbar(&db, &stack);
window.set_titlebar(&header);
window.show_all();

View File

@ -24,10 +24,6 @@ fn populate_flowbox(db: &Database, stack: &gtk::Stack, flowbox: &gtk::FlowBox) {
if let Ok(pds) = podcasts {
pds.iter().for_each(|parent| {
let f = create_flowbox_child(db, parent);
f.connect_activate(clone!(db, stack, parent => move |_| {
on_flowbox_child_activate(&db, &stack, &parent);
}));
flowbox.add(&f);
});
} else {
@ -50,8 +46,18 @@ fn setup_podcasts_grid(db: &Database, stack: &gtk::Stack) {
stack.set_visible_child(&grid);
// Adapted copy of the way gnome-music does albumview
// FIXME: flowbox childs activate with space/enter but not with clicks.
let flowbox: gtk::FlowBox = builder.get_object("flowbox").unwrap();
// TODO: handle unwraps.
flowbox.connect_child_activated(clone!(db, stack => move |_, child| {
// This is such an ugly hack...
let id = child.get_name().unwrap().parse::<i32>().unwrap();
let parent = {
let tempdb = db.lock().unwrap();
dbqueries::get_podcast_from_id(&tempdb, id).unwrap()
};
on_flowbox_child_activate(&db, &stack, &parent);
}));
// Populate the flowbox with the Podcasts.
populate_flowbox(db, stack, &flowbox);
}

View File

@ -121,8 +121,9 @@ pub fn create_flowbox_child(db: &Database, pd: &Podcast) -> gtk::FlowBoxChild {
configure_banner(db, pd, &banner, &banner_title);
let fbc = gtk::FlowBoxChild::new();
// There's probably a better way to store the id somewhere.
fbc.set_name(&pd.id().to_string());
fbc.add(&box_);
// info!("flowbox child created");
fbc
}