From 3a7cef8ceafd66d6f5b0057d64e950e30dc39f6e Mon Sep 17 00:00:00 2001 From: Erik Kundt Date: Fri, 9 Jun 2023 09:55:52 +0200 Subject: [PATCH] tui: Support container focus --- radicle-tui/src/app/page.rs | 18 +++--- radicle-tui/src/ui/theme.rs | 4 ++ radicle-tui/src/ui/widget/common.rs | 6 +- radicle-tui/src/ui/widget/common/container.rs | 56 +++++++++++++++---- radicle-tui/src/ui/widget/common/list.rs | 15 ++++- radicle-tui/src/ui/widget/home.rs | 14 ++++- radicle-tui/src/ui/widget/issue.rs | 7 ++- 7 files changed, 95 insertions(+), 25 deletions(-) diff --git a/radicle-tui/src/app/page.rs b/radicle-tui/src/app/page.rs index c21603da..7f4ddf8e 100644 --- a/radicle-tui/src/app/page.rs +++ b/radicle-tui/src/app/page.rs @@ -111,8 +111,8 @@ impl ViewPage for HomeView { ) -> Result<()> { if let Message::NavigationChanged(index) = message { self.active_component = Cid::Home(HomeCid::from(index as usize)); + app.active(&self.active_component)?; } - app.active(&self.active_component)?; Ok(()) } @@ -148,16 +148,12 @@ impl ViewPage for HomeView { /// Issue detail page /// pub struct IssuePage { - active_component: Cid, issue: (IssueId, Issue), } impl IssuePage { pub fn new(issue: (IssueId, Issue)) -> Self { - IssuePage { - active_component: Cid::Issue(IssueCid::List), - issue, - } + IssuePage { issue } } } @@ -186,7 +182,7 @@ impl ViewPage for IssuePage { app.remount(Cid::Issue(IssueCid::Details), details, vec![])?; app.remount(Cid::Issue(IssueCid::Shortcuts), shortcuts, vec![])?; - app.active(&self.active_component)?; + app.active(&Cid::Issue(IssueCid::List))?; Ok(()) } @@ -212,8 +208,14 @@ impl ViewPage for IssuePage { let details = widget::issue::details(context, theme, (id, issue)).to_boxed(); app.remount(Cid::Issue(IssueCid::Details), details, vec![])?; } + Message::Issue(IssueMessage::FocusList) => { + app.active(&Cid::Issue(IssueCid::List))?; + } + Message::Issue(IssueMessage::FocusDiscussion) => { + app.active(&Cid::Issue(IssueCid::Discussion))?; + } + _ => {} } - app.active(&self.active_component)?; Ok(()) } diff --git a/radicle-tui/src/ui/theme.rs b/radicle-tui/src/ui/theme.rs index d4f84072..53e4c307 100644 --- a/radicle-tui/src/ui/theme.rs +++ b/radicle-tui/src/ui/theme.rs @@ -36,6 +36,8 @@ pub struct Colors { pub context_id_fg: Color, pub context_id_bg: Color, pub context_id_author_fg: Color, + pub container_border_fg: Color, + pub container_border_focus_fg: Color, } #[derive(Debug, Clone)] @@ -105,6 +107,8 @@ pub fn default_dark() -> Theme { context_id_fg: Color::Cyan, context_id_bg: COLOR_DEFAULT_DARKEST, context_id_author_fg: Color::Gray, + container_border_fg: COLOR_DEFAULT_DARKEST, + container_border_focus_fg: COLOR_DEFAULT_DARK, }, icons: Icons { property_divider: '∙', diff --git a/radicle-tui/src/ui/widget/common.rs b/radicle-tui/src/ui/widget/common.rs index d5b5eaf0..c5fcd6c1 100644 --- a/radicle-tui/src/ui/widget/common.rs +++ b/radicle-tui/src/ui/widget/common.rs @@ -45,8 +45,8 @@ pub fn container_header(theme: &Theme, label: Widget