From b16b909074691c5d528774827b43c66cefc5f865 Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Thu, 19 Jan 2023 14:40:59 -0330 Subject: use Volume in text_input widget --- src/lib.rs | 2 +- src/main.rs | 21 ++++++++++++++++----- src/volume.rs | 22 +++++++++++++++++++--- 3 files changed, 36 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/lib.rs b/src/lib.rs index 0e68f71..cd3320a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,3 @@ -mod volume; +pub mod volume; type Percent = u8; diff --git a/src/main.rs b/src/main.rs index 9bf6c51..2872fcf 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,13 +3,14 @@ use iced::{ Element, Sandbox, Settings, }; +use volute::volume::{CubicMetre, Volume}; + pub fn main() -> iced::Result { App::run(Settings::default()) } -#[derive(Default)] struct App { - displacement: f64, + displacement: Box, ui: UI, } @@ -21,11 +22,21 @@ struct UI { impl App { fn set_displacement(&mut self, displacement: &str) { if displacement.len() == 0 { - self.displacement = 0.; + self.displacement.set(0.0); + self.ui.displacement = "".to_string(); } else if let Ok(d) = displacement.parse::() { - self.displacement = d; + self.displacement.set(d); + self.ui.displacement = String::from(displacement); + } + } +} + +impl Default for App { + fn default() -> Self { + Self { + displacement: Box::new(CubicMetre::default()), + ui: UI::default(), } - self.ui.displacement = String::from(displacement); } } diff --git a/src/volume.rs b/src/volume.rs index ea78938..087676c 100644 --- a/src/volume.rs +++ b/src/volume.rs @@ -1,12 +1,24 @@ use std::ops::Mul; -trait Volume { +pub trait Volume { /// Returns the volume in SI units (cubic metres). fn si(self) -> CubicMetre; + + fn set(&mut self, val: f64); } -#[derive(Debug, PartialEq)] -struct CubicMetre(f64); +#[derive(Debug, Default, PartialEq)] +pub struct CubicMetre(f64); + +impl Volume for CubicMetre { + fn si(self) -> CubicMetre { + self + } + + fn set(&mut self, val: f64) { + self.0 = val; + } +} #[derive(Debug, PartialEq)] struct Litre(f64); @@ -15,6 +27,10 @@ impl Volume for Litre { fn si(self) -> CubicMetre { CubicMetre(self.0 * 10_f64.powf(-3.)) } + + fn set(&mut self, val: f64) { + self.0 = val + } } impl From for Litre { -- cgit v1.2.3