use iced::{ widget::{column, text_input}, Element, Sandbox, Settings, }; pub fn main() -> iced::Result { App::run(Settings::default()) } #[derive(Default)] struct App { displacement: f64, ui: UI, } #[derive(Default)] struct UI { displacement: String, } impl App { fn set_displacement(&mut self, displacement: &str) { if displacement.len() == 0 { self.displacement = 0.; } else if let Ok(d) = displacement.parse::() { self.displacement = d; } self.ui.displacement = String::from(displacement); } } impl Sandbox for App { type Message = Message; fn new() -> Self { Self::default() } fn title(&self) -> String { String::from("volute") } fn update(&mut self, message: Message) { match message { Message::DisplacementChanged(displacement) => { self.set_displacement(&displacement); } } } fn view(&self) -> Element { column![text_input( "placeholder", &self.ui.displacement, Message::DisplacementChanged, ),] .into() } } #[derive(Debug, Clone)] pub enum Message { DisplacementChanged(String), }