aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs47
1 files changed, 28 insertions, 19 deletions
diff --git a/src/main.rs b/src/main.rs
index 2c1fa85..4c6cf43 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,45 +1,38 @@
use iced::{
- widget::{column, row, text, text_input},
+ widget::{column, pick_list, row, text, text_input},
Element, Sandbox, Settings,
};
-use volute::volume::{CubicMetre, Volume};
+use volute::volume::{self, CubicMetre};
pub fn main() -> iced::Result {
App::run(Settings::default())
}
+#[derive(Default)]
struct App {
- displacement: Box<dyn Volume>,
+ displacement: CubicMetre,
ui: UI,
}
#[derive(Default)]
struct UI {
displacement: String,
+ displacement_unit: volume::Unit,
}
impl App {
fn set_displacement(&mut self, displacement: &str) {
if displacement.len() == 0 {
- self.displacement.set(0.0);
+ self.displacement.0 = 0.0;
self.ui.displacement = "".to_string();
- } else if let Ok(d) = displacement.parse::<f64>() {
- self.displacement.set(d);
+ } else if let Ok(val) = displacement.parse::<f64>() {
+ self.displacement = CubicMetre::from_unit(self.ui.displacement_unit, val);
self.ui.displacement = String::from(displacement);
}
}
}
-impl Default for App {
- fn default() -> Self {
- Self {
- displacement: Box::new(CubicMetre::default()),
- ui: UI::default(),
- }
- }
-}
-
impl Sandbox for App {
type Message = Message;
@@ -53,17 +46,32 @@ impl Sandbox for App {
fn update(&mut self, message: Message) {
match message {
- Message::DisplacementChanged(displacement) => {
+ Message::Displacement(displacement) => {
self.set_displacement(&displacement);
}
+ Message::DisplacementUnit(unit) => {
+ self.ui.displacement = format!(
+ "{:.2}",
+ volume::convert(
+ self.ui.displacement.parse::<f64>().unwrap(),
+ self.ui.displacement_unit,
+ unit,
+ )
+ );
+ self.ui.displacement_unit = unit;
+ }
}
}
fn view(&self) -> Element<Self::Message> {
column![row![
text("Displacement:"),
- text_input("2.0", &self.ui.displacement, Message::DisplacementChanged),
- text(self.displacement.unit()),
+ text_input("2.0", &self.ui.displacement, Message::Displacement),
+ pick_list(
+ &volume::Unit::ALL[..],
+ Some(self.ui.displacement_unit),
+ Message::DisplacementUnit,
+ ),
]]
.into()
}
@@ -71,5 +79,6 @@ impl Sandbox for App {
#[derive(Debug, Clone)]
pub enum Message {
- DisplacementChanged(String),
+ Displacement(String),
+ DisplacementUnit(volume::Unit),
}