thedes_tui_core/
event.rs

1use crate::geometry::CoordPair;
2
3pub(crate) mod native_ext;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
6pub enum Key {
7    Char(char),
8    Up,
9    Down,
10    Left,
11    Right,
12    Esc,
13    Enter,
14    Backspace,
15    Delete,
16}
17
18#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
19pub struct KeyEvent {
20    pub main_key: Key,
21    pub ctrl: bool,
22    pub alt: bool,
23    pub shift: bool,
24}
25
26impl KeyEvent {
27    pub fn new(main_key: Key) -> Self {
28        Self { main_key, ctrl: false, alt: false, shift: false }
29    }
30
31    pub fn with_ctrl(mut self, pressed: bool) -> Self {
32        self.ctrl = pressed;
33        self
34    }
35
36    pub fn with_alt(mut self, pressed: bool) -> Self {
37        self.alt = pressed;
38        self
39    }
40
41    pub fn with_shift(mut self, pressed: bool) -> Self {
42        self.shift = pressed;
43        self
44    }
45}
46
47impl From<Key> for KeyEvent {
48    fn from(main_key: Key) -> Self {
49        Self::new(main_key)
50    }
51}
52
53#[derive(Debug, Clone, PartialEq, Eq)]
54pub struct PasteEvent {
55    pub data: String,
56}
57
58#[derive(Debug, Clone, PartialEq, Eq)]
59pub enum Event {
60    Key(KeyEvent),
61    Paste(PasteEvent),
62}
63
64impl From<KeyEvent> for Event {
65    fn from(event: KeyEvent) -> Self {
66        Event::Key(event)
67    }
68}
69
70impl From<Key> for Event {
71    fn from(event: Key) -> Self {
72        Event::Key(event.into())
73    }
74}
75
76impl From<PasteEvent> for Event {
77    fn from(event: PasteEvent) -> Self {
78        Event::Paste(event)
79    }
80}
81
82#[derive(Debug, Clone, Copy, PartialEq, Eq)]
83pub struct ResizeEvent {
84    pub size: CoordPair,
85}
86
87#[derive(Debug, Clone, PartialEq, Eq)]
88pub enum InternalEvent {
89    External(Event),
90    Resize(ResizeEvent),
91}
92
93impl From<Event> for InternalEvent {
94    fn from(event: Event) -> Self {
95        Self::External(event)
96    }
97}
98
99impl From<KeyEvent> for InternalEvent {
100    fn from(event: KeyEvent) -> Self {
101        Self::External(event.into())
102    }
103}
104
105impl From<Key> for InternalEvent {
106    fn from(event: Key) -> Self {
107        Self::External(Event::from(event))
108    }
109}
110
111impl From<PasteEvent> for InternalEvent {
112    fn from(event: PasteEvent) -> Self {
113        Self::External(event.into())
114    }
115}
116
117impl From<ResizeEvent> for InternalEvent {
118    fn from(event: ResizeEvent) -> Self {
119        Self::Resize(event)
120    }
121}