mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 04:06:45 +01:00
factor keys into odules
This commit is contained in:
parent
0999c42f12
commit
6bb73e3896
7 changed files with 176 additions and 165 deletions
164
tek/src/keys.rs
164
tek/src/keys.rs
|
|
@ -189,167 +189,3 @@ command!(|self: TekCommand, app: Tek|match self {
|
||||||
},
|
},
|
||||||
_ => todo!("{self:?}")
|
_ => todo!("{self:?}")
|
||||||
});
|
});
|
||||||
#[derive(Clone, Debug)] pub enum InputCommand { Add }
|
|
||||||
atom_command!(InputCommand: |app: Tek| {
|
|
||||||
("add" [] Some(Self::Add))
|
|
||||||
});
|
|
||||||
command!(|self: InputCommand, app: Tek|match self {
|
|
||||||
Self::Add => {
|
|
||||||
app.midi_ins.push(JackMidiIn::new(&app.jack, &format!("M/{}", app.midi_ins.len()), &[])?);
|
|
||||||
None
|
|
||||||
},
|
|
||||||
});
|
|
||||||
#[derive(Clone, Debug)] pub enum OutputCommand { Add }
|
|
||||||
atom_command!(OutputCommand: |app: Tek| {
|
|
||||||
("add" [] Some(Self::Add))
|
|
||||||
});
|
|
||||||
command!(|self: OutputCommand, app: Tek|match self {
|
|
||||||
Self::Add => {
|
|
||||||
app.midi_outs.push(JackMidiOut::new(&app.jack, &format!("{}/M", app.midi_outs.len()), &[])?);
|
|
||||||
None
|
|
||||||
},
|
|
||||||
});
|
|
||||||
#[derive(Clone, Debug)] pub enum TrackCommand {
|
|
||||||
Add,
|
|
||||||
Del(usize),
|
|
||||||
Stop(usize),
|
|
||||||
Swap(usize, usize),
|
|
||||||
SetSize(usize),
|
|
||||||
SetZoom(usize),
|
|
||||||
SetColor(usize, ItemPalette),
|
|
||||||
TogglePlay,
|
|
||||||
ToggleSolo,
|
|
||||||
ToggleRecord,
|
|
||||||
ToggleMonitor,
|
|
||||||
}
|
|
||||||
atom_command!(TrackCommand: |app: Tek| {
|
|
||||||
("add" [] Some(Self::Add))
|
|
||||||
("size" [a: usize] Some(Self::SetSize(a.unwrap())))
|
|
||||||
("zoom" [a: usize] Some(Self::SetZoom(a.unwrap())))
|
|
||||||
("color" [a: usize] Some(Self::SetColor(a.unwrap(), ItemPalette::random())))
|
|
||||||
("del" [a: usize] Some(Self::Del(a.unwrap())))
|
|
||||||
("stop" [a: usize] Some(Self::Stop(a.unwrap())))
|
|
||||||
("swap" [a: usize, b: usize] Some(Self::Swap(a.unwrap(), b.unwrap())))
|
|
||||||
("play" [] Some(Self::TogglePlay))
|
|
||||||
("solo" [] Some(Self::ToggleSolo))
|
|
||||||
("rec" [] Some(Self::ToggleRecord))
|
|
||||||
("mon" [] Some(Self::ToggleMonitor))
|
|
||||||
});
|
|
||||||
command!(|self: TrackCommand, app: Tek|match self {
|
|
||||||
Self::Add => {
|
|
||||||
use Selection::*;
|
|
||||||
let index = app.track_add(None, None, &[], &[])?.0;
|
|
||||||
app.selected = match app.selected {
|
|
||||||
Track(t) => Track(index),
|
|
||||||
Clip(t, s) => Clip(index, s),
|
|
||||||
_ => app.selected
|
|
||||||
};
|
|
||||||
Some(Self::Del(index))
|
|
||||||
},
|
|
||||||
Self::Del(index) => { app.track_del(index); None },
|
|
||||||
Self::Stop(track) => { app.tracks[track].player.enqueue_next(None); None },
|
|
||||||
Self::SetColor(index, color) => {
|
|
||||||
let old = app.tracks[index].color;
|
|
||||||
app.tracks[index].color = color;
|
|
||||||
Some(Self::SetColor(index, old))
|
|
||||||
},
|
|
||||||
Self::TogglePlay => {
|
|
||||||
Some(Self::TogglePlay)
|
|
||||||
},
|
|
||||||
Self::ToggleSolo => {
|
|
||||||
Some(Self::ToggleSolo)
|
|
||||||
},
|
|
||||||
Self::ToggleRecord => {
|
|
||||||
if let Some(t) = app.selected.track() {
|
|
||||||
app.tracks[t-1].player.recording = !app.tracks[t-1].player.recording;
|
|
||||||
}
|
|
||||||
Some(Self::ToggleRecord)
|
|
||||||
},
|
|
||||||
Self::ToggleMonitor => {
|
|
||||||
if let Some(t) = app.selected.track() {
|
|
||||||
app.tracks[t-1].player.monitoring = !app.tracks[t-1].player.monitoring;
|
|
||||||
}
|
|
||||||
Some(Self::ToggleMonitor)
|
|
||||||
},
|
|
||||||
_ => None
|
|
||||||
});
|
|
||||||
#[derive(Clone, Debug)] pub enum SceneCommand {
|
|
||||||
Add,
|
|
||||||
Del(usize),
|
|
||||||
Swap(usize, usize),
|
|
||||||
SetSize(usize),
|
|
||||||
SetZoom(usize),
|
|
||||||
SetColor(usize, ItemPalette),
|
|
||||||
Enqueue(usize),
|
|
||||||
}
|
|
||||||
atom_command!(SceneCommand: |app: Tek| {
|
|
||||||
("add" [] Some(Self::Add))
|
|
||||||
("del" [a: usize] Some(Self::Del(0)))
|
|
||||||
("zoom" [a: usize] Some(Self::SetZoom(a.unwrap())))
|
|
||||||
("color" [a: usize] Some(Self::SetColor(a.unwrap(), ItemPalette::G[128])))
|
|
||||||
("enqueue" [a: usize] Some(Self::Enqueue(a.unwrap())))
|
|
||||||
("swap" [a: usize, b: usize] Some(Self::Swap(a.unwrap(), b.unwrap())))
|
|
||||||
});
|
|
||||||
command!(|self: SceneCommand, app: Tek|match self {
|
|
||||||
Self::Add => {
|
|
||||||
use Selection::*;
|
|
||||||
let index = app.scene_add(None, None)?.0;
|
|
||||||
app.selected = match app.selected {
|
|
||||||
Scene(s) => Scene(index),
|
|
||||||
Clip(t, s) => Clip(t, index),
|
|
||||||
_ => app.selected
|
|
||||||
};
|
|
||||||
Some(Self::Del(index))
|
|
||||||
},
|
|
||||||
Self::Del(index) => { app.scene_del(index); None },
|
|
||||||
Self::SetColor(index, color) => {
|
|
||||||
let old = app.scenes[index].color;
|
|
||||||
app.scenes[index].color = color;
|
|
||||||
Some(Self::SetColor(index, old))
|
|
||||||
},
|
|
||||||
Self::Enqueue(scene) => {
|
|
||||||
for track in 0..app.tracks.len() {
|
|
||||||
app.tracks[track].player.enqueue_next(app.scenes[scene].clips[track].as_ref());
|
|
||||||
}
|
|
||||||
None
|
|
||||||
},
|
|
||||||
_ => None
|
|
||||||
});
|
|
||||||
#[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
|
|
||||||
});
|
|
||||||
|
|
|
||||||
39
tek/src/keys_clip.rs
Normal file
39
tek/src/keys_clip.rs
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
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
|
||||||
|
});
|
||||||
11
tek/src/keys_ins.rs
Normal file
11
tek/src/keys_ins.rs
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
use crate::*;
|
||||||
|
#[derive(Clone, Debug)] pub enum InputCommand { Add }
|
||||||
|
atom_command!(InputCommand: |app: Tek| {
|
||||||
|
("add" [] Some(Self::Add))
|
||||||
|
});
|
||||||
|
command!(|self: InputCommand, app: Tek|match self {
|
||||||
|
Self::Add => {
|
||||||
|
app.midi_ins.push(JackMidiIn::new(&app.jack, &format!("M/{}", app.midi_ins.len()), &[])?);
|
||||||
|
None
|
||||||
|
},
|
||||||
|
});
|
||||||
11
tek/src/keys_outs.rs
Normal file
11
tek/src/keys_outs.rs
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
use crate::*;
|
||||||
|
#[derive(Clone, Debug)] pub enum OutputCommand { Add }
|
||||||
|
atom_command!(OutputCommand: |app: Tek| {
|
||||||
|
("add" [] Some(Self::Add))
|
||||||
|
});
|
||||||
|
command!(|self: OutputCommand, app: Tek|match self {
|
||||||
|
Self::Add => {
|
||||||
|
app.midi_outs.push(JackMidiOut::new(&app.jack, &format!("{}/M", app.midi_outs.len()), &[])?);
|
||||||
|
None
|
||||||
|
},
|
||||||
|
});
|
||||||
43
tek/src/keys_scene.rs
Normal file
43
tek/src/keys_scene.rs
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
use crate::*;
|
||||||
|
#[derive(Clone, Debug)] pub enum SceneCommand {
|
||||||
|
Add,
|
||||||
|
Del(usize),
|
||||||
|
Swap(usize, usize),
|
||||||
|
SetSize(usize),
|
||||||
|
SetZoom(usize),
|
||||||
|
SetColor(usize, ItemPalette),
|
||||||
|
Enqueue(usize),
|
||||||
|
}
|
||||||
|
atom_command!(SceneCommand: |app: Tek| {
|
||||||
|
("add" [] Some(Self::Add))
|
||||||
|
("del" [a: usize] Some(Self::Del(0)))
|
||||||
|
("zoom" [a: usize] Some(Self::SetZoom(a.unwrap())))
|
||||||
|
("color" [a: usize] Some(Self::SetColor(a.unwrap(), ItemPalette::G[128])))
|
||||||
|
("enqueue" [a: usize] Some(Self::Enqueue(a.unwrap())))
|
||||||
|
("swap" [a: usize, b: usize] Some(Self::Swap(a.unwrap(), b.unwrap())))
|
||||||
|
});
|
||||||
|
command!(|self: SceneCommand, app: Tek|match self {
|
||||||
|
Self::Add => {
|
||||||
|
use Selection::*;
|
||||||
|
let index = app.scene_add(None, None)?.0;
|
||||||
|
app.selected = match app.selected {
|
||||||
|
Scene(s) => Scene(index),
|
||||||
|
Clip(t, s) => Clip(t, index),
|
||||||
|
_ => app.selected
|
||||||
|
};
|
||||||
|
Some(Self::Del(index))
|
||||||
|
},
|
||||||
|
Self::Del(index) => { app.scene_del(index); None },
|
||||||
|
Self::SetColor(index, color) => {
|
||||||
|
let old = app.scenes[index].color;
|
||||||
|
app.scenes[index].color = color;
|
||||||
|
Some(Self::SetColor(index, old))
|
||||||
|
},
|
||||||
|
Self::Enqueue(scene) => {
|
||||||
|
for track in 0..app.tracks.len() {
|
||||||
|
app.tracks[track].player.enqueue_next(app.scenes[scene].clips[track].as_ref());
|
||||||
|
}
|
||||||
|
None
|
||||||
|
},
|
||||||
|
_ => None
|
||||||
|
});
|
||||||
65
tek/src/keys_track.rs
Normal file
65
tek/src/keys_track.rs
Normal file
|
|
@ -0,0 +1,65 @@
|
||||||
|
use crate::*;
|
||||||
|
#[derive(Clone, Debug)] pub enum TrackCommand {
|
||||||
|
Add,
|
||||||
|
Del(usize),
|
||||||
|
Stop(usize),
|
||||||
|
Swap(usize, usize),
|
||||||
|
SetSize(usize),
|
||||||
|
SetZoom(usize),
|
||||||
|
SetColor(usize, ItemPalette),
|
||||||
|
TogglePlay,
|
||||||
|
ToggleSolo,
|
||||||
|
ToggleRecord,
|
||||||
|
ToggleMonitor,
|
||||||
|
}
|
||||||
|
atom_command!(TrackCommand: |app: Tek| {
|
||||||
|
("add" [] Some(Self::Add))
|
||||||
|
("size" [a: usize] Some(Self::SetSize(a.unwrap())))
|
||||||
|
("zoom" [a: usize] Some(Self::SetZoom(a.unwrap())))
|
||||||
|
("color" [a: usize] Some(Self::SetColor(a.unwrap(), ItemPalette::random())))
|
||||||
|
("del" [a: usize] Some(Self::Del(a.unwrap())))
|
||||||
|
("stop" [a: usize] Some(Self::Stop(a.unwrap())))
|
||||||
|
("swap" [a: usize, b: usize] Some(Self::Swap(a.unwrap(), b.unwrap())))
|
||||||
|
("play" [] Some(Self::TogglePlay))
|
||||||
|
("solo" [] Some(Self::ToggleSolo))
|
||||||
|
("rec" [] Some(Self::ToggleRecord))
|
||||||
|
("mon" [] Some(Self::ToggleMonitor))
|
||||||
|
});
|
||||||
|
command!(|self: TrackCommand, app: Tek|match self {
|
||||||
|
Self::Add => {
|
||||||
|
use Selection::*;
|
||||||
|
let index = app.track_add(None, None, &[], &[])?.0;
|
||||||
|
app.selected = match app.selected {
|
||||||
|
Track(t) => Track(index),
|
||||||
|
Clip(t, s) => Clip(index, s),
|
||||||
|
_ => app.selected
|
||||||
|
};
|
||||||
|
Some(Self::Del(index))
|
||||||
|
},
|
||||||
|
Self::Del(index) => { app.track_del(index); None },
|
||||||
|
Self::Stop(track) => { app.tracks[track].player.enqueue_next(None); None },
|
||||||
|
Self::SetColor(index, color) => {
|
||||||
|
let old = app.tracks[index].color;
|
||||||
|
app.tracks[index].color = color;
|
||||||
|
Some(Self::SetColor(index, old))
|
||||||
|
},
|
||||||
|
Self::TogglePlay => {
|
||||||
|
Some(Self::TogglePlay)
|
||||||
|
},
|
||||||
|
Self::ToggleSolo => {
|
||||||
|
Some(Self::ToggleSolo)
|
||||||
|
},
|
||||||
|
Self::ToggleRecord => {
|
||||||
|
if let Some(t) = app.selected.track() {
|
||||||
|
app.tracks[t-1].player.recording = !app.tracks[t-1].player.recording;
|
||||||
|
}
|
||||||
|
Some(Self::ToggleRecord)
|
||||||
|
},
|
||||||
|
Self::ToggleMonitor => {
|
||||||
|
if let Some(t) = app.selected.track() {
|
||||||
|
app.tracks[t-1].player.monitoring = !app.tracks[t-1].player.monitoring;
|
||||||
|
}
|
||||||
|
Some(Self::ToggleMonitor)
|
||||||
|
},
|
||||||
|
_ => None
|
||||||
|
});
|
||||||
|
|
@ -7,9 +7,15 @@
|
||||||
#![feature(type_alias_impl_trait)]
|
#![feature(type_alias_impl_trait)]
|
||||||
#![feature(trait_alias)]
|
#![feature(trait_alias)]
|
||||||
mod cli; pub use self::cli::*;
|
mod cli; pub use self::cli::*;
|
||||||
mod keys; pub use self::keys::*;
|
|
||||||
mod audio; pub use self::audio::*;
|
mod audio; pub use self::audio::*;
|
||||||
|
|
||||||
|
mod keys; pub use self::keys::*;
|
||||||
|
mod keys_clip; pub use self::keys_clip::*;
|
||||||
|
mod keys_ins; pub use self::keys_ins::*;
|
||||||
|
mod keys_outs; pub use self::keys_outs::*;
|
||||||
|
mod keys_scene; pub use self::keys_scene::*;
|
||||||
|
mod keys_track; pub use self::keys_track::*;
|
||||||
|
|
||||||
mod model; pub use self::model::*;
|
mod model; pub use self::model::*;
|
||||||
mod model_track; pub use self::model_track::*;
|
mod model_track; pub use self::model_track::*;
|
||||||
mod model_scene; pub use self::model_scene::*;
|
mod model_scene; pub use self::model_scene::*;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue