flex/
flex.rs

1use fltk::{prelude::*, *};
2
3fn main() {
4    let a = app::App::default().with_scheme(app::Scheme::Gtk);
5    let mut win = window::Window::default().with_size(640, 480);
6    let mut col = group::Flex::default_fill().column();
7    main_panel(&mut col);
8    col.end();
9    win.resizable(&col);
10    win.set_color(enums::Color::from_rgb(250, 250, 250));
11    win.end();
12    win.show();
13    win.size_range(600, 400, 0, 0);
14    a.run().unwrap();
15}
16
17fn buttons_panel(parent: &mut group::Flex) {
18    frame::Frame::default();
19    let w = frame::Frame::default().with_label("Welcome to Flex Login");
20
21    let mut urow = group::Flex::default().row();
22    {
23        frame::Frame::default()
24            .with_label("Username:")
25            .with_align(enums::Align::Inside | enums::Align::Right);
26        let username = input::Input::default();
27
28        urow.fixed(&username, 180);
29        urow.end();
30    }
31
32    let mut prow = group::Flex::default().row();
33    {
34        frame::Frame::default()
35            .with_label("Password:")
36            .with_align(enums::Align::Inside | enums::Align::Right);
37        let password = input::Input::default();
38
39        prow.fixed(&password, 180);
40        prow.end();
41    }
42
43    let pad = frame::Frame::default();
44
45    let mut brow = group::Flex::default().row();
46    {
47        frame::Frame::default();
48        let reg = create_button("Register");
49        let login = create_button("Login");
50
51        brow.fixed(&reg, 80);
52        brow.fixed(&login, 80);
53        brow.end();
54    }
55
56    let b = frame::Frame::default();
57
58    frame::Frame::default();
59
60    parent.fixed(&w, 60);
61    parent.fixed(&urow, 30);
62    parent.fixed(&prow, 30);
63    parent.fixed(&pad, 1);
64    parent.fixed(&brow, 30);
65    parent.fixed(&b, 30);
66}
67
68fn middle_panel(parent: &mut group::Flex) {
69    frame::Frame::default();
70
71    let mut frame = frame::Frame::default().with_label("Image");
72    frame.set_frame(enums::FrameType::BorderBox);
73    frame.set_color(enums::Color::from_rgb(0, 200, 0));
74    let spacer = frame::Frame::default();
75
76    let mut bp = group::Flex::default().column();
77    buttons_panel(&mut bp);
78    bp.end();
79
80    frame::Frame::default();
81
82    parent.fixed(&frame, 200);
83    parent.fixed(&spacer, 10);
84    parent.fixed(&bp, 300);
85}
86
87fn main_panel(parent: &mut group::Flex) {
88    frame::Frame::default();
89
90    let mut mp = group::Flex::default().row();
91    middle_panel(&mut mp);
92    mp.end();
93
94    frame::Frame::default();
95
96    parent.fixed(&mp, 200);
97}
98
99fn create_button(caption: &str) -> button::Button {
100    let mut btn = button::Button::default().with_label(caption);
101    btn.set_color(enums::Color::from_rgb(225, 225, 225));
102    btn
103}