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(())
}
}
|