diff --git a/tek/src/lib.rs b/tek/src/lib.rs index 07991717..03e41672 100644 --- a/tek/src/lib.rs +++ b/tek/src/lib.rs @@ -241,26 +241,47 @@ impl Tek { Ok(()) } fn tracks_add ( - &mut self, - count: usize, - width: usize, - midi_from: &[PortConnection], - midi_to: &[PortConnection], + &mut self, count: usize, width: usize, + midi_from: &[PortConnection], midi_to: &[PortConnection], ) -> Usually<()> { let jack = self.jack().clone(); let track_color_1 = ItemColor::random(); let track_color_2 = ItemColor::random(); for i in 0..count { - let color = track_color_1.mix(track_color_2, i as f32 / count as f32).into(); - let mut track = self.track_add(None, Some(color))?.1; + let color = track_color_1.mix(track_color_2, i as f32 / count as f32).into(); + let mut track = self.track_add(None, Some(color), midi_from, midi_to)?.1; track.width = width; - let port = JackPort::::new(&jack, &format!("{}I", &track.name), midi_from)?; - track.player.midi_ins.push(port); - let port = JackPort::::new(&jack, &format!("{}O", &track.name), midi_to)?; - track.player.midi_outs.push(port); } Ok(()) } + fn track_add ( + &mut self, name: Option<&str>, color: Option, + midi_from: &[PortConnection], midi_to: &[PortConnection], + ) -> Usually<(usize, &mut Track)> { + let name = name.map_or_else(||self.track_next_name(), |x|x.to_string().into()); + let mut track = Track { + width: (name.len() + 2).max(9), + color: color.unwrap_or_else(ItemPalette::random), + player: MidiPlayer::from(self.clock()), + name, + ..Default::default() + }; + track.player.midi_ins.push(JackPort::::new( + &self.jack, &format!("{}I", &track.name), midi_from + )?); + track.player.midi_outs.push(JackPort::::new( + &self.jack, &format!("{}O", &track.name), midi_to + )?); + self.tracks_mut().push(track); + let len = self.tracks().len(); + let index = len - 1; + for scene in self.scenes_mut().iter_mut() { + while scene.clips.len() < len { + scene.clips.push(None); + } + } + Ok((index, &mut self.tracks_mut()[index])) + } fn new_groovebox ( jack: &Arc>, bpm: Option, @@ -315,10 +336,10 @@ impl Tek { color: ItemPalette::random(), clock: Clock::new(jack, bpm), midi_ins: vec![ - JackPort::::new(jack, "mi", midi_froms)? + JackPort::::new(jack, "GlobalI", midi_froms)? ], midi_outs: vec![ - JackPort::::new(jack, "mo", midi_tos)? + JackPort::::new(jack, "GlobalO", midi_tos)? ], ..Default::default() }; @@ -458,29 +479,6 @@ impl Tek { clip.write().unwrap().toggle_loop() } } - fn track_add ( - &mut self, - name: Option<&str>, - color: Option - ) -> Usually<(usize, &mut Track)> { - let name = name.map_or_else(||self.track_next_name(), |x|x.to_string().into()); - let track = Track { - width: (name.len() + 2).max(9), - color: color.unwrap_or_else(ItemPalette::random), - player: MidiPlayer::from(self.clock()), - name, - ..Default::default() - }; - self.tracks_mut().push(track); - let len = self.tracks().len(); - let index = len - 1; - for scene in self.scenes_mut().iter_mut() { - while scene.clips.len() < len { - scene.clips.push(None); - } - } - Ok((index, &mut self.tracks_mut()[index])) - } fn track_del (&mut self, index: usize) { self.tracks_mut().remove(index); for scene in self.scenes_mut().iter_mut() { @@ -890,7 +888,7 @@ edn_command!(TrackCommand: |app: Tek| { command!(|self: TrackCommand, app: Tek|match self { Self::Add => { use Selection::*; - let index = app.track_add(None, None)?.0 + 1; + let index = app.track_add(None, None, &[], &[])?.0 + 1; app.selected = match app.selected { Track(t) => Track(index), Clip(t, s) => Clip(index, s),