Untitled

 avatar
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...