diff options
author | Shav Kinderlehrer <[email protected]> | 2024-03-06 11:45:18 -0500 |
---|---|---|
committer | Shav Kinderlehrer <[email protected]> | 2024-03-06 11:45:18 -0500 |
commit | a5dbccee4f22de991e33449ae1d1835269c6075d (patch) | |
tree | 8a530c8efe28afb61768f0d44c7e71c7049829e2 /src/components/global_keys.rs | |
parent | 557d3f32fd2ac7a21bd3da01e8e903db16a31e7e (diff) | |
download | molehole-a5dbccee4f22de991e33449ae1d1835269c6075d.tar.gz molehole-a5dbccee4f22de991e33449ae1d1835269c6075d.zip |
Fix event handling
Diffstat (limited to 'src/components/global_keys.rs')
-rw-r--r-- | src/components/global_keys.rs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/components/global_keys.rs b/src/components/global_keys.rs new file mode 100644 index 0000000..e99e2e0 --- /dev/null +++ b/src/components/global_keys.rs @@ -0,0 +1,46 @@ +use crossterm::event::{KeyCode, KeyEvent, KeyEventKind}; +use ratatui::prelude::*; +use ratatui::widgets::*; + +use crate::app_action::AppAction; +use crate::component::Component; + +#[derive(Default, Clone, Copy)] +pub struct GlobalKeys { + should_show: bool, +} + +impl Component for GlobalKeys { + fn handle_key_event( + &mut self, + key: KeyEvent, + ) -> eyre::Result<Option<AppAction>> { + if key.kind == KeyEventKind::Press { + return match key.code { + KeyCode::Char('q') => Ok(Some(AppAction::Quit)), + KeyCode::Char('?') => { + self.should_show = !self.should_show; + Ok(None) + } + _ => Ok(None), + }; + } + + Ok(None) + } + + fn render(&mut self, frame: &mut Frame, rect: Rect) -> eyre::Result<()> { + let horizontal_center = Layout::default() + .direction(Direction::Horizontal); + + let block = Block::default() + .title("Keyboard shortcuts") + .borders(Borders::ALL); + + if self.should_show { + frame.render_widget(block, rect); + } + + Ok(()) + } +} |