From 685ccfaf499ca479e26a5390b5ed861253e07a07 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Fri, 6 Sep 2024 00:00:23 +0300 Subject: [PATCH] whew! refactor complete --- crates/tek_mixer/src/lib.rs | 1 + crates/tek_mixer/src/mixer_main.rs | 2 +- crates/tek_mixer/src/sampler_handle.rs | 79 +++++++++++----------- crates/tek_mixer/src/sampler_main.rs | 2 +- crates/tek_mixer/src/track_main.rs | 2 +- crates/tek_sequencer/src/arranger_main.rs | 28 ++++---- crates/tek_sequencer/src/transport_main.rs | 2 +- 7 files changed, 58 insertions(+), 58 deletions(-) diff --git a/crates/tek_mixer/src/lib.rs b/crates/tek_mixer/src/lib.rs index 71117c39..8d1f5dd4 100644 --- a/crates/tek_mixer/src/lib.rs +++ b/crates/tek_mixer/src/lib.rs @@ -26,5 +26,6 @@ submod! { sampler sampler_edn sampler_view + sampler_handle voice } diff --git a/crates/tek_mixer/src/mixer_main.rs b/crates/tek_mixer/src/mixer_main.rs index da46da48..3d6ae965 100644 --- a/crates/tek_mixer/src/mixer_main.rs +++ b/crates/tek_mixer/src/mixer_main.rs @@ -1,6 +1,6 @@ //! Multi-track mixer include!("lib.rs"); pub fn main () -> Usually<()> { - tek_core::run(Arc::new(RwLock::new(crate::Mixer::from_args()?)))?; + Tui::run(Arc::new(RwLock::new(crate::Mixer::from_args()?)))?; Ok(()) } diff --git a/crates/tek_mixer/src/sampler_handle.rs b/crates/tek_mixer/src/sampler_handle.rs index 9bb41782..26d3b0a0 100644 --- a/crates/tek_mixer/src/sampler_handle.rs +++ b/crates/tek_mixer/src/sampler_handle.rs @@ -1,45 +1,44 @@ use crate::*; impl Handle for Sampler { fn handle (&mut self, from: &Tui) -> Perhaps { - handle_keymap(self, &from.event(), KEYMAP_SAMPLER) + match from.event() { + key!(KeyCode::Up) => { + self.cursor.0 = if self.cursor.0 == 0 { + self.mapped.len() + self.unmapped.len() - 1 + } else { + self.cursor.0 - 1 + }; + Ok(Some(true)) + }, + key!(KeyCode::Down) => { + self.cursor.0 = (self.cursor.0 + 1) % (self.mapped.len() + self.unmapped.len()); + Ok(Some(true)) + }, + key!(KeyCode::Char('p')) => { + if let Some(sample) = self.sample() { + self.voices.write().unwrap().push(Sample::play(sample, 0, &100.into())); + } + Ok(Some(true)) + }, + key!(KeyCode::Char('a')) => { + let sample = Arc::new(RwLock::new(Sample::new("", 0, 0, vec![]))); + *self.modal.lock().unwrap() = Some(Exit::boxed(AddSampleModal::new(&sample, &self.voices)?)); + self.unmapped.push(sample); + Ok(Some(true)) + }, + key!(KeyCode::Char('r')) => { + if let Some(sample) = self.sample() { + *self.modal.lock().unwrap() = Some(Exit::boxed(AddSampleModal::new(&sample, &self.voices)?)); + } + Ok(Some(true)) + }, + key!(KeyCode::Enter) => { + if let Some(sample) = self.sample() { + self.editing = Some(sample.clone()); + } + Ok(Some(true)) + } + _ => Ok(None) + } } } -/// Key bindings for sampler device. -pub const KEYMAP_SAMPLER: &'static [KeyBinding] = keymap!(Sampler { - [Up, NONE, "/sampler/cursor/up", "move cursor up", |state: &mut Sampler| { - state.cursor.0 = if state.cursor.0 == 0 { - state.mapped.len() + state.unmapped.len() - 1 - } else { - state.cursor.0 - 1 - }; - Ok(true) - }], - [Down, NONE, "/sampler/cursor/down", "move cursor down", |state: &mut Sampler| { - state.cursor.0 = (state.cursor.0 + 1) % (state.mapped.len() + state.unmapped.len()); - Ok(true) - }], - [Char('p'), NONE, "/sampler/play", "play current sample", |state: &mut Sampler| { - if let Some(sample) = state.sample() { - state.voices.write().unwrap().push(Sample::play(sample, 0, &100.into())); - } - Ok(true) - }], - [Char('a'), NONE, "/sampler/add", "add a new sample", |state: &mut Sampler| { - let sample = Arc::new(RwLock::new(Sample::new("", 0, 0, vec![]))); - *state.modal.lock().unwrap() = Some(Exit::boxed(AddSampleModal::new(&sample, &state.voices)?)); - state.unmapped.push(sample); - Ok(true) - }], - [Char('r'), NONE, "/sampler/replace", "replace selected sample", |state: &mut Sampler| { - if let Some(sample) = state.sample() { - *state.modal.lock().unwrap() = Some(Exit::boxed(AddSampleModal::new(&sample, &state.voices)?)); - } - Ok(true) - }], - [Enter, NONE, "/sampler/edit", "edit selected sample", |state: &mut Sampler| { - if let Some(sample) = state.sample() { - state.editing = Some(sample.clone()); - } - Ok(true) - }], -}); diff --git a/crates/tek_mixer/src/sampler_main.rs b/crates/tek_mixer/src/sampler_main.rs index c39eeacd..edcbe8c6 100644 --- a/crates/tek_mixer/src/sampler_main.rs +++ b/crates/tek_mixer/src/sampler_main.rs @@ -1,6 +1,6 @@ //! Sample player include!("lib.rs"); pub fn main () -> Usually<()> { - tek_core::run(Arc::new(RwLock::new(crate::Sampler::new("", None)?)))?; + Tui::run(Arc::new(RwLock::new(crate::Sampler::new("", None)?)))?; Ok(()) } diff --git a/crates/tek_mixer/src/track_main.rs b/crates/tek_mixer/src/track_main.rs index ecb93cb7..6448e447 100644 --- a/crates/tek_mixer/src/track_main.rs +++ b/crates/tek_mixer/src/track_main.rs @@ -1,6 +1,6 @@ //! Multi-track mixer include!("lib.rs"); pub fn main () -> Usually<()> { - tek_core::run(Arc::new(RwLock::new(crate::Track::new("")?)))?; + Tui::run(Arc::new(RwLock::new(crate::Track::new("")?)))?; Ok(()) } diff --git a/crates/tek_sequencer/src/arranger_main.rs b/crates/tek_sequencer/src/arranger_main.rs index dee5272f..0259c944 100644 --- a/crates/tek_sequencer/src/arranger_main.rs +++ b/crates/tek_sequencer/src/arranger_main.rs @@ -104,32 +104,32 @@ impl Handle for ArrangerStandalone { } }, key!(KeyCode::Tab) => { - self.arranger.focus_next(); + self.focus_next(); Ok(Some(true)) }, key!(KeyCode::BackTab) => { - self.arranger.focus_prev(); + self.focus_prev(); Ok(Some(true)) }, key!(KeyCode::Down) => { if self.focus == 0 || ( self.focus == 1 && self.arranger.is_last_row() ) { - self.arranger.focus_next(); + self.focus_next(); Ok(Some(true)) } else { - self.arranger.focused_mut().handle(from) + self.focused_mut().handle(from) } }, key!(KeyCode::Up) => { if self.focus == 1 && self.arranger.is_first_row() { - self.arranger.focus_prev(); + self.focus_prev(); Ok(Some(true)) } else { - self.arranger.focused_mut().handle(from) + self.focused_mut().handle(from) } }, - _ => self.arranger.focused_mut().handle(from) + _ => self.focused_mut().handle(from) } } } @@ -142,23 +142,23 @@ impl Handle for SequencerProxy { } } -impl Focus<2, E: Engine> for ArrangerStandalone { +impl Focus<2, Tui> for ArrangerStandalone { fn focus (&self) -> usize { self.focus } fn focus_mut (&mut self) -> &mut usize { &mut self.focus } - fn focusable (&self) -> [&dyn Focusable;2] { + fn focusable (&self) -> [&dyn Focusable;2] { [ - &self.transport as &dyn Focusable, - &self.arranger as &dyn Focusable, + &self.transport as &dyn Focusable, + &self.arranger as &dyn Focusable, ] } - fn focusable_mut (&mut self) -> [&mut dyn Focusable;2] { + fn focusable_mut (&mut self) -> [&mut dyn Focusable;2] { [ - &mut self.transport as &mut dyn Focusable, - &mut self.arranger as &mut dyn Focusable, + &mut self.transport as &mut dyn Focusable, + &mut self.arranger as &mut dyn Focusable, ] } } diff --git a/crates/tek_sequencer/src/transport_main.rs b/crates/tek_sequencer/src/transport_main.rs index d5118d75..f8d2edc6 100644 --- a/crates/tek_sequencer/src/transport_main.rs +++ b/crates/tek_sequencer/src/transport_main.rs @@ -1,6 +1,6 @@ include!("lib.rs"); /// Application entrypoint. pub fn main () -> Usually<()> { - run(TransportToolbar::standalone()?)?; + Tui::run(TransportToolbar::standalone()?)?; Ok(()) }