use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
use ratatui::widgets::ListState;
use crate::ui::terminal::app::OperationQueue;
use crate::ui::terminal::{AppMode, KeyResult};
use crate::ui::UiAction;
pub struct QueueView {
state: ListState,
}
impl QueueView {
pub fn new() -> Self {
let mut queue_view = Self {
state: ListState::default(),
};
queue_view.state.select(Some(0));
queue_view
}
pub fn handle_key(
&mut self,
key: KeyEvent,
mode: &AppMode,
queue: &mut OperationQueue,
) -> KeyResult {
if *mode != AppMode::Normal {
return KeyResult::NotHandled;
}
match (key.code, key.modifiers) {
(KeyCode::Char('J'), KeyModifiers::SHIFT) => {
queue.select_next();
KeyResult::Handled(None)
}
(KeyCode::Char('K'), KeyModifiers::SHIFT) => {
queue.select_prev();
KeyResult::Handled(None)
}
(KeyCode::Char('D'), KeyModifiers::SHIFT) => {
queue.remove_selected();
KeyResult::Handled(None)
}
(KeyCode::Char('X'), KeyModifiers::SHIFT) => {
KeyResult::Handled(Some(UiAction::ExecuteQueue))
}
(KeyCode::Char('C'), KeyModifiers::SHIFT) => {
queue.clear();
KeyResult::Handled(None)
}
_ => KeyResult::NotHandled,
}
}
}