diff --git a/crates/app/src/keys.rs b/crates/app/src/keys.rs index 25db6d9a..5edccb38 100644 --- a/crates/app/src/keys.rs +++ b/crates/app/src/keys.rs @@ -1,9 +1,4 @@ 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({ // If editing, editor keys take priority if self.is_editing() { @@ -47,6 +42,42 @@ handle!(TuiIn: |self: Tek, input|Ok({ Track(TrackCommand), Zoom(Option), } +#[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>>), + Enqueue(usize, usize), + Edit(Option>>), + SetLoop(usize, usize, bool), + SetColor(usize, usize, ItemPalette), +} command!(|self: TekCommand, app: Tek|match self { Self::Zoom(_) => { println!("\n\rtodo: global zoom"); None }, Self::History(delta) => { println!("\n\rtodo: undo/redo"); None }, @@ -175,3 +206,100 @@ command!(|self: TekCommand, app: Tek|match 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 +}); diff --git a/crates/app/src/keys/keys_clip.rs b/crates/app/src/keys/keys_clip.rs deleted file mode 100644 index 2fb59fae..00000000 --- a/crates/app/src/keys/keys_clip.rs +++ /dev/null @@ -1,31 +0,0 @@ -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), -} -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 -}); diff --git a/crates/app/src/keys/keys_ins.rs b/crates/app/src/keys/keys_ins.rs deleted file mode 100644 index 4460ce72..00000000 --- a/crates/app/src/keys/keys_ins.rs +++ /dev/null @@ -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 - }, -}); diff --git a/crates/app/src/keys/keys_outs.rs b/crates/app/src/keys/keys_outs.rs deleted file mode 100644 index a39ce29c..00000000 --- a/crates/app/src/keys/keys_outs.rs +++ /dev/null @@ -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 - }, -}); diff --git a/crates/app/src/keys/keys_scene.rs b/crates/app/src/keys/keys_scene.rs deleted file mode 100644 index a6c7c244..00000000 --- a/crates/app/src/keys/keys_scene.rs +++ /dev/null @@ -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 -}); diff --git a/crates/app/src/keys/keys_track.rs b/crates/app/src/keys/keys_track.rs deleted file mode 100644 index 37bea45f..00000000 --- a/crates/app/src/keys/keys_track.rs +++ /dev/null @@ -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 -});