use tuirealm::command::{Cmd, CmdResult, Direction as MoveDirection}; use tuirealm::event::{Event, Key, KeyEvent}; use tuirealm::{MockComponent, NoUserEvent, State, StateValue}; use radicle_tui::ui::widget::common::container::{GlobalListener, LabeledContainer, Tabs}; use radicle_tui::ui::widget::common::context::{ContextBar, Shortcuts}; use radicle_tui::ui::widget::common::list::PropertyList; use radicle_tui::ui::widget::home::{Dashboard, IssueBrowser, PatchBrowser}; use radicle_tui::ui::widget::patch; use radicle_tui::ui::widget::Widget; use super::{Message, PatchMessage}; /// Since the framework does not know the type of messages that are being /// passed around in the app, the following handlers need to be implemented for /// each component used. /// /// TODO: should handle `Event::WindowResize`, which is not emitted by `termion`. impl tuirealm::Component for Widget { fn on(&mut self, event: Event) -> Option { match event { Event::Keyboard(KeyEvent { code: Key::Char('q'), .. }) => Some(Message::Quit), _ => None, } } } impl tuirealm::Component for Widget { fn on(&mut self, event: Event) -> Option { match event { Event::Keyboard(KeyEvent { code: Key::Tab, .. }) => { match self.perform(Cmd::Move(MoveDirection::Right)) { CmdResult::Changed(State::One(StateValue::U16(index))) => { Some(Message::NavigationChanged(index)) } _ => None, } } _ => None, } } } impl tuirealm::Component for Widget { fn on(&mut self, event: Event) -> Option { match event { Event::Keyboard(KeyEvent { code: Key::Up, .. }) => { self.perform(Cmd::Move(MoveDirection::Up)); Some(Message::Tick) } Event::Keyboard(KeyEvent { code: Key::Down, .. }) => { self.perform(Cmd::Move(MoveDirection::Down)); Some(Message::Tick) } Event::Keyboard(KeyEvent { code: Key::Enter, .. }) => self .selected_item() .map(|item| Message::Patch(PatchMessage::Show(item.id()))), _ => None, } } } impl tuirealm::Component for Widget { fn on(&mut self, _event: Event) -> Option { None } } impl tuirealm::Component for Widget { fn on(&mut self, _event: Event) -> Option { None } } impl tuirealm::Component for Widget { fn on(&mut self, event: Event) -> Option { match event { Event::Keyboard(KeyEvent { code: Key::Esc, .. }) => { Some(Message::Patch(PatchMessage::Leave)) } _ => None, } } } impl tuirealm::Component for Widget { fn on(&mut self, event: Event) -> Option { match event { Event::Keyboard(KeyEvent { code: Key::Esc, .. }) => { Some(Message::Patch(PatchMessage::Leave)) } _ => None, } } } impl tuirealm::Component for Widget { fn on(&mut self, _event: Event) -> Option { None } } impl tuirealm::Component for Widget { fn on(&mut self, _event: Event) -> Option { None } } impl tuirealm::Component for Widget { fn on(&mut self, _event: Event) -> Option { None } } impl tuirealm::Component for Widget { fn on(&mut self, _event: Event) -> Option { None } }