From fed4e84dd7d7b3d1cca268bf53e801409a06a4a1 Mon Sep 17 00:00:00 2001 From: Erik Kundt Date: Thu, 20 Apr 2023 11:02:11 +0200 Subject: [PATCH] tui: Reorganize component modules --- radicle-tui/src/app/event.rs | 16 +- radicle-tui/src/ui/cob/patch.rs | 2 +- radicle-tui/src/ui/components.rs | 8 +- radicle-tui/src/ui/components/common.rs | 55 +++++ .../ui/components/{ => common}/container.rs | 2 +- .../src/ui/components/{ => common}/context.rs | 2 +- .../src/ui/components/{ => common}/label.rs | 0 .../src/ui/components/{ => common}/list.rs | 2 +- radicle-tui/src/ui/components/home.rs | 83 +++++++ radicle-tui/src/ui/components/patch.rs | 118 +++++++++ radicle-tui/src/ui/components/workspace.rs | 231 ------------------ radicle-tui/src/ui/widget/common.rs | 14 +- radicle-tui/src/ui/widget/home.rs | 5 +- radicle-tui/src/ui/widget/patch.rs | 18 +- 14 files changed, 288 insertions(+), 268 deletions(-) create mode 100644 radicle-tui/src/ui/components/common.rs rename radicle-tui/src/ui/components/{ => common}/container.rs (99%) rename radicle-tui/src/ui/components/{ => common}/context.rs (99%) rename radicle-tui/src/ui/components/{ => common}/label.rs (100%) rename radicle-tui/src/ui/components/{ => common}/list.rs (99%) create mode 100644 radicle-tui/src/ui/components/home.rs create mode 100644 radicle-tui/src/ui/components/patch.rs delete mode 100644 radicle-tui/src/ui/components/workspace.rs diff --git a/radicle-tui/src/app/event.rs b/radicle-tui/src/app/event.rs index 3fcf3bb7..41f29134 100644 --- a/radicle-tui/src/app/event.rs +++ b/radicle-tui/src/app/event.rs @@ -5,12 +5,12 @@ use tuirealm::command::{Cmd, CmdResult, Direction as MoveDirection}; use tuirealm::event::{Event, Key, KeyEvent}; use tuirealm::{MockComponent, NoUserEvent, State, StateValue}; -use radicle_tui::ui::components::container::{GlobalListener, LabeledContainer, Tabs}; -use radicle_tui::ui::components::context::{ContextBar, Shortcuts}; -use radicle_tui::ui::components::list::PropertyList; -use radicle_tui::ui::components::workspace::{ - Browser, Dashboard, IssueBrowser, PatchActivity, PatchFiles, -}; +use radicle_tui::ui::components::common::container::{GlobalListener, LabeledContainer, Tabs}; +use radicle_tui::ui::components::common::context::{ContextBar, Shortcuts}; +use radicle_tui::ui::components::common::list::PropertyList; +use radicle_tui::ui::components::common::Browser; +use radicle_tui::ui::components::home::{Dashboard, IssueBrowser}; +use radicle_tui::ui::components::patch; use radicle_tui::ui::widget::Widget; @@ -86,7 +86,7 @@ impl tuirealm::Component for Widget { } } -impl tuirealm::Component for Widget { +impl tuirealm::Component for Widget { fn on(&mut self, event: Event) -> Option { match event { Event::Keyboard(KeyEvent { code: Key::Esc, .. }) => { @@ -97,7 +97,7 @@ impl tuirealm::Component for Widget { } } -impl tuirealm::Component for Widget { +impl tuirealm::Component for Widget { fn on(&mut self, event: Event) -> Option { match event { Event::Keyboard(KeyEvent { code: Key::Esc, .. }) => { diff --git a/radicle-tui/src/ui/cob/patch.rs b/radicle-tui/src/ui/cob/patch.rs index 7d24aff6..c949c60b 100644 --- a/radicle-tui/src/ui/cob/patch.rs +++ b/radicle-tui/src/ui/cob/patch.rs @@ -7,7 +7,7 @@ use radicle::cob::patch::{Patch, PatchId}; use tuirealm::props::{Color, TextSpan}; -use crate::ui::components::list::List; +use crate::ui::components::common::list::List; use crate::ui::theme::Theme; pub fn format_status(_patch: &Patch) -> String { diff --git a/radicle-tui/src/ui/components.rs b/radicle-tui/src/ui/components.rs index deef1684..433f9306 100644 --- a/radicle-tui/src/ui/components.rs +++ b/radicle-tui/src/ui/components.rs @@ -1,5 +1,3 @@ -pub mod container; -pub mod context; -pub mod label; -pub mod list; -pub mod workspace; +pub mod common; +pub mod home; +pub mod patch; diff --git a/radicle-tui/src/ui/components/common.rs b/radicle-tui/src/ui/components/common.rs new file mode 100644 index 00000000..9f45ee5b --- /dev/null +++ b/radicle-tui/src/ui/components/common.rs @@ -0,0 +1,55 @@ +pub mod container; +pub mod context; +pub mod label; +pub mod list; + +use std::marker::PhantomData; + +use tuirealm::command::{Cmd, CmdResult}; +use tuirealm::props::Props; +use tuirealm::tui::layout::Rect; +use tuirealm::{AttrValue, Attribute, Frame, MockComponent, State}; + +use crate::ui::layout; +use crate::ui::widget::{Widget, WidgetComponent}; + +use context::Shortcuts; +use list::{List, Table}; + +pub struct Browser { + list: Widget, + shortcuts: Widget, + phantom: PhantomData, +} + +impl Browser { + pub fn new(list: Widget
, shortcuts: Widget) -> Self { + Self { + list, + shortcuts, + phantom: PhantomData, + } + } +} + +impl WidgetComponent for Browser { + fn view(&mut self, _properties: &Props, frame: &mut Frame, area: Rect) { + let shortcuts_h = self + .shortcuts + .query(Attribute::Height) + .unwrap_or(AttrValue::Size(0)) + .unwrap_size(); + let layout = layout::root_component(area, shortcuts_h); + + self.list.view(frame, layout[0]); + self.shortcuts.view(frame, layout[1]); + } + + fn state(&self) -> State { + State::None + } + + fn perform(&mut self, _properties: &Props, cmd: Cmd) -> CmdResult { + self.list.perform(cmd) + } +} diff --git a/radicle-tui/src/ui/components/container.rs b/radicle-tui/src/ui/components/common/container.rs similarity index 99% rename from radicle-tui/src/ui/components/container.rs rename to radicle-tui/src/ui/components/common/container.rs index 5cdec926..f19c991b 100644 --- a/radicle-tui/src/ui/components/container.rs +++ b/radicle-tui/src/ui/components/common/container.rs @@ -7,7 +7,7 @@ use tuirealm::tui::text::{Span, Spans}; use tuirealm::tui::widgets::Block; use tuirealm::{Frame, MockComponent, State, StateValue}; -use crate::ui::components::label::Label; +use crate::ui::components::common::label::Label; use crate::ui::layout; use crate::ui::state::TabState; use crate::ui::widget::{Widget, WidgetComponent}; diff --git a/radicle-tui/src/ui/components/context.rs b/radicle-tui/src/ui/components/common/context.rs similarity index 99% rename from radicle-tui/src/ui/components/context.rs rename to radicle-tui/src/ui/components/common/context.rs index 21d8b05c..9325e1ab 100644 --- a/radicle-tui/src/ui/components/context.rs +++ b/radicle-tui/src/ui/components/common/context.rs @@ -3,7 +3,7 @@ use tuirealm::props::{AttrValue, Attribute, Props}; use tuirealm::tui::layout::Rect; use tuirealm::{Frame, MockComponent, State}; -use crate::ui::components::label::Label; +use crate::ui::components::common::label::Label; use crate::ui::layout; use crate::ui::widget::{Widget, WidgetComponent}; diff --git a/radicle-tui/src/ui/components/label.rs b/radicle-tui/src/ui/components/common/label.rs similarity index 100% rename from radicle-tui/src/ui/components/label.rs rename to radicle-tui/src/ui/components/common/label.rs diff --git a/radicle-tui/src/ui/components/list.rs b/radicle-tui/src/ui/components/common/list.rs similarity index 99% rename from radicle-tui/src/ui/components/list.rs rename to radicle-tui/src/ui/components/common/list.rs index 38c5469d..04064b7f 100644 --- a/radicle-tui/src/ui/components/list.rs +++ b/radicle-tui/src/ui/components/common/list.rs @@ -7,7 +7,7 @@ use tuirealm::tui::layout::{Constraint, Rect}; use tuirealm::tui::widgets::{Cell, Row, TableState}; use tuirealm::{Frame, MockComponent, State, StateValue}; -use crate::ui::components::label::Label; +use crate::ui::components::common::label::Label; use crate::ui::layout; use crate::ui::theme::Theme; use crate::ui::widget::{Widget, WidgetComponent}; diff --git a/radicle-tui/src/ui/components/home.rs b/radicle-tui/src/ui/components/home.rs new file mode 100644 index 00000000..a35b96c8 --- /dev/null +++ b/radicle-tui/src/ui/components/home.rs @@ -0,0 +1,83 @@ +use tuirealm::command::{Cmd, CmdResult}; +use tuirealm::props::Props; +use tuirealm::tui::layout::Rect; +use tuirealm::{AttrValue, Attribute, Frame, MockComponent, State}; + +use crate::ui::layout; +use crate::ui::widget::{Widget, WidgetComponent}; + +use super::common::container::LabeledContainer; +use super::common::context::Shortcuts; +use super::common::label::Label; + +pub struct Dashboard { + about: Widget, + shortcuts: Widget, +} + +impl Dashboard { + pub fn new(about: Widget, shortcuts: Widget) -> Self { + Self { about, shortcuts } + } +} + +impl WidgetComponent for Dashboard { + fn view(&mut self, _properties: &Props, frame: &mut Frame, area: Rect) { + let shortcuts_h = self + .shortcuts + .query(Attribute::Height) + .unwrap_or(AttrValue::Size(0)) + .unwrap_size(); + let layout = layout::root_component(area, shortcuts_h); + + self.about.view(frame, layout[0]); + self.shortcuts.view(frame, layout[1]); + } + + fn state(&self) -> State { + State::None + } + + fn perform(&mut self, _properties: &Props, _cmd: Cmd) -> CmdResult { + CmdResult::None + } +} + +pub struct IssueBrowser { + label: Widget
, - shortcuts: Widget, - phantom: PhantomData, -} - -impl Browser { - pub fn new(list: Widget
, shortcuts: Widget) -> Self { - Self { - list, - shortcuts, - phantom: PhantomData, - } - } -} - -impl WidgetComponent for Browser { - fn view(&mut self, _properties: &Props, frame: &mut Frame, area: Rect) { - let shortcuts_h = self - .shortcuts - .query(Attribute::Height) - .unwrap_or(AttrValue::Size(0)) - .unwrap_size(); - let layout = layout::root_component(area, shortcuts_h); - - self.list.view(frame, layout[0]); - self.shortcuts.view(frame, layout[1]); - } - - fn state(&self) -> State { - State::None - } - - fn perform(&mut self, _properties: &Props, cmd: Cmd) -> CmdResult { - self.list.perform(cmd) - } -} - -pub struct Dashboard { - about: Widget, - shortcuts: Widget, -} -impl Dashboard { - pub fn new(about: Widget, shortcuts: Widget) -> Self { - Self { about, shortcuts } - } -} - -impl WidgetComponent for Dashboard { - fn view(&mut self, _properties: &Props, frame: &mut Frame, area: Rect) { - let shortcuts_h = self - .shortcuts - .query(Attribute::Height) - .unwrap_or(AttrValue::Size(0)) - .unwrap_size(); - let layout = layout::root_component(area, shortcuts_h); - - self.about.view(frame, layout[0]); - self.shortcuts.view(frame, layout[1]); - } - - fn state(&self) -> State { - State::None - } - - fn perform(&mut self, _properties: &Props, _cmd: Cmd) -> CmdResult { - CmdResult::None - } -} - -pub struct IssueBrowser { - label: Widget