remove ArrangerView<'a>

This commit is contained in:
🪞👃🪞 2025-05-17 09:02:33 +03:00
parent e9b4a2ca78
commit a7f37e52cf
12 changed files with 843 additions and 949 deletions

View file

@ -76,18 +76,6 @@ impl Arrangement {
pub fn h (&self) -> u16 {
self.size.h() as u16
}
/// Height taken by all scenes.
pub fn h_scenes (&self, is_editing: bool) -> u16 {
self.scenes_with_sizes(
is_editing,
ArrangerView::H_SCENE,
ArrangerView::H_EDITOR,
self.selection().track(),
self.selection().scene(),
)
.last()
.map(|(_, _, _, y)|y as u16).unwrap_or(0)
}
/// Height taken by all inputs.
pub fn h_inputs (&self) -> u16 {
self.midi_ins_with_sizes().last().map(|(_, _, _, _, y)|y as u16).unwrap_or(0)
@ -151,6 +139,64 @@ impl Arrangement {
clip.write().unwrap().toggle_loop()
}
}
/// Add multiple tracks
pub fn tracks_add (
&mut self,
count: usize,
width: Option<usize>,
mins: &[PortConnect],
mouts: &[PortConnect],
) -> 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), mins, mouts)?.1;
if let Some(width) = width {
track.width = width;
}
}
Ok(())
}
/// Add a track
pub fn track_add (
&mut self,
name: Option<&str>,
color: Option<ItemTheme>,
mins: &[PortConnect],
mouts: &[PortConnect],
) -> Usually<(usize, &mut Track)> {
self.track_last += 1;
let name: Arc<str> = name.map_or_else(
||format!("Track{:02}", self.track_last).into(),
|x|x.to_string().into()
);
let mut track = Track {
width: (name.len() + 2).max(12),
color: color.unwrap_or_else(ItemTheme::random),
sequencer: Sequencer::new(
&format!("{name}"),
self.jack(),
Some(self.clock()),
None,
mins,
mouts
)?,
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]))
}
}
#[cfg(feature = "sampler")]
@ -164,3 +210,24 @@ impl Arrangement {
self.get_track_mut()?.sampler_mut(0)
}
}
impl ScenesView for Arrangement {
fn arrangement (&self) -> &Arrangement {
self
}
fn scenes_height (&self) -> u16 {
(self.height() as u16).saturating_sub(20)
}
fn width_side (&self) -> u16 {
(self.width() as u16 * 2 / 10).max(20)
}
fn width_mid (&self) -> u16 {
(self.width() as u16).saturating_sub(2 * self.width_side()).max(40)
}
fn scene_selected (&self) -> Option<usize> {
self.selection().scene()
}
fn track_selected (&self) -> Option<usize> {
self.selection().track()
}
}