Untitled
unknown
rust
2 years ago
2.2 kB
10
Indexable
use fltk::{app, button::*, input::*, prelude::*, window::Window}; #[derive(Clone, Copy)] enum Message { Update } #[derive(Clone, Copy)] struct GlobalState { status: Status } #[derive(Clone, Copy)] enum Status { StatusA, StatusB, StatusC, } impl GlobalState { fn new() -> Self { GlobalState { status: Status::StatusA } } fn set_status(&mut self, value: Status) { self.status = value; } fn get_status(&self) -> Status { self.status } } fn main() { let mut global_state = GlobalState::new(); let app = app::App::default(); let mut wind = Window::default().with_size(400, 300); let (sender, receiver) = app::channel::<Message>(); let mut but1 = Button::new(160, 50, 80, 40, "Click 1"); let mut but2 = Button::new(160, 100, 80, 40, "Click 2"); let mut but3 = Button::new(160, 150, 80, 40, "Click 3"); let mut input1 = Input::new(50, 50, 70, 40, None); let mut input2 = Input::new(50, 100, 70, 40, None); let mut input3 = Input::new(50, 150, 70, 40, None); but1.set_callback(move |_| { global_state.set_status(Status::StatusA); }); but1.emit(sender, Message::Update); but2.set_callback(move |_| { global_state.set_status(Status::StatusB) }); but2.emit(sender, Message::Update); but3.set_callback(move |_| { global_state.set_status(Status::StatusC) }); but3.emit(sender, Message::Update); sender.send(Message::Update); wind.end(); wind.show(); while app.wait() { match receiver.recv() { Some(Message::Update) => { println!("UPDATE"); match global_state.get_status() { Status::StatusA => { input1.activate(); input2.deactivate(); input3.deactivate(); println!("A"); }, Status::StatusB => { input1.deactivate(); input2.activate(); input3.deactivate(); println!("B"); }, Status::StatusC => { input1.deactivate(); input2.deactivate(); input3.activate(); println!("C"); }, _ => () } }, None => () } } }
Editor is loading...