diff --git a/src/model/album.rs b/src/model/album.rs index 37e5fc2..f683c71 100644 --- a/src/model/album.rs +++ b/src/model/album.rs @@ -277,7 +277,7 @@ impl ListItem for Album { queue.clone(), library.clone(), ) - .set_title(format!("Similar to Album \"{}\"", self.title)) + .with_title(&format!("Similar to Album \"{}\"", self.title)) .into_boxed_view_ext() }) } diff --git a/src/model/artist.rs b/src/model/artist.rs index 8028e64..8ef090c 100644 --- a/src/model/artist.rs +++ b/src/model/artist.rs @@ -191,7 +191,7 @@ impl ListItem for Artist { queue.clone(), library.clone(), ) - .set_title(format!("Similar to Artist \"{}\"", self.name,)) + .with_title(&format!("Similar to Artist \"{}\"", self.name)) .into_boxed_view_ext() }) } diff --git a/src/model/playlist.rs b/src/model/playlist.rs index 5519c2b..1951d86 100644 --- a/src/model/playlist.rs +++ b/src/model/playlist.rs @@ -312,7 +312,7 @@ impl ListItem for Playlist { queue.clone(), library.clone(), ) - .set_title(format!("Similar to Tracks in \"{}\"", self.name,)) + .with_title(&format!("Similar to Tracks in \"{}\"", self.name)) .into_boxed_view_ext() }) } diff --git a/src/model/track.rs b/src/model/track.rs index c646c70..3ed7e2f 100644 --- a/src/model/track.rs +++ b/src/model/track.rs @@ -295,7 +295,7 @@ impl ListItem for Track { queue.clone(), library.clone(), ) - .set_title(format!( + .with_title(&format!( "Similar to \"{} - {}\"", self.artists.join(", "), self.title diff --git a/src/ui/album.rs b/src/ui/album.rs index 9c1f43a..ac884f4 100644 --- a/src/ui/album.rs +++ b/src/ui/album.rs @@ -40,17 +40,16 @@ impl AlbumView { let tabs = TabView::new() .tab( "tracks", - "Tracks", ListView::new( Arc::new(RwLock::new(tracks)), queue.clone(), library.clone(), - ), + ) + .with_title("Tracks"), ) .tab( "artists", - "Artists", - ListView::new(Arc::new(RwLock::new(artists)), queue, library), + ListView::new(Arc::new(RwLock::new(artists)), queue, library).with_title("Artists"), ); Self { album, tabs } diff --git a/src/ui/artist.rs b/src/ui/artist.rs index c5f3689..95c3574 100644 --- a/src/ui/artist.rs +++ b/src/ui/artist.rs @@ -68,28 +68,26 @@ impl ArtistView { tabs.add_tab( "tracks", - "Saved Tracks", ListView::new( Arc::new(RwLock::new(tracks)), queue.clone(), library.clone(), - ), + ) + .with_title("Saved Tracks"), ); } tabs.add_tab( "top_tracks", - "Top 10", - ListView::new(top_tracks, queue.clone(), library.clone()), + ListView::new(top_tracks, queue.clone(), library.clone()).with_title("Top 10"), ); - tabs.add_tab("albums", "Albums", albums_view); - tabs.add_tab("singles", "Singles", singles_view); + tabs.add_tab("albums", albums_view.with_title("Albums")); + tabs.add_tab("singles", singles_view.with_title("Singles")); tabs.add_tab( "related", - "Related Artists", - ListView::new(related, queue, library), + ListView::new(related, queue, library).with_title("Related Artists"), ); Self { diff --git a/src/ui/library.rs b/src/ui/library.rs index 78e5392..250e7b6 100644 --- a/src/ui/library.rs +++ b/src/ui/library.rs @@ -33,28 +33,27 @@ impl LibraryView { match tab { LibraryTab::Tracks => tabview.add_tab( "tracks", - "Tracks", - ListView::new(library.tracks.clone(), queue.clone(), library.clone()), + ListView::new(library.tracks.clone(), queue.clone(), library.clone()) + .with_title("Tracks"), ), LibraryTab::Albums => tabview.add_tab( "albums", - "Albums", - ListView::new(library.albums.clone(), queue.clone(), library.clone()), + ListView::new(library.albums.clone(), queue.clone(), library.clone()) + .with_title("Albums"), ), LibraryTab::Artists => tabview.add_tab( "artists", - "Artists", - ListView::new(library.artists.clone(), queue.clone(), library.clone()), + ListView::new(library.artists.clone(), queue.clone(), library.clone()) + .with_title("Artists"), ), LibraryTab::Playlists => tabview.add_tab( "playlists", - "Playlists", PlaylistsView::new(queue.clone(), library.clone()), ), LibraryTab::Podcasts => tabview.add_tab( "podcasts", - "Podcasts", - ListView::new(library.shows.clone(), queue.clone(), library.clone()), + ListView::new(library.shows.clone(), queue.clone(), library.clone()) + .with_title("Podcasts"), ), } } diff --git a/src/ui/listview.rs b/src/ui/listview.rs index 41be635..fc18fbc 100644 --- a/src/ui/listview.rs +++ b/src/ui/listview.rs @@ -75,8 +75,8 @@ impl ListView { } } - pub fn set_title(mut self, title: String) -> Self { - self.title = title; + pub fn with_title(mut self, title: &str) -> Self { + self.title = title.to_string(); self } diff --git a/src/ui/playlists.rs b/src/ui/playlists.rs index 72529bd..f21afee 100644 --- a/src/ui/playlists.rs +++ b/src/ui/playlists.rs @@ -53,6 +53,10 @@ impl ViewWrapper for PlaylistsView { } impl ViewExt for PlaylistsView { + fn title(&self) -> String { + "Playlists".to_string() + } + fn on_command(&mut self, s: &mut Cursive, cmd: &Command) -> Result { if let Command::Delete = cmd { if let Some(dialog) = self.delete_dialog() { diff --git a/src/ui/search_results.rs b/src/ui/search_results.rs index ca692fa..c88d363 100644 --- a/src/ui/search_results.rs +++ b/src/ui/search_results.rs @@ -72,12 +72,12 @@ impl SearchResultsView { let pagination_episodes = list_episodes.get_pagination().clone(); let tabs = TabView::new() - .tab("tracks", "Tracks", list_tracks) - .tab("albums", "Albums", list_albums) - .tab("artists", "Artists", list_artists) - .tab("playlists", "Playlists", list_playlists) - .tab("shows", "Podcasts", list_shows) - .tab("episodes", "Podcast Episodes", list_episodes); + .tab("tracks", list_tracks.with_title("Tracks")) + .tab("albums", list_albums.with_title("Albums")) + .tab("artists", list_artists.with_title("Artists")) + .tab("playlists", list_playlists.with_title("Playlists")) + .tab("shows", list_shows.with_title("Podcasts")) + .tab("episodes", list_episodes.with_title("Podcast Episodes")); let mut view = SearchResultsView { search_term, diff --git a/src/ui/tabview.rs b/src/ui/tabview.rs index 6f666a1..37e74ea 100644 --- a/src/ui/tabview.rs +++ b/src/ui/tabview.rs @@ -13,7 +13,6 @@ use crate::commands::CommandResult; use crate::traits::{IntoBoxedViewExt, ViewExt}; pub struct Tab { - title: String, view: Box, } @@ -34,17 +33,16 @@ impl TabView { } } - pub fn add_tab, V: IntoBoxedViewExt>(&mut self, id: S, title: S, view: V) { + pub fn add_tab, V: IntoBoxedViewExt>(&mut self, id: S, view: V) { let tab = Tab { - title: title.into(), view: view.into_boxed_view_ext(), }; self.tabs.push(tab); self.ids.insert(id.into(), self.tabs.len() - 1); } - pub fn tab, V: IntoBoxedViewExt>(mut self, id: S, title: S, view: V) -> Self { - self.add_tab(id, title, view); + pub fn tab, V: IntoBoxedViewExt>(mut self, id: S, view: V) -> Self { + self.add_tab(id, view); self } @@ -81,11 +79,12 @@ impl View for TabView { width += printer.size.x % self.tabs.len(); } - let offset = HAlign::Center.get_offset(tab.title.width(), width); + let title = tab.view.title(); + let offset = HAlign::Center.get_offset(title.width(), width); printer.with_color(style, |printer| { printer.print_hline((i * tabwidth, 0), width, " "); - printer.print((i * tabwidth + offset, 0), &tab.title); + printer.print((i * tabwidth + offset, 0), &title); }); }