diff --git a/src/app.rs b/src/app.rs index 52e8e38b..2ca564d2 100644 --- a/src/app.rs +++ b/src/app.rs @@ -131,6 +131,7 @@ pub enum AppMessages { OpenHelp, KillProcess { to_kill: Vec }, ToggleFreeze, + Reset, Clean, Quit, } @@ -227,6 +228,9 @@ impl Application for AppState { AppMessages::Quit => { self.terminator.store(true, SeqCst); } + AppMessages::Reset => { + // FIXME: Reset + } } } @@ -281,6 +285,9 @@ impl Application for AppState { KeyCode::Char('c') | KeyCode::Char('C') => { messages.push(AppMessages::Quit); } + KeyCode::Char('r') | KeyCode::Char('R') => { + messages.push(AppMessages::Reset); + } _ => {} } } diff --git a/src/tuine/component/base/text_table/data_cell.rs b/src/tuine/component/base/text_table/data_cell.rs index 9966c852..cd51f473 100644 --- a/src/tuine/component/base/text_table/data_cell.rs +++ b/src/tuine/component/base/text_table/data_cell.rs @@ -1,10 +1,95 @@ -use std::borrow::Cow; +use std::{borrow::Cow, fmt::Display}; -use tui::style::Style; +use enum_dispatch::enum_dispatch; +use tui::widgets::Cell; + +#[enum_dispatch] +pub trait Numeric {} +impl Numeric for f64 {} +impl Numeric for f32 {} +impl Numeric for i64 {} +impl Numeric for i32 {} +impl Numeric for i16 {} +impl Numeric for i8 {} +impl Numeric for isize {} +impl Numeric for u64 {} +impl Numeric for u32 {} +impl Numeric for u16 {} +impl Numeric for u8 {} +impl Numeric for usize {} + +#[allow(non_camel_case_types)] +#[enum_dispatch(Numeric)] +pub enum Number { + f64, + f32, + i64, + i32, + i16, + i8, + isize, + u64, + u32, + u16, + u8, + usize, +} + +impl Display for Number { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match &self { + Number::f64(val) => write!(f, "{}", val), + Number::f32(val) => write!(f, "{}", val), + Number::i64(val) => write!(f, "{}", val), + Number::i32(val) => write!(f, "{}", val), + Number::i16(val) => write!(f, "{}", val), + Number::i8(val) => write!(f, "{}", val), + Number::isize(val) => write!(f, "{}", val), + Number::u64(val) => write!(f, "{}", val), + Number::u32(val) => write!(f, "{}", val), + Number::u16(val) => write!(f, "{}", val), + Number::u8(val) => write!(f, "{}", val), + Number::usize(val) => write!(f, "{}", val), + } + } +} pub enum DataCell { - Display, - Numeric, + NumberCell(Number), + String(Cow<'static, str>), } impl DataCell {} + +impl Display for DataCell { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + DataCell::NumberCell(n) => n.fmt(f), + DataCell::String(d) => d.fmt(f), + } + } +} + +impl From for Cell<'_> { + fn from(data_cell: DataCell) -> Self { + Cell::from(data_cell.to_string()) + } +} + +impl From for DataCell { + fn from(num: Number) -> Self { + DataCell::NumberCell(num) + } +} + +impl From for DataCell { + fn from(s: String) -> Self { + DataCell::String(s.into()) + } +} + +impl From<&'static str> for DataCell { + fn from(s: &'static str) -> Self { + DataCell::String(s.into()) + } +}