use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
#[derive(Debug, Clone, PartialEq)]
pub enum InputEvent {
NextPanel, PrevPanel, NextItem, PrevItem, NextDevice, PrevDevice,
ShowOptions, SaveSettings, ReloadSettings,
Quit, Reset, Pause,
ToggleTrafficUnits, ToggleDataUnits, ToggleGraphs, ToggleMultiple, ZoomIn, ZoomOut,
IncreaseRefresh, DecreaseRefresh, IncreaseAverage, DecreaseAverage,
Unknown,
}
impl InputEvent {
pub fn from_key_event(key_event: KeyEvent) -> Self {
match (key_event.code, key_event.modifiers) {
(KeyCode::Tab, KeyModifiers::NONE) => Self::NextPanel,
(KeyCode::Tab, KeyModifiers::SHIFT) => Self::PrevPanel,
(KeyCode::BackTab, _) => Self::PrevPanel,
(KeyCode::Down | KeyCode::Char('j'), _) => Self::NextItem,
(KeyCode::Up | KeyCode::Char('k'), _) => Self::PrevItem,
(KeyCode::Right | KeyCode::Char('l'), _) => Self::NextDevice,
(KeyCode::Left | KeyCode::Char('h'), _) => Self::PrevDevice,
(KeyCode::Enter, _) => Self::ToggleMultiple,
(KeyCode::F(2), _) => Self::ShowOptions,
(KeyCode::F(5), _) => Self::SaveSettings,
(KeyCode::F(6), _) => Self::ReloadSettings,
(KeyCode::Char('q'), _) => Self::Quit,
(KeyCode::Char('r'), _) => Self::Reset,
(KeyCode::Char(' '), _) => Self::Pause,
(KeyCode::Char('u'), _) => Self::ToggleTrafficUnits,
(KeyCode::Char('U'), _) => Self::ToggleDataUnits,
(KeyCode::Char('g'), _) => Self::ToggleGraphs,
(KeyCode::Char('+'), _) => Self::ZoomIn,
(KeyCode::Char('-'), _) => Self::ZoomOut,
(KeyCode::Char('>'), _) => Self::IncreaseRefresh,
(KeyCode::Char('<'), _) => Self::DecreaseRefresh,
(KeyCode::Char(']'), _) => Self::IncreaseAverage,
(KeyCode::Char('['), _) => Self::DecreaseAverage,
(KeyCode::Esc, _) => Self::Quit,
_ => Self::Unknown,
}
}
}