mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 11:46:41 +01:00
top-level view bindings now use proc macro
This commit is contained in:
parent
ff2e981e18
commit
79bf493004
4 changed files with 62 additions and 33 deletions
10
Cargo.lock
generated
10
Cargo.lock
generated
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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" }
|
||||||
|
|
|
||||||
|
|
@ -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,34 +30,50 @@ 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")]
|
||||||
Fill::xy(Tui::fg_bg(Rgb(64,64,64), Rgb(32,32,32), "")),
|
fn view_modal (&self) -> impl Content<TuiOut> + use<'_> {
|
||||||
Fixed::xy(30, 15, Tui::fg_bg(Rgb(255,255,255), Rgb(16,16,16), Bsp::b(
|
When::new(self.modal.is_some(), Bsp::b(
|
||||||
Repeat(" "),
|
Fill::xy(Tui::fg_bg(Rgb(64,64,64), Rgb(32,32,32), "")),
|
||||||
Outer(true, Style::default().fg(Tui::g(96)))
|
Fixed::xy(30, 15, Tui::fg_bg(Rgb(255,255,255), Rgb(16,16,16), Bsp::b(
|
||||||
.enclose(self.modal.map(|modal|match modal {
|
Repeat(" "),
|
||||||
Modal::Menu => self.view_modal_menu().boxed(),
|
Outer(true, Style::default().fg(Tui::g(96)))
|
||||||
Modal::Help => self.view_modal_help().boxed(),
|
.enclose(self.modal.map(|modal|match modal {
|
||||||
}))
|
Modal::Menu => self.view_modal_menu().boxed(),
|
||||||
)))
|
Modal::Help => self.view_modal_help().boxed(),
|
||||||
))
|
}))
|
||||||
|
)))
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
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();
|
||||||
|
|
@ -189,7 +210,7 @@ impl Tek {
|
||||||
TrackClip { track, .. } if editing => Some(track),
|
TrackClip { track, .. } if editing => Some(track),
|
||||||
_ => None
|
_ => None
|
||||||
};
|
};
|
||||||
let bigger = self.editor_w();
|
let bigger = self.editor_w();
|
||||||
self.tracks().iter().enumerate().map(move |(index, track)|{
|
self.tracks().iter().enumerate().map(move |(index, track)|{
|
||||||
let width = if Some(index) == active.copied() { bigger } else { track.width.max(8) };
|
let width = if Some(index) == active.copied() { bigger } else { track.width.max(8) };
|
||||||
let data = (index, track, x, x + width);
|
let data = (index, track, x, x + width);
|
||||||
|
|
|
||||||
2
deps/tengri
vendored
2
deps/tengri
vendored
|
|
@ -1 +1 @@
|
||||||
Subproject commit 21f7f6b38afc966b7b45af442935d48c8c5067d3
|
Subproject commit b543c43e68154f049019da648064f36af1537434
|
||||||
Loading…
Add table
Add a link
Reference in a new issue