use crate::tui::App;
use crate::tui::traits::{EventResult, ViewContext, ViewMode, ViewState};
use crossterm::event::{KeyCode, KeyEvent};
pub fn handle_source_keys(app: &mut App, key: KeyEvent) {
let view = &mut app.source_view;
let mut ctx = ViewContext {
mode: ViewMode::from_app_mode(app.mode),
focused: true,
width: 0,
height: 0,
tick: app.tick,
status_message: &mut app.status_message,
};
let result = view.handle_key(key, &mut ctx);
match result {
EventResult::StatusMessage(msg) => {
app.status_message = Some(msg);
}
EventResult::Ignored => {
handle_data_dependent_keys(app, key);
}
_ => {}
}
}
fn handle_data_dependent_keys(app: &mut App, key: KeyEvent) {
match key.code {
KeyCode::Char('c') => {
let panel = app.source_state_mut().active_panel_mut();
panel.ensure_flat_cache();
if let Some(item) = panel.cached_flat_items.get(panel.selected) {
let path = item.node_id.clone();
if crate::tui::clipboard::copy_to_clipboard(&path) {
app.set_status_message(format!("Copied path: {path}"));
}
}
}
KeyCode::Char('E') => {
let panel = app.source_state_mut().active_panel_mut();
let content = panel.get_full_content();
let label = match app.source_state().active_side {
crate::tui::app_states::SourceSide::Old => "old",
crate::tui::app_states::SourceSide::New => "new",
};
let result = crate::tui::export::export_source_content(&content, label);
app.set_status_message(result.message);
}
_ => {}
}
}