top-level view bindings now use proc macro

This commit is contained in:
🪞👃🪞 2025-05-04 15:30:10 +03:00
parent ff2e981e18
commit 79bf493004
4 changed files with 62 additions and 33 deletions

10
Cargo.lock generated
View file

@ -1521,6 +1521,7 @@ dependencies = [
"tek_device", "tek_device",
"tek_engine", "tek_engine",
"tengri", "tengri",
"tengri_proc",
"toml", "toml",
] ]
@ -1601,6 +1602,15 @@ dependencies = [
"tengri_dsl", "tengri_dsl",
] ]
[[package]]
name = "tengri_proc"
version = "0.13.0"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "tengri_tui" name = "tengri_tui"
version = "0.13.0" version = "0.13.0"

View file

@ -23,15 +23,13 @@ lto = false
[workspace.dependencies.tengri] [workspace.dependencies.tengri]
path = "./deps/tengri/tengri" path = "./deps/tengri/tengri"
#git = "https://codeberg.org/unspeaker/tengri"
#rev = "6048d24"
features = [ "tui", "dsl" ] features = [ "tui", "dsl" ]
[workspace.dependencies.tengri_proc]
path = "./deps/tengri/proc"
[workspace.dependencies.jack] [workspace.dependencies.jack]
#git = "https://codeberg.org/unspeaker/rust-jack"
#rev = "a13c1c4"
path = "./deps/rust-jack" path = "./deps/rust-jack"
#default-features = false
[workspace.dependencies] [workspace.dependencies]
tek_device = { path = "./crates/device" } tek_device = { path = "./crates/device" }

View file

@ -2,12 +2,16 @@ use crate::*;
pub(crate) use std::fmt::Write; pub(crate) use std::fmt::Write;
pub(crate) use ::tengri::tui::ratatui::prelude::Position; pub(crate) use ::tengri::tui::ratatui::prelude::Position;
#[tengri_proc::view(self.config.view)] #[tengri_proc::view(TuiOut)]
impl Tek { impl Tek {
#[view(":nil")] "nil" #[tengri::view(":nil")]
fn view_nil (&self) -> impl Content<TuiOut> + use<'_> {
"nil"
}
#[view(":status")] { #[tengri::view(":status")]
fn view_status (&self) -> impl Content<TuiOut> + use<'_> {
self.update_clock(); self.update_clock();
let cache = self.view_cache.read().unwrap(); let cache = self.view_cache.read().unwrap();
view_status( view_status(
@ -16,7 +20,8 @@ impl Tek {
) )
} }
#[view(":transport")] { #[tengri::view(":transport")]
fn view_transport (&self) -> impl Content<TuiOut> + use<'_> {
self.update_clock(); self.update_clock();
let cache = self.view_cache.read().unwrap(); let cache = self.view_cache.read().unwrap();
view_transport( view_transport(
@ -25,24 +30,39 @@ impl Tek {
) )
} }
#[view(":arranger")] ArrangerView::new(self) #[tengri::view(":arranger")]
fn view_arranger (&self) -> impl Content<TuiOut> + use<'_> {
ArrangerView::new(self)
}
#[view(":pool")] self.pool() #[tengri::view(":pool")]
.map(|p|Fixed::x(self.w_sidebar(), PoolView(self.is_editing(), p))) fn view_pool (&self) -> impl Content<TuiOut> + use<'_> {
self.pool().map(|p|Fixed::x(self.w_sidebar(), PoolView(self.is_editing(), p)))
}
#[view(":editor")] self.editor() #[tengri::view(":editor")]
.map(|e|Bsp::n(Bsp::e(e.clip_status(), e.edit_status()), e)) fn view_editor (&self) -> impl Content<TuiOut> + use<'_> {
self.editor().map(|e|Bsp::n(Bsp::e(e.clip_status(), e.edit_status()), e))
}
#[view(":samples-keys")] self.sampler() #[tengri::view(":samples-keys")]
.map(|s|s.view_list(false, self.editor().unwrap())) fn view_samples_keys (&self) -> impl Content<TuiOut> + use<'_> {
self.sampler().map(|s|s.view_list(false, self.editor().unwrap()))
}
#[view(":samples-grid")] self.sampler() #[tengri::view(":samples-grid")]
.map(|s|s.view_grid()) fn view_samples_grid (&self) -> impl Content<TuiOut> + use<'_> {
self.sampler().map(|s|s.view_grid())
}
#[view(":sample-viewer")] self.sampler() #[tengri::view(":sample-viewer")]
.map(|s|s.view_sample(self.editor().unwrap().note_pos())) fn view_sample_viewer (&self) -> impl Content<TuiOut> + use<'_> {
self.sampler().map(|s|s.view_sample(self.editor().unwrap().note_pos()))
}
#[view(":modal")] When::new(self.modal.is_some(), Bsp::b( #[tengri::view(":modal")]
fn view_modal (&self) -> impl Content<TuiOut> + use<'_> {
When::new(self.modal.is_some(), Bsp::b(
Fill::xy(Tui::fg_bg(Rgb(64,64,64), Rgb(32,32,32), "")), Fill::xy(Tui::fg_bg(Rgb(64,64,64), Rgb(32,32,32), "")),
Fixed::xy(30, 15, Tui::fg_bg(Rgb(255,255,255), Rgb(16,16,16), Bsp::b( Fixed::xy(30, 15, Tui::fg_bg(Rgb(255,255,255), Rgb(16,16,16), Bsp::b(
Repeat(" "), Repeat(" "),
@ -53,6 +73,7 @@ impl Tek {
})) }))
))) )))
)) ))
}
fn view_modal_menu (&self) -> impl Content<TuiOut> { fn view_modal_menu (&self) -> impl Content<TuiOut> {
let options = ||["Projects", "Settings", "Help", "Quit"].iter(); let options = ||["Projects", "Settings", "Help", "Quit"].iter();

2
deps/tengri vendored

@ -1 +1 @@
Subproject commit 21f7f6b38afc966b7b45af442935d48c8c5067d3 Subproject commit b543c43e68154f049019da648064f36af1537434