Skip to main content

gm_lib/tui/app/pages/
dev_key_capture.rs

1use std::sync::{atomic::AtomicBool, mpsc::Sender, Arc};
2
3use ratatui::{layout::Rect, widgets::Widget};
4
5use crate::tui::{
6    app::SharedState,
7    traits::{Component, HandleResult},
8    Event,
9};
10
11#[derive(Default)]
12pub struct DevKeyCapturePage {
13    data: Option<String>,
14}
15
16impl Component for DevKeyCapturePage {
17    fn handle_event(
18        &mut self,
19        event: &Event,
20        _area: Rect,
21        _transmitter: &Sender<Event>,
22        _shutdown_signal: &Arc<AtomicBool>,
23        _shared_state: &SharedState,
24    ) -> crate::Result<HandleResult> {
25        if let Event::Input(key_event) = event {
26            self.data = Some(format!("{key_event:?}"))
27        }
28
29        Ok(HandleResult::default())
30    }
31
32    fn render_component(
33        &self,
34        area: Rect,
35        buf: &mut ratatui::prelude::Buffer,
36        _shared_state: &crate::tui::app::SharedState,
37    ) -> ratatui::prelude::Rect
38    where
39        Self: Sized,
40    {
41        if let Some(data) = self.data.as_ref() {
42            data.render(area, buf);
43        } else {
44            "Press any key to capture the event".render(area, buf);
45        }
46
47        area
48    }
49}