mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 11:46:41 +01:00
47 lines
1.8 KiB
Rust
47 lines
1.8 KiB
Rust
use crate::{core::*, model::{App, AppFocus}};
|
|
|
|
/// Generic key bindings for views that support focus.
|
|
pub const KEYMAP_FOCUS: &'static [KeyBinding<App>] = 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<bool> {
|
|
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<bool> {
|
|
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)
|
|
}
|