From 3d5e2c312110313d197f8887a2e8b61adc635c7b Mon Sep 17 00:00:00 2001 From: Erik Kundt Date: Mon, 15 Jan 2024 11:19:11 +0100 Subject: [PATCH] lib: UI improvements --- bin/commands/patch/select/ui.rs | 22 +++++------ src/ui/cob.rs | 70 +++++++++++++++++++++------------ src/ui/theme.rs | 43 ++++++-------------- src/ui/widget/label.rs | 6 ++- src/ui/widget/list.rs | 13 +++++- 5 files changed, 83 insertions(+), 71 deletions(-) diff --git a/bin/commands/patch/select/ui.rs b/bin/commands/patch/select/ui.rs index f0892590..6da37fbb 100644 --- a/bin/commands/patch/select/ui.rs +++ b/bin/commands/patch/select/ui.rs @@ -48,24 +48,24 @@ pub fn browse_context(context: &Context, _theme: &Theme, progress: Progress) -> } } - let context = label::badge(" Patches "); - let divider = label::default_reversed(" | "); + let context = label::default(""); + let divider = label::default(" | "); - let draft_n = label::default(&format!("{draft}")).style(style::gray_default_reversed()); - let draft = label::default_reversed(" Draft"); + let draft_n = label::default(&format!("{draft}")).style(style::gray_dim()); + let draft = label::default(" Draft"); - let open_n = label::default(&format!("{open}")).style(style::green_default_reversed()); - let open = label::default_reversed(" Open"); + let open_n = label::default(&format!("{open}")).style(style::green()); + let open = label::default(" Open"); - let archived_n = label::default(&format!("{archived}")).style(style::yellow_default_reversed()); - let archived = label::default_reversed(" Archived"); + let archived_n = label::default(&format!("{archived}")).style(style::yellow()); + let archived = label::default(" Archived"); - let merged_n = label::default(&format!("{merged}")).style(style::cyan_default_reversed()); - let merged = label::default_reversed(" Merged "); + let merged_n = label::default(&format!("{merged}")).style(style::cyan()); + let merged = label::default(" Merged "); let progress = label::default(&format!(" {} ", progress.to_string())).style(style::magenta_reversed()); - let spacer = label::default_reversed(""); + let spacer = label::default(""); let context_bar = ContextBar::new( label::group(&[context]), diff --git a/src/ui/cob.rs b/src/ui/cob.rs index 73bd2981..55303bbb 100644 --- a/src/ui/cob.rs +++ b/src/ui/cob.rs @@ -144,36 +144,56 @@ impl TryFrom<(&Profile, &Repository, PatchId, Patch)> for PatchItem { } impl TableItem<8> for PatchItem { - fn row(&self, _theme: &Theme) -> [Cell; 8] { + fn row(&self, _theme: &Theme, highlight: bool) -> [Cell; 8] { let (icon, color) = format_patch_state(&self.state); - let state = label::default(&icon) - .style(Style::default().fg(color)) + if highlight { + let state = label::reversed(&icon).into(); + let id = label::reversed(&format::cob(&self.id)).into(); + let title = label::reversed(&self.title.clone()).into(); + + let author = label::reversed(&format_author( + &self.author.did, + &self.author.alias, + self.author.is_you, + )) .into(); - let id = label::id(&format::cob(&self.id)).into(); - let title = label::default(&self.title.clone()).into(); - let author = match &self.author.alias { - Some(_) => label::alias(&format_author( - &self.author.did, - &self.author.alias, - self.author.is_you, - )) - .into(), - None => label::did(&format_author( - &self.author.did, - &self.author.alias, - self.author.is_you, - )) - .into(), - }; + let head = label::reversed(&format::oid(self.head)).into(); + let added = label::reversed(&format!("+{}", self.added)).into(); + let removed = label::reversed(&format!("-{}", self.removed)).into(); + let updated = label::reversed(&format::timestamp(&self.timestamp)).into(); - let head = label::oid(&format::oid(self.head)).into(); - let added = label::positive(&format!("+{}", self.added)).into(); - let removed = label::negative(&format!("-{}", self.removed)).into(); - let updated = label::timestamp(&format::timestamp(&self.timestamp)).into(); + [state, id, title, author, head, added, removed, updated] + } else { + let state = label::default(&icon) + .style(Style::default().fg(color)) + .into(); + let id = label::id(&format::cob(&self.id)).into(); + let title = label::default(&self.title.clone()).into(); - [state, id, title, author, head, added, removed, updated] + let author = match &self.author.alias { + Some(_) => label::alias(&format_author( + &self.author.did, + &self.author.alias, + self.author.is_you, + )) + .into(), + None => label::did(&format_author( + &self.author.did, + &self.author.alias, + self.author.is_you, + )) + .into(), + }; + + let head = label::oid(&format::oid(self.head)).into(); + let added = label::positive(&format!("+{}", self.added)).into(); + let removed = label::negative(&format!("-{}", self.removed)).into(); + let updated = label::timestamp(&format::timestamp(&self.timestamp)).into(); + + [state, id, title, author, head, added, removed, updated] + } } } @@ -258,7 +278,7 @@ impl From<(&Profile, &Repository, IssueId, Issue)> for IssueItem { } impl TableItem<7> for IssueItem { - fn row(&self, _theme: &Theme) -> [Cell; 7] { + fn row(&self, _theme: &Theme, _highlight: bool) -> [Cell; 7] { let (icon, color) = format_issue_state(&self.state); let state = label::default(&icon) diff --git a/src/ui/theme.rs b/src/ui/theme.rs index 07c2e7db..0005eed7 100644 --- a/src/ui/theme.rs +++ b/src/ui/theme.rs @@ -102,49 +102,26 @@ pub mod style { Style::default().fg(Color::DarkGray) } + pub fn reversed() -> Style { + Style::default().add_modifier(TextModifiers::REVERSED) + } + pub fn default_reversed() -> Style { Style::default() - .fg(Color::Reset) - .bg(Color::DarkGray) .add_modifier(TextModifiers::DIM) + .add_modifier(TextModifiers::REVERSED) } pub fn magenta_reversed() -> Style { - Style::default().fg(Color::DarkGray).bg(Color::Magenta) + Style::default() + .fg(Color::Magenta) + .add_modifier(TextModifiers::REVERSED) } pub fn yellow_reversed() -> Style { Style::default().fg(Color::DarkGray).bg(Color::Yellow) } - pub fn green_default_reversed() -> Style { - Style::default() - .fg(Color::Green) - .bg(Color::DarkGray) - .add_modifier(TextModifiers::DIM) - } - - pub fn yellow_default_reversed() -> Style { - Style::default() - .fg(Color::Yellow) - .bg(Color::DarkGray) - .add_modifier(TextModifiers::DIM) - } - - pub fn cyan_default_reversed() -> Style { - Style::default() - .fg(Color::Cyan) - .bg(Color::DarkGray) - .add_modifier(TextModifiers::DIM) - } - - pub fn gray_default_reversed() -> Style { - Style::default() - .fg(Color::Gray) - .bg(Color::DarkGray) - .add_modifier(TextModifiers::DIM) - } - pub fn border(focus: bool) -> Style { if focus { gray_dim() @@ -154,6 +131,8 @@ pub mod style { } pub fn highlight() -> Style { - Style::default().bg(Color::DarkGray) + Style::default() + .fg(Color::Cyan) + .add_modifier(TextModifiers::REVERSED) } } diff --git a/src/ui/widget/label.rs b/src/ui/widget/label.rs index 8150a557..2bfcc16b 100644 --- a/src/ui/widget/label.rs +++ b/src/ui/widget/label.rs @@ -18,6 +18,10 @@ pub fn default(content: &str) -> Widget