From 9bc4e3fb5f14caeecfbca90c7c4cd57c582b35b2 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Wed, 30 Apr 2025 20:30:55 +0300 Subject: [PATCH] delete track/scene --- config/keys_groovebox.edn | 2 +- config/keys_sampler.edn | 18 +++++++++--------- config/keys_scene.edn | 4 ++-- config/keys_track.edn | 13 ++++++------- crates/app/src/api.rs | 31 ++++++++++++++++++------------- crates/cli/tek.rs | 25 ++++++++++++++++--------- 6 files changed, 52 insertions(+), 41 deletions(-) diff --git a/config/keys_groovebox.edn b/config/keys_groovebox.edn index 99e13795..62608d87 100644 --- a/config/keys_groovebox.edn +++ b/config/keys_groovebox.edn @@ -1 +1 @@ -(@r sampler record/begin :pitch) +(@r sampler record/toggle :sample) diff --git a/config/keys_sampler.edn b/config/keys_sampler.edn index c8cc0c84..8bfb03c9 100644 --- a/config/keys_sampler.edn +++ b/config/keys_sampler.edn @@ -1,13 +1,13 @@ -(@up select :sample-up) -(@w select :sample-up) +(@up sampler select :sample-up) +(@w sampler select :sample-up) -(@down select :sample-down) -(@s select :sample-down) +(@down sampler select :sample-down) +(@s sampler select :sample-down) -(@left select :sample-left) -(@a select :sample-left) +(@left sampler select :sample-left) +(@a sampler select :sample-left) -(@right select :sample-right) -(@d select :sample-right) +(@right sampler select :sample-right) +(@d sampler select :sample-right) -(@r record/toggle :sample) +(@r sampler record/toggle :sample) diff --git a/config/keys_scene.edn b/config/keys_scene.edn index be00e7c0..f3265cec 100644 --- a/config/keys_scene.edn +++ b/config/keys_scene.edn @@ -1,7 +1,7 @@ +(@delete scene delete :scene) (@q scene launch :scene) -(@c scene color :scene) +(@c scene color :scene) (@comma scene prev) (@period scene next) (@lt scene swap-prev) (@gt scene swap-next) -(@delete scene delete) diff --git a/config/keys_track.edn b/config/keys_track.edn index abdc5e7b..3ffbb9a9 100644 --- a/config/keys_track.edn +++ b/config/keys_track.edn @@ -1,12 +1,11 @@ +(@delete track delete :track) (@q track launch :track) -(@c track color :track) +(@c track color :track) (@comma track prev) (@period track next) (@lt track swap-prev) (@gt track swap-next) -(@delete track delete) - -(@r track rec) -(@m track mon) -(@p track play) -(@P track solo) +(@r track rec) +(@m track mon) +(@p track play) +(@P track solo) diff --git a/crates/app/src/api.rs b/crates/app/src/api.rs index bc21fa49..fddb175b 100644 --- a/crates/app/src/api.rs +++ b/crates/app/src/api.rs @@ -34,6 +34,9 @@ expose!([self: Tek] handle!(TuiIn: |self: Tek, input|Ok(if let Some(command) = self.keys.command(self, input) { let undo = command.execute(self)?; + if let Some(undo) = undo { + self.history.push(undo); + } Some(true) } else { None @@ -68,13 +71,15 @@ impose!([app: Tek] (t, 0) => Self::Select(Selection::Track(t)), (0, s) => Self::Select(Selection::Scene(s)), (t, s) => Self::Select(Selection::Clip(t, s)) }))) + (ClipCommand: ("edit" [a: MaybeClip] Some(Self::Edit(a.unwrap()))) ("color" [a: usize, b: usize] Some(Self::SetColor(a.unwrap(), b.unwrap(), ItemTheme::random()))) ("enqueue" [a: usize, b: usize] Some(Self::Enqueue(a.unwrap(), b.unwrap()))) ("get" [a: usize, b: usize] Some(Self::Get(a.unwrap(), b.unwrap()))) ("loop" [a: usize, b: usize, c: bool] Some(Self::SetLoop(a.unwrap(), b.unwrap(), c.unwrap()))) - ("put" [a: usize, b: usize, c: MaybeClip] Some(Self::Put(a.unwrap(), b.unwrap(), c.unwrap())))) + ("put" [a: usize, b: usize, c: MaybeClip] Some(Self::Put(a.unwrap(), b.unwrap(), c.unwrap()))) + ("delete" [a: usize, b: usize] Some(Self::Put(a.unwrap(), b.unwrap(), None)))) (InputCommand: ("add" [] Some(Self::Add))) @@ -84,24 +89,24 @@ impose!([app: Tek] (SceneCommand: ("add" [] Some(Self::Add)) - ("del" [a: usize] Some(Self::Del(0))) + ("delete" [a: Option] Some(Self::Del(a.flatten().unwrap()))) ("zoom" [a: usize] Some(Self::SetZoom(a.unwrap()))) ("color" [a: usize] Some(Self::SetColor(a.unwrap(), ItemTheme::G[128]))) ("enqueue" [a: usize] Some(Self::Enqueue(a.unwrap()))) ("swap" [a: usize, b: usize] Some(Self::Swap(a.unwrap(), b.unwrap())))) (TrackCommand: - ("add" [] Some(Self::Add)) - ("size" [a: usize] Some(Self::SetSize(a.unwrap()))) - ("zoom" [a: usize] Some(Self::SetZoom(a.unwrap()))) - ("color" [a: usize] Some(Self::SetColor(a.unwrap(), ItemTheme::random()))) - ("del" [a: usize] Some(Self::Del(a.unwrap()))) - ("stop" [a: usize] Some(Self::Stop(a.unwrap()))) - ("swap" [a: usize, b: usize] Some(Self::Swap(a.unwrap(), b.unwrap()))) - ("play" [] Some(Self::TogglePlay)) - ("solo" [] Some(Self::ToggleSolo)) - ("rec" [] Some(Self::ToggleRec)) - ("mon" [] Some(Self::ToggleMon)))); + ("add" [] Some(Self::Add)) + ("size" [a: usize] Some(Self::SetSize(a.unwrap()))) + ("zoom" [a: usize] Some(Self::SetZoom(a.unwrap()))) + ("color" [a: usize] Some(Self::SetColor(a.unwrap(), ItemTheme::random()))) + ("delete" [a: Option] Some(Self::Del(a.flatten().unwrap()))) + ("stop" [a: usize] Some(Self::Stop(a.unwrap()))) + ("swap" [a: usize, b: usize] Some(Self::Swap(a.unwrap(), b.unwrap()))) + ("play" [] Some(Self::TogglePlay)) + ("solo" [] Some(Self::ToggleSolo)) + ("rec" [] Some(Self::ToggleRec)) + ("mon" [] Some(Self::ToggleMon)))); defcom!([self, app: Tek] diff --git a/crates/cli/tek.rs b/crates/cli/tek.rs index 464e3268..d686cabe 100644 --- a/crates/cli/tek.rs +++ b/crates/cli/tek.rs @@ -137,16 +137,23 @@ impl Cli { .layer(SourceIter(include_str!("../../config/keys_sequencer.edn"))) .layer(SourceIter(include_str!("../../config/keys_groovebox.edn"))), LaunchMode::Arranger {..} => InputMap::default() - .layer(SourceIter(include_str!("../../config/keys_global.edn"))) - .layer_if( - |state: &Tek|state.is_editing(), + .layer( + SourceIter(include_str!("../../config/keys_global.edn"))) + .layer_if(|state: &Tek|state.is_editing(), SourceIter(include_str!("../../config/keys_editor.edn"))) - .layer(SourceIter(include_str!("../../config/keys_clock.edn"))) - .layer(SourceIter(include_str!("../../config/keys_arranger.edn"))) - .layer(SourceIter(include_str!("../../config/keys_clip.edn"))) - .layer(SourceIter(include_str!("../../config/keys_track.edn"))) - .layer(SourceIter(include_str!("../../config/keys_scene.edn"))) - .layer(SourceIter(include_str!("../../config/keys_mix.edn"))), + .layer_if(|state: &Tek|state.selected.is_clip(), + SourceIter(include_str!("../../config/keys_clip.edn"))) + .layer_if(|state: &Tek|state.selected.is_track(), + SourceIter(include_str!("../../config/keys_track.edn"))) + .layer_if(|state: &Tek|state.selected.is_scene(), + SourceIter(include_str!("../../config/keys_scene.edn"))) + .layer_if(|state: &Tek|state.selected.is_mix(), + SourceIter(include_str!("../../config/keys_mix.edn"))) + .layer( + SourceIter(include_str!("../../config/keys_clock.edn"))) + .layer( + SourceIter(include_str!("../../config/keys_arranger.edn"))) + , _ => todo!("{mode:?}"), }, pool: match mode {