mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-08 20:56:43 +01:00
collect command defs in 1 module
This commit is contained in:
parent
b8d6194a72
commit
4b998eaae0
6 changed files with 133 additions and 139 deletions
|
|
@ -1,9 +1,4 @@
|
||||||
use crate::*;
|
use crate::*;
|
||||||
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::*;
|
|
||||||
handle!(TuiIn: |self: Tek, input|Ok({
|
handle!(TuiIn: |self: Tek, input|Ok({
|
||||||
// If editing, editor keys take priority
|
// If editing, editor keys take priority
|
||||||
if self.is_editing() {
|
if self.is_editing() {
|
||||||
|
|
@ -47,6 +42,42 @@ handle!(TuiIn: |self: Tek, input|Ok({
|
||||||
Track(TrackCommand),
|
Track(TrackCommand),
|
||||||
Zoom(Option<usize>),
|
Zoom(Option<usize>),
|
||||||
}
|
}
|
||||||
|
#[derive(Clone, Debug)] pub enum InputCommand {
|
||||||
|
Add
|
||||||
|
}
|
||||||
|
#[derive(Clone, Debug)] pub enum OutputCommand {
|
||||||
|
Add
|
||||||
|
}
|
||||||
|
#[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,
|
||||||
|
}
|
||||||
|
#[derive(Clone, Debug)] pub enum SceneCommand {
|
||||||
|
Add,
|
||||||
|
Del(usize),
|
||||||
|
Swap(usize, usize),
|
||||||
|
SetSize(usize),
|
||||||
|
SetZoom(usize),
|
||||||
|
SetColor(usize, ItemPalette),
|
||||||
|
Enqueue(usize),
|
||||||
|
}
|
||||||
|
#[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: TekCommand, app: Tek|match self {
|
command!(|self: TekCommand, app: Tek|match self {
|
||||||
Self::Zoom(_) => { println!("\n\rtodo: global zoom"); None },
|
Self::Zoom(_) => { println!("\n\rtodo: global zoom"); None },
|
||||||
Self::History(delta) => { println!("\n\rtodo: undo/redo"); None },
|
Self::History(delta) => { println!("\n\rtodo: undo/redo"); None },
|
||||||
|
|
@ -175,3 +206,100 @@ command!(|self: TekCommand, app: Tek|match self {
|
||||||
},
|
},
|
||||||
_ => todo!("{self:?}")
|
_ => todo!("{self:?}")
|
||||||
});
|
});
|
||||||
|
command!(|self: InputCommand, app: Tek|match self {
|
||||||
|
Self::Add => {
|
||||||
|
app.midi_ins.push(JackMidiIn::new(&app.jack, &format!("M/{}", app.midi_ins.len()), &[])?);
|
||||||
|
None
|
||||||
|
},
|
||||||
|
});
|
||||||
|
command!(|self: OutputCommand, app: Tek|match self {
|
||||||
|
Self::Add => {
|
||||||
|
app.midi_outs.push(JackMidiOut::new(&app.jack, &format!("{}/M", app.midi_outs.len()), &[])?);
|
||||||
|
None
|
||||||
|
},
|
||||||
|
});
|
||||||
|
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
|
||||||
|
});
|
||||||
|
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
|
||||||
|
});
|
||||||
|
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
|
||||||
|
});
|
||||||
|
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
||||||
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
|
|
||||||
});
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
use crate::*;
|
|
||||||
#[derive(Clone, Debug)] pub enum InputCommand { 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
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
use crate::*;
|
|
||||||
#[derive(Clone, Debug)] pub enum OutputCommand { 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
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
||||||
use crate::*;
|
|
||||||
#[derive(Clone, Debug)] pub enum SceneCommand {
|
|
||||||
Add,
|
|
||||||
Del(usize),
|
|
||||||
Swap(usize, usize),
|
|
||||||
SetSize(usize),
|
|
||||||
SetZoom(usize),
|
|
||||||
SetColor(usize, ItemPalette),
|
|
||||||
Enqueue(usize),
|
|
||||||
}
|
|
||||||
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
|
|
||||||
});
|
|
||||||
|
|
@ -1,52 +0,0 @@
|
||||||
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,
|
|
||||||
}
|
|
||||||
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
|
|
||||||
});
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue