wip: restabilizing inversion of control shenanigans again
Some checks are pending
/ build (push) Waiting to run

This commit is contained in:
🪞👃🪞 2025-05-25 11:44:15 +03:00
parent 4a2e742e56
commit 287983c140
6 changed files with 99 additions and 111 deletions

View file

@ -24,88 +24,86 @@ impl<T: Content<TuiOut>> Content<TuiOut> for ErrorBoundary<TuiOut, T> {
impl App {
pub fn view (model: &Self) -> impl Content<TuiOut> + '_ {
ErrorBoundary::new(
Ok(Some(Tui::bg(Black, "give or take")))
//Default::default(), Take::take(model, &mut model.config.view.clone())
//Default::default(), Give::give(model, &mut model.config.view.clone())
)
ErrorBoundary::new(Ok(Some(Tui::bg(Black, "give or take"))))
//ErrorBoundary::new(Take::take(model, &mut model.config.view.clone()))
//ErrorBoundary::new(Give::give(model, &mut model.config.view.clone()))
}
}
#[tengri_proc::view(TuiOut)]
impl App {
pub fn view_nil (model: &Self) -> impl Content<TuiOut> {
"nil"
}
pub fn view_dialog (model: &Self) -> impl Content<TuiOut> + use<'_> {
model.dialog.as_ref().map(|dialog|Bsp::b("",
Fixed::xy(70, 23, Tui::fg_bg(Rgb(255,255,255), Rgb(16,16,16), Bsp::b(
Repeat(" "), Outer(true, Style::default().fg(Tui::g(96)))
.enclose(dialog))))))
}
pub fn view_meters_input (model: &Self) -> impl Content<TuiOut> + use<'_> {
model.project.sampler().map(|s|
s.view_meters_input())
}
pub fn view_meters_output (model: &Self) -> impl Content<TuiOut> + use<'_> {
model.project.sampler().map(|s|
s.view_meters_output())
}
pub fn view_history (model: &Self) -> impl Content<TuiOut> {
Fixed::y(1, Fill::x(Align::w(FieldH(model.color,
format!("History ({})", model.history.len()),
model.history.last().map(|last|Fill::x(Align::w(format!("{:?}", last.0))))))))
}
pub fn view_status_h2 (model: &Self) -> impl Content<TuiOut> {
model.update_clock();
let theme = model.color;
let clock = model.clock();
let playing = clock.is_rolling();
let cache = clock.view_cache.clone();
//let selection = model.selection().describe(model.tracks(), model.scenes());
let hist_len = model.history.len();
let hist_last = model.history.last();
Fixed::y(2, Stack::east(move|add: &mut dyn FnMut(&dyn Render<TuiOut>)|{
add(&Fixed::x(5, Tui::bg(if playing { Rgb(0, 128, 0) } else { Rgb(128, 64, 0) },
Either::new(false, // TODO
Thunk::new(move||Fixed::x(9, Either::new(playing,
Tui::fg(Rgb(0, 255, 0), " PLAYING "),
Tui::fg(Rgb(255, 128, 0), " STOPPED ")))
),
Thunk::new(move||Fixed::x(5, Either::new(playing,
Tui::fg(Rgb(0, 255, 0), Bsp::s(" 🭍🭑🬽 ", " 🭞🭜🭘 ",)),
Tui::fg(Rgb(255, 128, 0), Bsp::s(" ▗▄▖ ", " ▝▀▘ ",))))
)
)
)));
add(&" ");
{
let cache = cache.read().unwrap();
add(&Fixed::x(15, Align::w(Bsp::s(
FieldH(theme, "Beat", cache.beat.view.clone()),
FieldH(theme, "Time", cache.time.view.clone()),
))));
add(&Fixed::x(13, Align::w(Bsp::s(
Fill::x(Align::w(FieldH(theme, "BPM", cache.bpm.view.clone()))),
Fill::x(Align::w(FieldH(theme, "SR ", cache.sr.view.clone()))),
))));
add(&Fixed::x(12, Align::w(Bsp::s(
Fill::x(Align::w(FieldH(theme, "Buf", cache.buf.view.clone()))),
Fill::x(Align::w(FieldH(theme, "Lat", cache.lat.view.clone()))),
))));
//add(&Bsp::s(
////Fill::x(Align::w(FieldH(theme, "Selected", Align::w(selection)))),
//Fill::x(Align::w(FieldH(theme, format!("History ({})", hist_len),
//hist_last.map(|last|Fill::x(Align::w(format!("{:?}", last.0))))))),
//""
//));
////if let Some(last) = model.history.last() {
////add(&FieldV(theme, format!("History ({})", model.history.len()),
////Fill::x(Align::w(format!("{:?}", last.0)))));
////}
}
}))
}
//pub fn view_nil (model: &Self) -> impl Content<TuiOut> {
//"nil"
//}
//pub fn view_dialog (model: &Self) -> impl Content<TuiOut> + use<'_> {
//model.dialog.as_ref().map(|dialog|Bsp::b("",
//Fixed::xy(70, 23, Tui::fg_bg(Rgb(255,255,255), Rgb(16,16,16), Bsp::b(
//Repeat(" "), Outer(true, Style::default().fg(Tui::g(96)))
//.enclose(dialog))))))
//}
//pub fn view_meters_input (model: &Self) -> impl Content<TuiOut> + use<'_> {
//model.project.sampler().map(|s|
//s.view_meters_input())
//}
//pub fn view_meters_output (model: &Self) -> impl Content<TuiOut> + use<'_> {
//model.project.sampler().map(|s|
//s.view_meters_output())
//}
//pub fn view_history (model: &Self) -> impl Content<TuiOut> {
//Fixed::y(1, Fill::x(Align::w(FieldH(model.color,
//format!("History ({})", model.history.len()),
//model.history.last().map(|last|Fill::x(Align::w(format!("{:?}", last.0))))))))
//}
//pub fn view_status_h2 (model: &Self) -> impl Content<TuiOut> {
//model.update_clock();
//let theme = model.color;
//let clock = model.clock();
//let playing = clock.is_rolling();
//let cache = clock.view_cache.clone();
////let selection = model.selection().describe(model.tracks(), model.scenes());
//let hist_len = model.history.len();
//let hist_last = model.history.last();
//Fixed::y(2, Stack::east(move|add: &mut dyn FnMut(&dyn Render<TuiOut>)|{
//add(&Fixed::x(5, Tui::bg(if playing { Rgb(0, 128, 0) } else { Rgb(128, 64, 0) },
//Either::new(false, // TODO
//Thunk::new(move||Fixed::x(9, Either::new(playing,
//Tui::fg(Rgb(0, 255, 0), " PLAYING "),
//Tui::fg(Rgb(255, 128, 0), " STOPPED ")))
//),
//Thunk::new(move||Fixed::x(5, Either::new(playing,
//Tui::fg(Rgb(0, 255, 0), Bsp::s(" 🭍🭑🬽 ", " 🭞🭜🭘 ",)),
//Tui::fg(Rgb(255, 128, 0), Bsp::s(" ▗▄▖ ", " ▝▀▘ ",))))
//)
//)
//)));
//add(&" ");
//{
//let cache = cache.read().unwrap();
//add(&Fixed::x(15, Align::w(Bsp::s(
//FieldH(theme, "Beat", cache.beat.view.clone()),
//FieldH(theme, "Time", cache.time.view.clone()),
//))));
//add(&Fixed::x(13, Align::w(Bsp::s(
//Fill::x(Align::w(FieldH(theme, "BPM", cache.bpm.view.clone()))),
//Fill::x(Align::w(FieldH(theme, "SR ", cache.sr.view.clone()))),
//))));
//add(&Fixed::x(12, Align::w(Bsp::s(
//Fill::x(Align::w(FieldH(theme, "Buf", cache.buf.view.clone()))),
//Fill::x(Align::w(FieldH(theme, "Lat", cache.lat.view.clone()))),
//))));
////add(&Bsp::s(
//////Fill::x(Align::w(FieldH(theme, "Selected", Align::w(selection)))),
////Fill::x(Align::w(FieldH(theme, format!("History ({})", hist_len),
////hist_last.map(|last|Fill::x(Align::w(format!("{:?}", last.0))))))),
////""
////));
//////if let Some(last) = model.history.last() {
//////add(&FieldV(theme, format!("History ({})", model.history.len()),
//////Fill::x(Align::w(format!("{:?}", last.0)))));
//////}
//}
//}))
//}
//pub fn view_status_v (&self) -> impl Content<TuiOut> + use<'_> {
//self.update_clock();
//let cache = self.project.clock.view_cache.read().unwrap();