mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 19:56:42 +01:00
refactor stacked keymaps
This commit is contained in:
parent
26b7a9390e
commit
dcd0de7710
9 changed files with 31 additions and 70 deletions
|
|
@ -1,8 +1,3 @@
|
||||||
(@esc menu)
|
|
||||||
(@f1 help)
|
|
||||||
|
|
||||||
(@u undo 1)
|
|
||||||
(@shift-u redo 1)
|
|
||||||
(@space clock toggle)
|
(@space clock toggle)
|
||||||
(@shift-space clock toggle 0)
|
(@shift-space clock toggle 0)
|
||||||
(@t select :track 0)
|
(@t select :track 0)
|
||||||
|
|
|
||||||
5
config/keys_global.edn
Normal file
5
config/keys_global.edn
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
(@esc menu)
|
||||||
|
(@f1 help)
|
||||||
|
|
||||||
|
(@u undo 1)
|
||||||
|
(@shift-u redo 1)
|
||||||
|
|
@ -1,9 +1,3 @@
|
||||||
(@esc menu)
|
|
||||||
(@f1 help)
|
|
||||||
|
|
||||||
(@u undo 1)
|
|
||||||
(@shift-u redo 1)
|
|
||||||
|
|
||||||
(@space clock toggle)
|
(@space clock toggle)
|
||||||
(@shift-space clock toggle 0)
|
(@shift-space clock toggle 0)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
(@u undo 1)
|
|
||||||
(@shift-u redo 1)
|
|
||||||
(@space clock toggle)
|
(@space clock toggle)
|
||||||
(@shift-space clock toggle 0)
|
(@shift-space clock toggle 0)
|
||||||
(@c color)
|
(@c color)
|
||||||
|
|
|
||||||
|
|
@ -6,74 +6,43 @@ handle!(TuiIn: |self: Tek, input|if let Some(handler) = self.handler {
|
||||||
Ok(None)
|
Ok(None)
|
||||||
});
|
});
|
||||||
|
|
||||||
pub fn handle_arranger (app: &mut Tek, input: &TuiIn) -> Perhaps<bool> {
|
fn layer (app: &mut Tek, input: &TuiIn, keymap: &str) -> Usually<bool> {
|
||||||
// If editing, editor keys take priority
|
if let Some(command) = SourceIter(keymap).command::<_, TekCommand, _>(app, input) {
|
||||||
if app.is_editing() {
|
|
||||||
if app.editor.handle(input)? == Some(true) {
|
|
||||||
return Ok(Some(true))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Handle from root keymap
|
|
||||||
if let Some(command) = SourceIter(include_str!("../../../config/keys_arranger.edn"))
|
|
||||||
.command::<_, TekCommand, _>(app, input)
|
|
||||||
{
|
|
||||||
if let Some(undo) = command.execute(app)? { app.history.push(undo); }
|
|
||||||
return Ok(Some(true))
|
|
||||||
}
|
|
||||||
// Handle from selection-dependent keymaps
|
|
||||||
if let Some(command) = match app.selected() {
|
|
||||||
Selection::Clip(_, _) => SourceIter(include_str!("../../../config/keys_arranger_clip.edn")),
|
|
||||||
Selection::Track(_) => SourceIter(include_str!("../../../config/keys_arranger_track.edn")),
|
|
||||||
Selection::Scene(_) => SourceIter(include_str!("../../../config/keys_arranger_scene.edn")),
|
|
||||||
Selection::Mix => SourceIter(include_str!("../../../config/keys_arranger_mix.edn")),
|
|
||||||
}.command::<_, TekCommand, _>(app, input) {
|
|
||||||
if let Some(undo) = command.execute(app)? {
|
if let Some(undo) = command.execute(app)? {
|
||||||
app.history.push(undo);
|
app.history.push(undo);
|
||||||
}
|
}
|
||||||
return Ok(Some(true))
|
return Ok(true)
|
||||||
}
|
}
|
||||||
Ok(None)
|
return Ok(false)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn handle_arranger (app: &mut Tek, input: &TuiIn) -> Perhaps<bool> {
|
||||||
|
Ok((app.is_editing() && app.editor.handle(input)? == Some(true) ||
|
||||||
|
layer(app, input, include_str!("../../../config/keys_global.edn"))? ||
|
||||||
|
layer(app, input, include_str!("../../../config/keys_arranger.edn"))? ||
|
||||||
|
app.selected.is_clip() && layer(app, input, include_str!("../../../config/keys_clip.edn"))? ||
|
||||||
|
app.selected.is_track() && layer(app, input, include_str!("../../../config/keys_track.edn"))? ||
|
||||||
|
app.selected.is_scene() && layer(app, input, include_str!("../../../config/keys_scene.edn"))? ||
|
||||||
|
app.selected.is_mix() && layer(app, input, include_str!("../../../config/keys_mix.edn"))?
|
||||||
|
).then_some(true))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn handle_sequencer (app: &mut Tek, input: &TuiIn) -> Perhaps<bool> {
|
pub fn handle_sequencer (app: &mut Tek, input: &TuiIn) -> Perhaps<bool> {
|
||||||
if app.editor.handle(input)? == Some(true) {
|
Ok((app.editor.handle(input)? == Some(true) ||
|
||||||
return Ok(Some(true))
|
layer(app, input, include_str!("../../../config/keys_global.edn"))? ||
|
||||||
}
|
layer(app, input, include_str!("../../../config/keys_sequencer.edn"))?
|
||||||
if let Some(command) = SourceIter(include_str!("../../../config/keys_sequencer.edn"))
|
).then_some(true))
|
||||||
.command::<_, TekCommand, _>(app, input)
|
|
||||||
{
|
|
||||||
if let Some(undo) = command.execute(app)? {
|
|
||||||
app.history.push(undo);
|
|
||||||
}
|
|
||||||
return Ok(Some(true))
|
|
||||||
}
|
|
||||||
Ok(None)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn handle_groovebox (app: &mut Tek, input: &TuiIn) -> Perhaps<bool> {
|
pub fn handle_groovebox (app: &mut Tek, input: &TuiIn) -> Perhaps<bool> {
|
||||||
if app.editor.handle(input)? == Some(true) {
|
Ok((app.editor.handle(input)? == Some(true) ||
|
||||||
return Ok(Some(true))
|
layer(app, input, include_str!("../../../config/keys_global.edn"))? ||
|
||||||
}
|
layer(app, input, include_str!("../../../config/keys_groovebox.edn"))?
|
||||||
if let Some(command) = SourceIter(include_str!("../../../config/keys_groovebox.edn"))
|
).then_some(true))
|
||||||
.command::<_, TekCommand, _>(app, input)
|
|
||||||
{
|
|
||||||
if let Some(undo) = command.execute(app)? {
|
|
||||||
app.history.push(undo);
|
|
||||||
}
|
|
||||||
return Ok(Some(true))
|
|
||||||
}
|
|
||||||
Ok(None)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn handle_sampler (app: &mut Tek, input: &TuiIn) -> Perhaps<bool> {
|
pub fn handle_sampler (app: &mut Tek, input: &TuiIn) -> Perhaps<bool> {
|
||||||
let sampler = app.tracks[0].sampler_mut(0).expect("no sampler");
|
Ok((layer(app, input, include_str!("../../../config/keys_global.edn"))? ||
|
||||||
if let Some(command) = SourceIter(include_str!("../../../config/keys_sampler.edn"))
|
layer(app, input, include_str!("../../../config/keys_sampler.edn"))?
|
||||||
.command::<_, SamplerCommand, _>(sampler, input)
|
).then_some(true))
|
||||||
{
|
|
||||||
if let Some(undo) = command.execute(sampler)? {
|
|
||||||
//app.history.push(undo); // TODO UNDO
|
|
||||||
}
|
|
||||||
return Ok(Some(true))
|
|
||||||
}
|
|
||||||
Ok(None)
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue