Untitled
unknown
rust
3 years ago
2.2 kB
14
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...