move Layout trait to separate module
Some checks failed
/ build (push) Has been cancelled

- output: impl Layout for Measure, FieldH, FieldV
- tui: enable #[feature(trait_alias)]
- tui: define some trait aliases
This commit is contained in:
🪞👃🪞 2025-09-09 20:59:07 +03:00
parent 90fc869e14
commit 731f4a971e
13 changed files with 166 additions and 147 deletions

View file

@ -1,4 +1,5 @@
#![feature(type_changing_struct_update)]
#![feature(trait_alias)]
#[cfg(test)] mod tui_test;
mod tui_engine; pub use self::tui_engine::*;
mod tui_content; pub use self::tui_content::*;

View file

@ -1,5 +1,12 @@
use crate::*;
impl<T: TuiContent, U: TuiContent> Draw<TuiOut> for FieldH<ItemTheme, T, U> {
fn draw (&self, to: &mut TuiOut) { to.place(&self.content()) }
}
impl<T: TuiContent, U: TuiContent> Draw<TuiOut> for FieldV<ItemTheme, T, U> {
fn draw (&self, to: &mut TuiOut) { to.place(&self.content()) }
}
// TODO:
pub struct Field<T, U> {
pub direction: Direction,

View file

@ -73,12 +73,18 @@ impl Tui {
}
}
pub trait TuiRun<R: Draw<TuiOut> + Handle<TuiIn> + 'static> {
pub trait TuiDraw = Draw<TuiOut>;
pub trait TuiLayout = Layout<TuiOut>;
pub trait TuiContent = Content<TuiOut>;
pub trait TuiHandle = Handle<TuiIn>;
pub trait TuiWidget = TuiDraw + TuiHandle;
pub trait TuiRun<T: TuiWidget + 'static> {
/// Run an app in the main loop.
fn run (&self, state: &Arc<RwLock<R>>) -> Usually<()>;
fn run (&self, state: &Arc<RwLock<T>>) -> Usually<()>;
}
impl<T: Draw<TuiOut> + Handle<TuiIn> + Send + Sync + 'static> TuiRun<T> for Arc<RwLock<Tui>> {
impl<T: TuiWidget + Send + Sync + 'static> TuiRun<T> for Arc<RwLock<Tui>> {
fn run (&self, state: &Arc<RwLock<T>>) -> Usually<()> {
let _input_thread = TuiIn::run_input(self, state, Duration::from_millis(100));
self.write().unwrap().setup()?;