diff --git a/crates/tek_sequencer/src/arranger.rs b/crates/tek_sequencer/src/arranger.rs index cdedfbcd..7ab21603 100644 --- a/crates/tek_sequencer/src/arranger.rs +++ b/crates/tek_sequencer/src/arranger.rs @@ -309,52 +309,30 @@ impl Arrangement { } } pub fn phrase_next (&mut self) { - todo!("phrase_next"); - //let track_index = self.selected.track(); - //let scene_index = self.selected.scene(); - //track_index - //.and_then(|index|self.tracks.get_mut(index).map(|track|(index, track))) - //.and_then(|(track_index, track)|{ - //let phrases = track.phrases.len(); - //scene_index - //.and_then(|index|self.scenes.get_mut(index)) - //.and_then(|scene|{ - //if let Some(phrase_index) = scene.clips[track_index] { - //if phrase_index >= phrases - 1 { - //scene.clips[track_index] = None; - //} else { - //scene.clips[track_index] = Some(phrase_index + 1); - //} - //} else if phrases > 0 { - //scene.clips[track_index] = Some(0); - //} - //Some(()) - //}) - //}); + if let ArrangementFocus::Clip(track, scene) = self.selected { + if let Some(ref mut phrase) = self.scenes[scene].clips[track] { + let phrases = self.phrases.read().unwrap(); + let index = phrases.index_of(&*phrase.read().unwrap()); + if let Some(index) = index { + if index < phrases.phrases.len().saturating_sub(1) { + *phrase = phrases.phrases[index + 1].clone(); + } + } + } + } } pub fn phrase_prev (&mut self) { - todo!("phrase_prev"); - //let track_index = self.selected.track(); - //let scene_index = self.selected.scene(); - //track_index - //.and_then(|index|self.tracks.get_mut(index).map(|track|(index, track))) - //.and_then(|(track_index, track)|{ - //let phrases = track.phrases.len(); - //scene_index - //.and_then(|index|self.scenes.get_mut(index)) - //.and_then(|scene|{ - //if let Some(phrase_index) = scene.clips[track_index] { - //scene.clips[track_index] = if phrase_index == 0 { - //None - //} else { - //Some(phrase_index - 1) - //}; - //} else if phrases > 0 { - //scene.clips[track_index] = Some(phrases - 1); - //} - //Some(()) - //}) - //}); + if let ArrangementFocus::Clip(track, scene) = self.selected { + if let Some(ref mut phrase) = self.scenes[scene].clips[track] { + let phrases = self.phrases.read().unwrap(); + let index = phrases.index_of(&*phrase.read().unwrap()); + if let Some(index) = index { + if index > 0 { + *phrase = phrases.phrases[index - 1].clone(); + } + } + } + } } } impl ArrangementTrack {