gm_lib/tui/app/pages/
dev_key_capture.rs1use 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}