mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 11:46:41 +01:00
31 lines
1.1 KiB
Rust
31 lines
1.1 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),
|
|
}
|
|
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
|
|
});
|