From 1b253dc27371d1e31bf22b510125e2372c733f75 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Tue, 15 Apr 2025 20:45:56 +0300 Subject: [PATCH] move expose/impose to tengri; wtf now! --- Cargo.lock | 24 +++++++++---------- Cargo.toml | 2 +- app/src/api.rs | 55 ++++++++++++++++++++++--------------------- app/src/view.rs | 30 +---------------------- midi/src/midi_edit.rs | 12 +++++----- 5 files changed, 48 insertions(+), 75 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 66b08c6b..77fcb256 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -621,9 +621,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.171" +version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "libloading" @@ -1580,8 +1580,8 @@ dependencies = [ [[package]] name = "tengri" -version = "0.7.1" -source = "git+https://codeberg.org/unspeaker/tengri?rev=3429557#34295570a278fe8ebdea1a17124a9541cbe68d38" +version = "0.9.1" +source = "git+https://codeberg.org/unspeaker/tengri?rev=6048d24#6048d24880324a6b411b6a8723ad95546e2edbe3" dependencies = [ "tengri_dsl", "tengri_input", @@ -1591,8 +1591,8 @@ dependencies = [ [[package]] name = "tengri_dsl" -version = "0.7.1" -source = "git+https://codeberg.org/unspeaker/tengri?rev=3429557#34295570a278fe8ebdea1a17124a9541cbe68d38" +version = "0.9.1" +source = "git+https://codeberg.org/unspeaker/tengri?rev=6048d24#6048d24880324a6b411b6a8723ad95546e2edbe3" dependencies = [ "itertools 0.14.0", "konst", @@ -1601,24 +1601,24 @@ dependencies = [ [[package]] name = "tengri_input" -version = "0.7.1" -source = "git+https://codeberg.org/unspeaker/tengri?rev=3429557#34295570a278fe8ebdea1a17124a9541cbe68d38" +version = "0.9.1" +source = "git+https://codeberg.org/unspeaker/tengri?rev=6048d24#6048d24880324a6b411b6a8723ad95546e2edbe3" dependencies = [ "tengri_dsl", ] [[package]] name = "tengri_output" -version = "0.7.1" -source = "git+https://codeberg.org/unspeaker/tengri?rev=3429557#34295570a278fe8ebdea1a17124a9541cbe68d38" +version = "0.9.1" +source = "git+https://codeberg.org/unspeaker/tengri?rev=6048d24#6048d24880324a6b411b6a8723ad95546e2edbe3" dependencies = [ "tengri_dsl", ] [[package]] name = "tengri_tui" -version = "0.7.1" -source = "git+https://codeberg.org/unspeaker/tengri?rev=3429557#34295570a278fe8ebdea1a17124a9541cbe68d38" +version = "0.9.1" +source = "git+https://codeberg.org/unspeaker/tengri?rev=6048d24#6048d24880324a6b411b6a8723ad95546e2edbe3" dependencies = [ "atomic_float", "better-panic", diff --git a/Cargo.toml b/Cargo.toml index 827b8fe2..2c6ad4ee 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,7 @@ lto = false [workspace.dependencies.tengri] git = "https://codeberg.org/unspeaker/tengri" -rev = "3429557" +rev = "6048d24" features = [ "tui", "dsl" ] [workspace.dependencies] diff --git a/app/src/api.rs b/app/src/api.rs index 03b03862..46805d85 100644 --- a/app/src/api.rs +++ b/app/src/api.rs @@ -1,33 +1,40 @@ use crate::*; -macro_rules! expose { - ($([$self:ident:$State:ty] { $($Type:ty => { $($pat:pat => $expr:expr),* $(,)? })* })*) => { - $(expose!(@impl [$self: $State] { $($Type => { $($pat => $expr),* })* });)* - }; - (@impl [$self:ident:$State:ty] { $($Type:ty => { $($pat:pat => $expr:expr),* $(,)? })* }) => { - $(expose!(@type $Type [$self: $State] => { $($pat => $expr),* });)* - }; - (@type bool [$self:ident: $State:ty] => { $($pat:pat => $expr:expr),* $(,)? }) => { - provide_bool!(bool: |$self: $State| { $($pat => $expr),* }); - }; - (@type isize [$self:ident: $State:ty] => { $($pat:pat => $expr:expr),* $(,)? }) => { - provide_num!(isize: |$self: $State| { $($pat => $expr),* }); - }; - (@type usize [$self:ident: $State:ty] => { $($pat:pat => $expr:expr),* $(,)? }) => { - provide_num!(usize: |$self: $State| { $($pat => $expr),* }); - }; - (@type $Type:ty [$self:ident: $State:ty] => { $($pat:pat => $expr:expr),* $(,)? }) => { - provide!($Type: |$self: $State| { $($pat => $expr),* }); - }; -} +view!(TuiOut: |self: Tek| self.size.of(View(self, self.view)); { + //":inputs" => self.view_inputs().boxed(), + //":outputs" => self.view_outputs().boxed(), + //":scene-add" => self.view_scene_add().boxed(), + //":scenes" => self.view_scenes().boxed(), + //":tracks" => self.view_tracks().boxed(), + ":nil" => Box::new("nil"), + ":transport" => self.view_transport().boxed(), + ":arranger" => ArrangerView::new(self).boxed(), + ":editor" => self.editor.as_ref().map(|e|Bsp::e(e.clip_status(), e.edit_status())).boxed(), + ":sample" => ().boxed(),//self.view_sample(self.is_editing()).boxed(), + ":sampler" => ().boxed(),//self.view_sampler(self.is_editing(), &self.editor).boxed(), + ":status" => self.view_status().boxed(), + ":pool" => self.pool.as_ref() + .map(|pool|Fixed::x(self.w_sidebar(), PoolView(self.is_editing(), pool))) + .boxed(), +}); expose!([self: Tek] { bool => {} - isize => {} + u16 => { + ":h-ins" => self.h_inputs(), + ":h-outs" => self.h_outputs(), + ":h-sample" => if self.is_editing() { 0 } else { 5 }, + ":w-samples" => if self.is_editing() { 4 } else { 11 }, + ":w-sidebar" => self.w_sidebar(), + ":y-ins" => (self.size.h() as u16).saturating_sub(self.h_inputs() + 1), + ":y-outs" => (self.size.h() as u16).saturating_sub(self.h_outputs() + 1), + ":y-samples" => if self.is_editing() { 1 } else { 0 }, + } usize => { ":scene-last" => self.scenes.len(), ":track-last" => self.tracks.len(), } + isize => {} Option => { ":scene" => self.selected.scene(), ":track" => self.selected.track(), @@ -76,12 +83,6 @@ expose!([self: Tek] { } }); -macro_rules! impose { - ([$self:ident:$Struct:ty] { $($Command:ty => $variants:tt)* }) => { - $(atom_command!($Command: |$self: $Struct| $variants);)* - }; -} - impose!([app: Tek] { TekCommand => { diff --git a/app/src/view.rs b/app/src/view.rs index 189afd56..801901bb 100644 --- a/app/src/view.rs +++ b/app/src/view.rs @@ -53,7 +53,7 @@ impl<'a> Content for ArrangerView<'a> { } impl<'a> ArrangerView<'a> { - fn new (app: &'a Tek) -> Self { + pub fn new (app: &'a Tek) -> Self { Self { app, is_editing: app.is_editing(), @@ -199,34 +199,6 @@ impl Tek { } -view!(TuiOut: |self: Tek| self.size.of(View(self, self.view)); { - //":inputs" => self.view_inputs().boxed(), - //":outputs" => self.view_outputs().boxed(), - //":scene-add" => self.view_scene_add().boxed(), - //":scenes" => self.view_scenes().boxed(), - //":tracks" => self.view_tracks().boxed(), - ":nil" => Box::new("nil"), - ":transport" => self.view_transport().boxed(), - ":arranger" => ArrangerView::new(self).boxed(), - ":editor" => self.editor.as_ref().map(|e|Bsp::e(e.clip_status(), e.edit_status())).boxed(), - ":sample" => ().boxed(),//self.view_sample(self.is_editing()).boxed(), - ":sampler" => ().boxed(),//self.view_sampler(self.is_editing(), &self.editor).boxed(), - ":status" => self.view_status().boxed(), - ":pool" => self.pool.as_ref() - .map(|pool|Fixed::x(self.w_sidebar(), PoolView(self.is_editing(), pool))) - .boxed(), -}); -provide_num!(u16: |self: Tek| { - ":h-ins" => self.h_inputs(), - ":h-outs" => self.h_outputs(), - ":h-sample" => if self.is_editing() { 0 } else { 5 }, - ":w-samples" => if self.is_editing() { 4 } else { 11 }, - ":w-sidebar" => self.w_sidebar(), - ":y-ins" => (self.size.h() as u16).saturating_sub(self.h_inputs() + 1), - ":y-outs" => (self.size.h() as u16).saturating_sub(self.h_outputs() + 1), - ":y-samples" => if self.is_editing() { 1 } else { 0 }, -}); - #[cfg(test)] #[test] fn test_view_iter () { let mut tek = Tek::default(); tek.editor = Some(Default::default()); diff --git a/midi/src/midi_edit.rs b/midi/src/midi_edit.rs index cf44fb92..4c43333d 100644 --- a/midi/src/midi_edit.rs +++ b/midi/src/midi_edit.rs @@ -143,12 +143,12 @@ impl MidiEditor { let (color, length) = if let Some(clip) = self.clip().as_ref().map(|p|p.read().unwrap()) { (clip.color, clip.length) } else { (ItemPalette::G[64], 0) }; - let time_pos = self.time_pos(); - let time_zoom = self.time_zoom().get(); - let time_lock = if self.time_lock().get() { "[lock]" } else { " " }; - let note_pos = format!("{:>3}", self.note_pos()); - let note_name = format!("{:4}", Note::pitch_to_name(self.note_pos())); - let note_len = format!("{:>4}", self.note_len()); + let time_pos = self.time_pos(); + let time_zoom = self.time_zoom().get(); + let time_lock = if self.time_lock().get() { "[lock]" } else { " " }; + let note_pos = format!("{:>3}", self.note_pos()); + let note_name = format!("{:4}", Note::pitch_to_name(self.note_pos())); + let note_len = format!("{:>4}", self.note_len()); Bsp::e( FieldH(color, "Time", format!("{length}/{time_zoom}+{time_pos} {time_lock}")), FieldH(color, "Note", format!("{note_name} {note_pos} {note_len}")),