use crate::{core::*, model::{App, AppFocus}}; /// Generic key bindings for views that support focus. pub const KEYMAP_FOCUS: &'static [KeyBinding] = keymap!(App { [Char(';'), NONE, "command", "open command palette", |app: &mut App| { app.modal = Some(Box::new(crate::view::HelpModal::new())); Ok(true) }], [Tab, NONE, "focus_next", "focus next area", focus_next], [Tab, SHIFT, "focus_prev", "focus previous area", focus_prev], [Esc, NONE, "focus_exit", "unfocus", |app: &mut App|{ app.entered = false; app.transport.entered = app.entered; app.arranger.entered = app.entered; app.sequencer.entered = app.entered; Ok(true) }], [Enter, NONE, "focus_enter", "activate item at cursor", |app: &mut App|{ app.entered = true; app.transport.entered = app.entered; app.arranger.entered = app.entered; app.sequencer.entered = app.entered; Ok(true) }], }); pub fn focus_next (app: &mut App) -> Usually { app.section.next(); app.transport.focused = app.section == AppFocus::Transport; app.transport.entered = app.entered; app.arranger.focused = app.section == AppFocus::Arranger; app.arranger.entered = app.entered; app.sequencer.focused = app.section == AppFocus::Sequencer; app.sequencer.entered = app.entered; Ok(true) } pub fn focus_prev (app: &mut App) -> Usually { app.section.prev(); app.transport.focused = app.section == AppFocus::Transport; app.transport.entered = app.entered; app.arranger.focused = app.section == AppFocus::Arranger; app.arranger.entered = app.entered; app.sequencer.focused = app.section == AppFocus::Sequencer; app.sequencer.entered = app.entered; Ok(true) }