enter/escape

This commit is contained in:
🪞👃🪞 2024-07-03 17:41:16 +03:00
parent c3c6c13f57
commit 7bc396e748

View file

@ -174,7 +174,8 @@ const KEYMAP: &'static [KeyBinding<App>] = keymap!(App {
[Char(','), NONE, "decrement", "decrement value at cursor", decrement], [Char(','), NONE, "decrement", "decrement value at cursor", decrement],
[Delete, CONTROL, "delete", "delete track", delete], [Delete, CONTROL, "delete", "delete track", delete],
[Char('d'), CONTROL, "duplicate", "duplicate scene or track", duplicate], [Char('d'), CONTROL, "duplicate", "duplicate scene or track", duplicate],
[Enter, NONE, "activate", "activate item at cursor", activate], [Enter, NONE, "activate", "activate item at cursor", enter],
[Esc, NONE, "escape", "unfocus", escape],
[Char(' '), NONE, "play_toggle", "play or pause", play_toggle], [Char(' '), NONE, "play_toggle", "play or pause", play_toggle],
[Char('r'), NONE, "record_toggle", "toggle recording", record_toggle], [Char('r'), NONE, "record_toggle", "toggle recording", record_toggle],
[Char('d'), NONE, "overdub_toggle", "toggle overdub", overdub_toggle], [Char('d'), NONE, "overdub_toggle", "toggle overdub", overdub_toggle],
@ -211,33 +212,45 @@ fn focus_prev (app: &mut App) -> Usually<bool> {
Ok(true) Ok(true)
} }
fn cursor_up (app: &mut App) -> Usually<bool> { fn cursor_up (app: &mut App) -> Usually<bool> {
focus_prev(app) if app.entered {
match app.section {
0 => match app.grid_mode {
false => {app.scene_cursor = app.scene_cursor.saturating_sub(1); Ok(true)},
true => {app.track_cursor = app.track_cursor.saturating_sub(1); Ok(true)},
},
_ => Ok(false)
}
} else {
focus_prev(app)
}
} }
fn cursor_down (app: &mut App) -> Usually<bool> { fn cursor_down (app: &mut App) -> Usually<bool> {
focus_next(app) if app.entered {
match app.section {
0 => match app.grid_mode {
false => {app.scene_cursor = app.scenes.len().min(app.scene_cursor + 1); Ok(true)},
true => {app.track_cursor = app.tracks.len().min(app.track_cursor + 1); Ok(true)},
},
_ => Ok(false)
}
} else {
focus_next(app)
}
} }
fn cursor_left (app: &mut App) -> Usually<bool> { fn cursor_left (app: &mut App) -> Usually<bool> {
match app.section { match app.section {
0 => { 0 => match app.grid_mode {
app.track_cursor = if app.track_cursor == 0 { false => {app.track_cursor = app.track_cursor.saturating_sub(1); Ok(true)},
app.tracks.len() true => {app.scene_cursor = app.scene_cursor.saturating_sub(1); Ok(true)},
} else { },
app.track_cursor
} - 1;
Ok(true)
}
_ => Ok(false) _ => Ok(false)
} }
} }
fn cursor_right (app: &mut App) -> Usually<bool> { fn cursor_right (app: &mut App) -> Usually<bool> {
match app.section { match app.section {
0 => { 0 => match app.grid_mode {
app.track_cursor = if app.track_cursor >= app.tracks.len() { false => {app.track_cursor = app.tracks.len().min(app.track_cursor + 1); Ok(true)},
0 true => {app.scene_cursor = app.scenes.len().min(app.scene_cursor + 1); Ok(true)},
} else {
app.track_cursor + 1
};
Ok(true)
}, },
_ => Ok(false) _ => Ok(false)
} }
@ -261,18 +274,36 @@ fn delete (app: &mut App) -> Usually<bool> {
} }
} }
fn duplicate (_: &mut App) -> Usually<bool> { Ok(true) } fn duplicate (_: &mut App) -> Usually<bool> { Ok(true) }
fn activate (_: &mut App) -> Usually<bool> { Ok(true) } fn enter (app: &mut App) -> Usually<bool> {
if app.entered {
activate(app)
} else {
app.entered = true;
Ok(true)
}
}
fn activate (_: &mut App) -> Usually<bool> {
Ok(true)
}
fn escape (app: &mut App) -> Usually<bool> {
if app.entered {
app.entered = false;
Ok(true)
} else {
Ok(false)
}
}
fn rename (_: &mut App) -> Usually<bool> { Ok(true) } fn rename (_: &mut App) -> Usually<bool> { Ok(true) }
fn add_scene (app: &mut App) -> Usually<bool> { fn add_scene (app: &mut App) -> Usually<bool> {
let name = format!("Scene {}", app.scenes.len() + 1); let name = format!("Scene {}", app.scenes.len() + 1);
app.scenes.push(Scene::new(&name, vec![])); app.scenes.push(Scene::new(&name, vec![]));
app.scene_cursor = app.scenes.len() - 1; app.scene_cursor = app.scenes.len();
Ok(true) Ok(true)
} }
fn add_track (app: &mut App) -> Usually<bool> { fn add_track (app: &mut App) -> Usually<bool> {
let name = format!("Track {}", app.tracks.len() + 1); let name = format!("Track {}", app.tracks.len() + 1);
app.tracks.push(Track::new(&name, app.jack.as_ref().unwrap().as_client(), &app.timebase, None, None)?); app.tracks.push(Track::new(&name, app.jack.as_ref().unwrap().as_client(), &app.timebase, None, None)?);
app.track_cursor = app.tracks.len() - 1; app.track_cursor = app.tracks.len();
Ok(true) Ok(true)
} }
fn delete_track (app: &mut App) -> Usually<bool> { fn delete_track (app: &mut App) -> Usually<bool> {