From 16d1408194ff3ddd7654ac2c10bb54b3cb2b81ab Mon Sep 17 00:00:00 2001 From: Elias Projahn Date: Wed, 11 Oct 2023 12:04:49 +0200 Subject: [PATCH] Make tiles selectable by mouse --- data/ui/home_page.blp | 5 +++++ src/home_page.rs | 25 ++++++++++++++++++++++++- src/tag_tile.rs | 4 ++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/data/ui/home_page.blp b/data/ui/home_page.blp index f401fca..e614adf 100644 --- a/data/ui/home_page.blp +++ b/data/ui/home_page.blp @@ -57,6 +57,7 @@ template $MusicusHomePage : Adw.NavigationPage { row-spacing: 12; homogeneous: true; selection-mode: none; + child-activated => $tile_selected() swapped; } Gtk.Label { @@ -73,6 +74,7 @@ template $MusicusHomePage : Adw.NavigationPage { row-spacing: 12; homogeneous: true; selection-mode: none; + child-activated => $tile_selected() swapped; } Gtk.Label { @@ -89,6 +91,7 @@ template $MusicusHomePage : Adw.NavigationPage { row-spacing: 12; homogeneous: true; selection-mode: none; + child-activated => $tile_selected() swapped; } Gtk.Label { @@ -105,6 +108,7 @@ template $MusicusHomePage : Adw.NavigationPage { row-spacing: 12; homogeneous: true; selection-mode: none; + child-activated => $tile_selected() swapped; } Gtk.Label { @@ -121,6 +125,7 @@ template $MusicusHomePage : Adw.NavigationPage { row-spacing: 12; homogeneous: true; selection-mode: none; + child-activated => $recording_selected() swapped; } } } diff --git a/src/home_page.rs b/src/home_page.rs index 725b89d..ddea96b 100644 --- a/src/home_page.rs +++ b/src/home_page.rs @@ -118,12 +118,13 @@ impl MusicusHomePage { fn select(&self, search_entry: &MusicusSearchEntry) { let imp = self.imp(); - let (composer, performer, ensemble, work) = { + let (composer, performer, ensemble, work, recording) = { ( imp.composers.borrow().first().cloned(), imp.performers.borrow().first().cloned(), imp.ensembles.borrow().first().cloned(), imp.works.borrow().first().cloned(), + imp.recordings.borrow().first().cloned(), ) }; @@ -135,9 +136,31 @@ impl MusicusHomePage { search_entry.add_tag(Tag::Ensemble(ensemble)); } else if let Some(work) = work { search_entry.add_tag(Tag::Work(work)); + } else if let Some(recording) = recording { + self.play_recording(&recording); } } + #[template_callback] + fn tile_selected(&self, tile: >k::FlowBoxChild, _: >k::FlowBox) { + self.imp() + .search_entry + .add_tag(tile.downcast_ref::().unwrap().tag().clone()) + } + + #[template_callback] + fn recording_selected(&self, tile: >k::FlowBoxChild, _: >k::FlowBox) { + self.play_recording( + tile.downcast_ref::() + .unwrap() + .recording(), + ); + } + + fn play_recording(&self, recording: &Recording) { + log::info!("Play recording: {:?}", recording) + } + fn query(&self, query: &LibraryQuery) { let imp = self.imp(); let results = self.library().query(query); diff --git a/src/tag_tile.rs b/src/tag_tile.rs index b17d855..a5d8a11 100644 --- a/src/tag_tile.rs +++ b/src/tag_tile.rs @@ -64,4 +64,8 @@ impl MusicusTagTile { obj } + + pub fn tag(&self) -> &Tag { + self.imp().tag.get().unwrap() + } }