mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-08 04:36:45 +01:00
39 lines
1.6 KiB
Rust
39 lines
1.6 KiB
Rust
use crate::*;
|
|
#[derive(Clone, Debug)] pub enum ClipCommand {
|
|
Get(usize, usize),
|
|
Put(usize, usize, Option<Arc<RwLock<MidiClip>>>),
|
|
Enqueue(usize, usize),
|
|
Edit(Option<Arc<RwLock<MidiClip>>>),
|
|
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<Arc<RwLock<MidiClip>>>] Some(Self::Put(a.unwrap(), b.unwrap(), c.unwrap())))
|
|
("enqueue" [a: usize, b: usize] Some(Self::Enqueue(a.unwrap(), b.unwrap())))
|
|
("edit" [a: Option<Arc<RwLock<MidiClip>>>] 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
|
|
});
|