From 77e5de562d75b9925705d58f9901688ac31467d0 Mon Sep 17 00:00:00 2001 From: Moshe Sherman Date: Mon, 28 Sep 2020 23:28:10 +0300 Subject: [PATCH] Display album name for playable objects (#268) * display album name * give proper name to the space key fixes #266 * use 50% for center offset Co-authored-by: Henrik Friedrichsen --- src/album.rs | 4 ++++ src/artist.rs | 4 ++++ src/episode.rs | 4 ++++ src/playable.rs | 4 ++++ src/playlist.rs | 4 ++++ src/show.rs | 4 ++++ src/track.rs | 4 ++++ src/traits.rs | 1 + src/ui/listview.rs | 20 ++++++++++++++++++-- 9 files changed, 47 insertions(+), 2 deletions(-) diff --git a/src/album.rs b/src/album.rs index 64d2fd3..0e4e7f9 100644 --- a/src/album.rs +++ b/src/album.rs @@ -159,6 +159,10 @@ impl ListItem for Album { format!("{}", self) } + fn display_center(&self) -> String { + "".to_string() + } + fn display_right(&self, library: Arc) -> String { let saved = if library.is_saved_album(self) { if library.use_nerdfont { diff --git a/src/artist.rs b/src/artist.rs index 2b28971..d9b259a 100644 --- a/src/artist.rs +++ b/src/artist.rs @@ -148,6 +148,10 @@ impl ListItem for Artist { format!("{}", self) } + fn display_center(&self) -> String { + "".to_string() + } + fn display_right(&self, library: Arc) -> String { let followed = if library.is_followed_artist(self) { if library.use_nerdfont { diff --git a/src/episode.rs b/src/episode.rs index 9936e62..946442a 100644 --- a/src/episode.rs +++ b/src/episode.rs @@ -71,6 +71,10 @@ impl ListItem for Episode { self.name.clone() } + fn display_center(&self) -> String { + "".to_string() + } + fn display_right(&self, _library: Arc) -> String { format!("{} [{}]", self.duration_str(), self.release_date) } diff --git a/src/playable.rs b/src/playable.rs index c1560fd..a92981f 100644 --- a/src/playable.rs +++ b/src/playable.rs @@ -76,6 +76,10 @@ impl ListItem for Playable { self.as_listitem().display_left() } + fn display_center(&self) -> String { + self.as_listitem().display_center() + } + fn display_right(&self, library: Arc) -> String { self.as_listitem().display_right(library) } diff --git a/src/playlist.rs b/src/playlist.rs index fae8b3d..d3f6e61 100644 --- a/src/playlist.rs +++ b/src/playlist.rs @@ -128,6 +128,10 @@ impl ListItem for Playlist { self.name.clone() } + fn display_center(&self) -> String { + "".to_string() + } + fn display_right(&self, library: Arc) -> String { let saved = if library.is_saved_playlist(self) { if library.use_nerdfont { diff --git a/src/show.rs b/src/show.rs index ad63b16..e9b2f77 100644 --- a/src/show.rs +++ b/src/show.rs @@ -92,6 +92,10 @@ impl ListItem for Show { format!("{}", self) } + fn display_center(&self) -> String { + "".to_string() + } + fn display_right(&self, library: Arc) -> String { let saved = if library.is_saved_show(self) { if library.use_nerdfont { diff --git a/src/track.rs b/src/track.rs index f23b50a..112ae58 100644 --- a/src/track.rs +++ b/src/track.rs @@ -153,6 +153,10 @@ impl ListItem for Track { format!("{}", self) } + fn display_center(&self) -> String { + format!("{}", self.album) + } + fn display_right(&self, library: Arc) -> String { let saved = if library.is_saved_track(&Playable::Track(self.clone())) { if library.use_nerdfont { diff --git a/src/traits.rs b/src/traits.rs index 5a6ed3e..2b4f788 100644 --- a/src/traits.rs +++ b/src/traits.rs @@ -15,6 +15,7 @@ use crate::track::Track; pub trait ListItem: Sync + Send + 'static { fn is_playing(&self, queue: Arc) -> bool; fn display_left(&self) -> String; + fn display_center(&self) -> String; fn display_right(&self, library: Arc) -> String; fn play(&mut self, queue: Arc); fn queue(&mut self, queue: Arc); diff --git a/src/ui/listview.rs b/src/ui/listview.rs index 8fef3bb..dab3211 100644 --- a/src/ui/listview.rs +++ b/src/ui/listview.rs @@ -202,16 +202,19 @@ impl View for ListView { }; let left = item.display_left(); + let center = item.display_center(); let right = item.display_right(self.library.clone()); + let center_offset = printer.size.x / 2; + // draw left string printer.with_color(style, |printer| { printer.print_hline((0, 0), printer.size.x, " "); printer.print((0, 0), &left); }); - // draw ".." to indicate a cut off string - let max_length = printer.size.x.saturating_sub(right.width() + 1); + // left string cut off indicator + let max_length = center_offset.saturating_sub(1); if max_length < left.width() { let offset = max_length.saturating_sub(1); printer.with_color(style, |printer| { @@ -219,6 +222,19 @@ impl View for ListView { }); } + printer.with_color(style, |printer| { + printer.print((center_offset, 0), ¢er); + }); + + // center string cut off indicator + let max_length = printer.size.x.saturating_sub(right.width() + 1); + if max_length < center_offset + center.width() { + let offset = max_length.saturating_sub(1); + printer.with_color(style, |printer| { + printer.print((offset, 0), ".."); + }); + } + // draw right string let offset = HAlign::Right.get_offset(right.width(), printer.size.x);