From 5bc3517dde04142010bbbc59e5bd6abe90151ead Mon Sep 17 00:00:00 2001 From: unspeaker Date: Mon, 30 Dec 2024 21:52:20 +0100 Subject: [PATCH] big flat pt.13: fixed warnings, let's see what it has in store --- bin/cli_arranger.rs | 7 ++++--- bin/cli_groovebox.rs | 7 ++++--- bin/cli_sampler.rs | 9 +++++---- bin/cli_sequencer.rs | 9 +++++---- bin/cli_transport.rs | 10 +++++----- bin/lib.rs | 7 ++++++- engine/src/lib.rs | 4 +++- layout/src/collection.rs | 10 +++++----- layout/src/collection/split.rs | 2 +- layout/src/lib.rs | 10 ++++------ src/engine/render.rs | 0 src/groovebox.rs | 14 +++++++++++++- src/lib.rs | 24 +++++++++++++----------- 13 files changed, 68 insertions(+), 45 deletions(-) delete mode 100644 src/engine/render.rs diff --git a/bin/cli_arranger.rs b/bin/cli_arranger.rs index 23ae086c..a2b9d77a 100644 --- a/bin/cli_arranger.rs +++ b/bin/cli_arranger.rs @@ -30,15 +30,16 @@ impl ArrangerCli { /// Run the arranger TUI from CLI arguments. fn run (&self) -> Usually<()> { let name = self.name.as_deref().unwrap_or("tek_arranger"); - Tui::run(JackConnection::new(name)?.activate_with(|jack|{ + let engine = Tui::new()?; + let state = JackConnection::new(name)?.activate_with(|jack|{ let mut app = ArrangerTui::try_from(jack)?; let jack = jack.read().unwrap(); app.color = ItemPalette::random(); add_tracks(&jack, &mut app, self)?; add_scenes(&mut app, self.scenes)?; Ok(app) - })?)?; - Ok(()) + })?; + engine.run(&state) } } diff --git a/bin/cli_groovebox.rs b/bin/cli_groovebox.rs index a946e376..f398870e 100644 --- a/bin/cli_groovebox.rs +++ b/bin/cli_groovebox.rs @@ -37,7 +37,8 @@ pub struct GrooveboxCli { impl GrooveboxCli { fn run (&self) -> Usually<()> { let name = self.name.as_deref().unwrap_or("tek_groovebox"); - Tui::run(JackConnection::new(name)?.activate_with(|jack|{ + let engine = Tui::new()?; + let state = JackConnection::new(name)?.activate_with(|jack|{ let app = tek::Groovebox::new( jack, &self.midi_from.as_slice(), @@ -58,8 +59,8 @@ impl GrooveboxCli { })? } Ok(app) - })?)?; - Ok(()) + })?; + engine.run(&state) } } diff --git a/bin/cli_sampler.rs b/bin/cli_sampler.rs index 278ee8b0..d28bcf52 100644 --- a/bin/cli_sampler.rs +++ b/bin/cli_sampler.rs @@ -23,8 +23,9 @@ pub fn main () -> Usually<()> { SamplerCli::parse().run() } } impl SamplerCli { fn run (&self) -> Usually<()> { - let name = self.name.as_deref().unwrap_or("tek_sampler"); - Tui::run(JackConnection::new(name)?.activate_with(|jack|{ + let name = self.name.as_deref().unwrap_or("tek_sampler"); + let engine = Tui::new()?; + let state = JackConnection::new(name)?.activate_with(|jack|{ Ok(tek::SamplerTui { cursor: (0, 0), editing: None, @@ -41,7 +42,7 @@ impl SamplerCli { &[&self.l_to.as_slice(), &self.r_to.as_slice()], )?, }) - })?)?; - Ok(()) + })?; + engine.run(&state) } } diff --git a/bin/cli_sequencer.rs b/bin/cli_sequencer.rs index a5ef676b..0e644967 100644 --- a/bin/cli_sequencer.rs +++ b/bin/cli_sequencer.rs @@ -24,8 +24,9 @@ pub struct SequencerCli { impl SequencerCli { fn run (&self) -> Usually<()> { - let name = self.name.as_deref().unwrap_or("tek_sequencer"); - Tui::run(JackConnection::new(name)?.activate_with(|jack|{ + let name = self.name.as_deref().unwrap_or("tek_sequencer"); + let engine = Tui::new()?; + let state = JackConnection::new(name)?.activate_with(|jack|{ let mut app = SequencerTui::try_from(jack)?; let jack = jack.read().unwrap(); let midi_in = jack.register_port("i", MidiIn::default())?; @@ -35,8 +36,8 @@ impl SequencerCli { app.player.midi_ins.push(midi_in); app.player.midi_outs.push(midi_out); Ok(app) - })?)?; - Ok(()) + })?; + engine.run(&state) } } diff --git a/bin/cli_transport.rs b/bin/cli_transport.rs index 5d90cad8..abf9373c 100644 --- a/bin/cli_transport.rs +++ b/bin/cli_transport.rs @@ -2,9 +2,9 @@ include!("./lib.rs"); /// Application entrypoint. pub fn main () -> Usually<()> { - let name = "tek_transport"; - Tui::run(JackConnection::new(name)?.activate_with(|jack|{ - TransportTui::try_from(jack) - })?)?; - Ok(()) + let name = "tek_transport"; + let engine = Tui::new()?; + let state = JackConnection::new(name)? + .activate_with(|jack|TransportTui::try_from(jack))?; + engine.run(&state) } diff --git a/bin/lib.rs b/bin/lib.rs index 87eec13e..0819abb8 100644 --- a/bin/lib.rs +++ b/bin/lib.rs @@ -1,6 +1,11 @@ #[allow(unused_imports)] use std::sync::Arc; #[allow(unused_imports)] use clap::{self, Parser}; -#[allow(unused_imports)] use tek::{*, jack::*}; +#[allow(unused_imports)] use tek::{ + *, + jack::*, + tek_layout::Measure, + tek_engine::{Usually, tui::{Tui, TuiRun, ratatui::prelude::Color}} +}; #[allow(unused)] fn connect_from (jack: &JackConnection, input: &Port, ports: &[String]) -> Usually<()> { diff --git a/engine/src/lib.rs b/engine/src/lib.rs index e0a81b8e..7dbd7d44 100644 --- a/engine/src/lib.rs +++ b/engine/src/lib.rs @@ -2,7 +2,8 @@ mod engine; pub use self::engine::*; mod input; pub use self::input::*; mod output; pub use self::output::*; -mod tui; pub use self::tui::*; + +pub mod tui; pub use std::error::Error; @@ -58,6 +59,7 @@ pub type Perhaps = Result, Box>; } #[cfg(test)] #[test] fn test_tui_engine () -> Usually<()> { + use crate::tui::*; use std::sync::{Arc, RwLock}; struct TestComponent(String); impl Content for TestComponent { diff --git a/layout/src/collection.rs b/layout/src/collection.rs index 51c57096..2d750f5f 100644 --- a/layout/src/collection.rs +++ b/layout/src/collection.rs @@ -73,14 +73,14 @@ impl<'a, E: Engine, const N: usize> Iterator for CollectIterator<'a, E, N> { type Item = &'a dyn Render; fn next (&mut self) -> Option { match self.1 { - Collect::Callback(callback) => { + Collect::Callback(_callback) => { todo!() }, //Collection::Iterator(iterator) => { //iterator.next() //}, Collect::Array(array) => { - if let Some(item) = array.get(self.0) { + if let Some(_item) = array.get(self.0) { self.0 += 1; //Some(item) None @@ -89,7 +89,7 @@ impl<'a, E: Engine, const N: usize> Iterator for CollectIterator<'a, E, N> { } } Collect::Slice(slice) => { - if let Some(item) = slice.get(self.0) { + if let Some(_item) = slice.get(self.0) { self.0 += 1; //Some(item) None @@ -118,10 +118,10 @@ pub struct Reduce, R: Render, F: Fn(&dyn Re ); impl+Send+Sync, R: Render, F: Fn(&dyn Render, T)->R+Send+Sync> Render for Reduce { - fn min_size (&self, to: E::Size) -> Perhaps { + fn min_size (&self, _to: E::Size) -> Perhaps { todo!() } - fn render (&self, to: &mut E::Output) -> Usually<()> { + fn render (&self, _to: &mut E::Output) -> Usually<()> { todo!() } } diff --git a/layout/src/collection/split.rs b/layout/src/collection/split.rs index 959d675a..1c813218 100644 --- a/layout/src/collection/split.rs +++ b/layout/src/collection/split.rs @@ -102,7 +102,7 @@ where West => { let w: E::Unit = 0.into(); let h: E::Unit = 0.into(); - (self.0)(&mut |component: &dyn Render| { + (self.0)(&mut |_component: &dyn Render| { if w < to.w() { todo!(); } diff --git a/layout/src/lib.rs b/layout/src/lib.rs index 16c28fcc..93cb5665 100644 --- a/layout/src/lib.rs +++ b/layout/src/lib.rs @@ -1,15 +1,13 @@ -pub use ::tek_engine; -pub(crate) use ::tek_engine::*; - -pub(crate) use std::marker::PhantomData; -pub(crate) use std::sync::atomic::Ordering::*; - mod collection; pub use self::collection::*; mod direction; pub use self::direction::*; mod logic; pub use self::logic::*; mod space; pub use self::space::*; mod transform; pub use self::transform::*; +pub use ::tek_engine; +pub(crate) use ::tek_engine::*; +pub(crate) use std::marker::PhantomData; + #[cfg(test)] #[test] fn test_layout () -> Usually<()> { Ok(()) } diff --git a/src/engine/render.rs b/src/engine/render.rs deleted file mode 100644 index e69de29b..00000000 diff --git a/src/groovebox.rs b/src/groovebox.rs index cdf5a99a..259de27b 100644 --- a/src/groovebox.rs +++ b/src/groovebox.rs @@ -137,7 +137,11 @@ render!(|self:Groovebox|{ Fill::xy(lay!([ &self.size, Fill::xy(Align::s(Fixed::y(2, GrooveboxStatus::from(self)))), - Shrink::y(2, col!(![transport, selector, status])) + Shrink::y(2, col!(![ + transport, + selector, + status + ])) ])) }); @@ -165,6 +169,14 @@ impl<'a, T: Render> Content for EditStatus<'a, T> { ]), &self.3)) } } +impl<'a, T: Render> Render for EditStatus<'a, T> { + fn min_size (&self, to: [u16;2]) -> Perhaps<[u16;2]> { + self.content().unwrap().min_size(to) + } + fn render (&self, to: &mut TuiOutput) -> Usually<()> { + self.content().unwrap().render(to) + } +} struct GrooveboxSamples<'a>(&'a Groovebox); render!(|self: GrooveboxSamples<'a>|{ diff --git a/src/lib.rs b/src/lib.rs index 986130f1..05cc3b29 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,18 +11,20 @@ pub(crate) use ::tek_layout::{ Engine, Size, Area, Output, Content, Render, render, Input, Handle, handle, kexp, key_pat, key_event_pat, key_event_expr, - Tui, TuiInput, TuiOutput, - crossterm::{ - self, - event::{ - Event, KeyEvent, KeyEventKind, KeyEventState, KeyModifiers, - KeyCode::{self, *}, + tui::{ + Tui, TuiInput, TuiOutput, + crossterm::{ + self, + event::{ + Event, KeyEvent, KeyEventKind, KeyEventState, KeyModifiers, + KeyCode::{self, *}, + } + }, + ratatui::{ + self, + prelude::{Color, Style, Stylize, Buffer, Modifier}, + buffer::Cell, } - }, - ratatui::{ - self, - prelude::{Color, Style, Stylize, Buffer, Modifier}, - buffer::Cell, } } };