use crate::*; #[derive(Clone, Debug)] pub enum ClipCommand { Get(usize, usize), Put(usize, usize, Option>>), Enqueue(usize, usize), Edit(Option>>), SetLoop(usize, usize, bool), SetColor(usize, usize, ItemPalette), } atom_command!(ClipCommand: |app: Tek| { ("get" [a: usize, b: usize] Some(Self::Get(a.unwrap(), b.unwrap()))) ("put" [a: usize, b: usize, c: Option>>] Some(Self::Put(a.unwrap(), b.unwrap(), c.unwrap()))) ("enqueue" [a: usize, b: usize] Some(Self::Enqueue(a.unwrap(), b.unwrap()))) ("edit" [a: Option>>] Some(Self::Edit(a.unwrap()))) ("loop" [a: usize, b: usize, c: bool] Some(Self::SetLoop(a.unwrap(), b.unwrap(), c.unwrap()))) ("color" [a: usize, b: usize] Some(Self::SetColor(a.unwrap(), b.unwrap(), ItemPalette::random()))) }); command!(|self: ClipCommand, app: Tek|match self { Self::Get(track, scene) => { todo!() }, Self::Put(track, scene, clip) => { let old = app.scenes[scene].clips[track].clone(); app.scenes[scene].clips[track] = clip; Some(Self::Put(track, scene, old)) }, Self::Enqueue(track, scene) => { app.tracks[track].player.enqueue_next(app.scenes[scene].clips[track].as_ref()); None }, Self::SetColor(track, scene, color) => { app.scenes[scene].clips[track].as_ref().map(|clip|{ let mut clip = clip.write().unwrap(); let old = clip.color.clone(); clip.color = color.clone(); panic!("{color:?} {old:?}"); Self::SetColor(track, scene, old) }) }, _ => None });