aboutsummaryrefslogtreecommitdiff
path: root/src/gui.rs
blob: f539e8bb6065819f80f2a6780a40e9299c051e31 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
use fltk::{app::*, button::*, frame::*, text::*, window::*}; // enums::*,

#[derive(Clone, Copy)]
enum GUIMessage {}

pub struct GUI {
    app: App,
    window: Window,
    log: TextDisplay,
    sender: Sender<GUIMessage>,
    receiver: Receiver<GUIMessage>,
}

impl GUI {
    pub fn new() -> GUI {
        let app = App::default();

        // TODO: Why is this not the same as
        /*
        let mut window = Window::default()
            .with_size(800, 600)
            .with_label("Takwrap")
            .center_screen();
         */
        // Windows made that way are not resizable?

        let mut window = Window::new(0, 0, 800, 600, "Takwrap").center_screen();
        window.make_resizable(true);

        let mut log = TextDisplay::default()
            .with_size(10 * 16, 600 - 10 - 10)
            .with_pos(800 - 10 * 16 - 10, 10);
        log.set_buffer(Some(TextBuffer::default()));
        log.insert("test");

        window.draw(Box::new(move || {
            fltk::draw::set_draw_color(Color::White);
            fltk::draw::draw_rectf(20, 20, 30, 30);
        }));

        window.end();

        let (sender, receiver) = channel::<GUIMessage>();
        // button.emit(sender, GUIMessage::Foo);

        GUI {
            app,
            window,
            log,
            sender,
            receiver,
        }
    }

    pub fn run(&mut self) -> Result<(), fltk::prelude::FltkError> {
        self.window.show();

        while self.app.wait()? {
            match self.receiver.recv() {
                _ => (),
            }
        }
        Ok(())
    }
}