From 969219c51d2462d2d37b449ef728693525e86e02 Mon Sep 17 00:00:00 2001 From: Erik Kundt Date: Thu, 20 Apr 2023 11:01:48 +0200 Subject: [PATCH] tui: Split widgets into separate modules --- radicle-tui/src/app.rs | 22 ++- radicle-tui/src/subs.rs | 17 +- radicle-tui/src/ui.rs | 281 ---------------------------- radicle-tui/src/ui/widget.rs | 4 + radicle-tui/src/ui/widget/common.rs | 106 +++++++++++ radicle-tui/src/ui/widget/home.rs | 103 ++++++++++ radicle-tui/src/ui/widget/patch.rs | 86 +++++++++ 7 files changed, 321 insertions(+), 298 deletions(-) create mode 100644 radicle-tui/src/ui/widget/common.rs create mode 100644 radicle-tui/src/ui/widget/home.rs create mode 100644 radicle-tui/src/ui/widget/patch.rs diff --git a/radicle-tui/src/app.rs b/radicle-tui/src/app.rs index 50cd5c12..3e390503 100644 --- a/radicle-tui/src/app.rs +++ b/radicle-tui/src/app.rs @@ -18,7 +18,7 @@ use radicle_tui::ui::components::workspace::{ }; use radicle_tui::ui::layout; use radicle_tui::ui::theme::{self, Theme}; -use radicle_tui::ui::widget::Widget; +use radicle_tui::ui::widget::{self, Widget}; use radicle_tui::Tui; @@ -135,7 +135,7 @@ impl Tui for App { self.mount_home_view(app, &self.theme.clone())?; // Add global key listener and subscribe to key events - let global = ui::global_listener().to_boxed(); + let global = ui::widget::common::global_listener().to_boxed(); app.mount(Cid::GlobalListener, global, subs::global())?; Ok(()) @@ -223,11 +223,12 @@ impl ViewPage for Home { context: &Context, theme: &Theme, ) -> Result<()> { - let navigation = ui::home_navigation(theme).to_boxed(); + let navigation = widget::home::navigation(theme).to_boxed(); - let dashboard = ui::dashboard(theme, &context.id, &context.project).to_boxed(); - let issue_browser = ui::issue_browser(theme).to_boxed(); - let patch_browser = ui::patch_browser(theme, &context.patches, &context.profile).to_boxed(); + let dashboard = widget::home::dashboard(theme, &context.id, &context.project).to_boxed(); + let issue_browser = widget::home::issues(theme).to_boxed(); + let patch_browser = + widget::home::patches(theme, &context.patches, &context.profile).to_boxed(); app.remount( Cid::Home(HomeCid::Navigation), @@ -291,9 +292,10 @@ impl ViewPage for PatchView { theme: &Theme, ) -> Result<()> { if let Some((id, patch)) = context.patches.get(context.selected_patch) { - let navigation = ui::patch_navigation(theme).to_boxed(); - let activity = ui::patch_activity(theme, (*id, patch), &context.profile).to_boxed(); - let files = ui::patch_files(theme, (*id, patch), &context.profile).to_boxed(); + let navigation = widget::patch::navigation(theme).to_boxed(); + let activity = + widget::patch::activity(theme, (*id, patch), &context.profile).to_boxed(); + let files = widget::patch::files(theme, (*id, patch), &context.profile).to_boxed(); app.remount( Cid::Patch(PatchCid::Navigation), @@ -338,11 +340,11 @@ impl ViewPage for PatchView { impl tuirealm::Component for Widget { fn on(&mut self, event: Event) -> Option { match event { + Event::WindowResize(_, _) => Some(Message::Tick), Event::Keyboard(KeyEvent { code: Key::Char('q'), .. }) => Some(Message::Quit), - Event::WindowResize(_, _) => Some(Message::Tick), _ => None, } } diff --git a/radicle-tui/src/subs.rs b/radicle-tui/src/subs.rs index 17823d92..df4e336e 100644 --- a/radicle-tui/src/subs.rs +++ b/radicle-tui/src/subs.rs @@ -22,11 +22,14 @@ where Id: Clone + Hash + Eq + PartialEq, UserEvent: Clone + Eq + PartialEq + PartialOrd, { - vec![Sub::new( - SubEventClause::Keyboard(KeyEvent { - code: Key::Char('q'), - modifiers: KeyModifiers::NONE, - }), - SubClause::Always, - )] + vec![ + Sub::new( + SubEventClause::Keyboard(KeyEvent { + code: Key::Char('q'), + modifiers: KeyModifiers::NONE, + }), + SubClause::Always, + ), + Sub::new(SubEventClause::WindowResize, SubClause::Always), + ] } diff --git a/radicle-tui/src/ui.rs b/radicle-tui/src/ui.rs index 6f89cb01..35861e75 100644 --- a/radicle-tui/src/ui.rs +++ b/radicle-tui/src/ui.rs @@ -4,284 +4,3 @@ pub mod layout; pub mod state; pub mod theme; pub mod widget; - -use radicle::prelude::{Id, Project}; -use radicle::Profile; -use tuirealm::props::{AttrValue, Attribute, Color, PropPayload, PropValue, TextSpan}; -use tuirealm::MockComponent; - -use radicle::cob::patch::{Patch, PatchId}; - -use components::container::{GlobalListener, LabeledContainer, Tabs}; -use components::context::{Shortcut, Shortcuts}; -use components::label::Label; -use components::list::{Property, PropertyList}; - -use widget::Widget; - -use self::cob::patch; -use self::components::context::ContextBar; -use self::components::list::{List, Table}; -use self::components::workspace::{Browser, Dashboard, IssueBrowser, PatchActivity, PatchFiles}; -use self::theme::Theme; - -pub fn global_listener() -> Widget { - Widget::new(GlobalListener::default()) -} - -pub fn label(content: &str) -> Widget