1use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
2
3#[derive(Debug, Clone, PartialEq)]
4pub enum InputEvent {
5 NextPanel, PrevPanel, NextItem, PrevItem, NextDevice, PrevDevice, ShowOptions, SaveSettings, ReloadSettings, Quit, Reset, Pause, ToggleTrafficUnits, ToggleDataUnits, ToggleGraphs, ToggleMultiple, ZoomIn, ZoomOut, IncreaseRefresh, DecreaseRefresh, IncreaseAverage, DecreaseAverage, Unknown,
39}
40
41impl InputEvent {
42 pub fn from_key_event(key_event: KeyEvent) -> Self {
43 match (key_event.code, key_event.modifiers) {
44 (KeyCode::Tab, KeyModifiers::NONE) => Self::NextPanel,
45 (KeyCode::Tab, KeyModifiers::SHIFT) => Self::PrevPanel,
46 (KeyCode::BackTab, _) => Self::PrevPanel,
47
48 (KeyCode::Down | KeyCode::Char('j'), _) => Self::NextItem,
49 (KeyCode::Up | KeyCode::Char('k'), _) => Self::PrevItem,
50 (KeyCode::Right | KeyCode::Char('l'), _) => Self::NextDevice,
51 (KeyCode::Left | KeyCode::Char('h'), _) => Self::PrevDevice,
52
53 (KeyCode::Enter, _) => Self::ToggleMultiple,
54
55 (KeyCode::F(2), _) => Self::ShowOptions,
56 (KeyCode::F(5), _) => Self::SaveSettings,
57 (KeyCode::F(6), _) => Self::ReloadSettings,
58
59 (KeyCode::Char('q'), _) => Self::Quit,
60 (KeyCode::Char('r'), _) => Self::Reset,
61 (KeyCode::Char(' '), _) => Self::Pause,
62 (KeyCode::Char('u'), _) => Self::ToggleTrafficUnits,
63 (KeyCode::Char('U'), _) => Self::ToggleDataUnits,
64 (KeyCode::Char('g'), _) => Self::ToggleGraphs,
65 (KeyCode::Char('+'), _) => Self::ZoomIn,
66 (KeyCode::Char('-'), _) => Self::ZoomOut,
67 (KeyCode::Char('>'), _) => Self::IncreaseRefresh,
68 (KeyCode::Char('<'), _) => Self::DecreaseRefresh,
69 (KeyCode::Char(']'), _) => Self::IncreaseAverage,
70 (KeyCode::Char('['), _) => Self::DecreaseAverage,
71
72 (KeyCode::Esc, _) => Self::Quit,
73
74 _ => Self::Unknown,
75 }
76 }
77}