diff --git a/crates/tek_sequencer/src/sequencer.rs b/crates/tek_sequencer/src/sequencer.rs index f3c371b9..d8099323 100644 --- a/crates/tek_sequencer/src/sequencer.rs +++ b/crates/tek_sequencer/src/sequencer.rs @@ -140,6 +140,14 @@ impl PhrasePool { pub fn phrase (&self) -> &Arc> { &self.phrases[self.phrase] } + pub fn index_of (&self, phrase: &Phrase) -> Option { + for i in 0..self.phrases.len() { + if *self.phrases[i].read().unwrap() == *phrase { + return Some(i) + } + } + return None + } } impl PhraseEditor { pub fn new () -> Self { @@ -179,6 +187,11 @@ impl Phrase { color: color.unwrap_or_else(random_color) } } + pub fn duplicate (&self) -> Self { + let mut clone = self.clone(); + clone.uuid = uuid::Uuid::new_v4(); + clone + } pub fn toggle_loop (&mut self) { self.loop_on = !self.loop_on; } diff --git a/crates/tek_sequencer/src/sequencer_cmd.rs b/crates/tek_sequencer/src/sequencer_cmd.rs index 7bea9896..6484b2d1 100644 --- a/crates/tek_sequencer/src/sequencer_cmd.rs +++ b/crates/tek_sequencer/src/sequencer_cmd.rs @@ -67,7 +67,7 @@ impl Handle for PhrasePool { self.phrase += 1; }, key!(KeyCode::Char('d')) => { // insert duplicate - let mut phrase = (*self.phrases[self.phrase].read().unwrap()).clone(); + let mut phrase = self.phrases[self.phrase].read().unwrap().duplicate(); phrase.color = random_color_near(phrase.color, 0.2); self.phrases.insert(self.phrase + 1, Arc::new(RwLock::new(phrase))); self.phrase += 1;