form_widget/
form_widget.rs

1#[macro_use]
2extern crate fltk_form_derive;
3
4use fltk::{prelude::*, *};
5use fltk_form::{FltkForm, Form};
6
7#[derive(Copy, Debug, Clone, FltkForm)]
8pub enum MyEnum {
9    A,
10    B,
11    C,
12}
13
14#[derive(Debug, Clone, FltkForm)]
15pub struct MyStruct {
16    a: f64,
17    b: f64,
18    c: String,
19    d: MyEnum,
20    e: bool,
21}
22
23impl MyStruct {
24    pub fn default() -> Self {
25        Self {
26            a: 0.0,
27            b: 3.0,
28            c: String::new(),
29            d: MyEnum::A,
30            e: true,
31        }
32    }
33}
34
35fn main() {
36    let my_struct = MyStruct::default(); // <-- instantiate your struct
37
38    let a = app::App::default().with_scheme(app::Scheme::Gtk);
39    app::set_background_color(222, 222, 222);
40
41    let mut win = window::Window::default().with_size(400, 300);
42
43    let mut form = Form::default()
44        .with_size(200, 200)
45        .center_of_parent()
46        .from_data(my_struct);
47
48    let mut btn = button::Button::default()
49        .with_label("print")
50        .with_size(80, 30)
51        .below_of(&*form, 5)
52        .center_x(&*form);
53    win.end();
54    win.show();
55
56    form.rename_prop("a", "Longer name");
57    let x = form.x() + 50;
58    let y = form.y();
59    form.set_pos(x, y);
60
61    let v = form.get_prop("b"); // <-- get a single property
62    assert_eq!(v, Some("3.0".to_owned()));
63
64    btn.set_callback(move |_| {
65        println!("{:?}", form.get_props()); // <-- get a HashMap of the properties
66    });
67
68    a.run().unwrap();
69}