#gui #ui #widgets #bindings #graphics

bin+lib fl2rust

A fluid (fltk ui designer) file to Rust transpiler

31 releases

new 0.4.4 Jul 21, 2021
0.4.3 Jun 27, 2021
0.4.1 May 3, 2021
0.4.0 Apr 17, 2021
0.1.14 Jan 7, 2021

#134 in GUI

Download history 32/week @ 2021-04-06 109/week @ 2021-04-13 36/week @ 2021-04-20 14/week @ 2021-04-27 42/week @ 2021-05-04 8/week @ 2021-05-11 33/week @ 2021-05-18 4/week @ 2021-05-25 2/week @ 2021-06-01 46/week @ 2021-06-08 3/week @ 2021-06-15 20/week @ 2021-06-22 7/week @ 2021-06-29 3/week @ 2021-07-06 3/week @ 2021-07-13 63/week @ 2021-07-20

73 downloads per month

MIT license

42KB
899 lines

fl2rust

Usage

A fluid (fltk ui designer) file to Rust transpiler.

As an executable

You can run fl2rust on the command-line by installing using cargo-install:

$ cargo install fl2rust

Then run:

$ fl2rust <fl file>.fl > <output file>.rs

As a library

(A template repo usable via cargo-generate can be found here)

To automate things through cargo, you can use fl2rust as a library by adding it to your build-dependencies:

# Cargo.toml
[dependencies]
fltk = "1"

[build-dependencies]
fl2rust = "0.4"
// build.rs
fn main() {
    use std::path::PathBuf;
    use std::env;
    println!("cargo:rerun-if-changed=src/myuifile.fl");
    let g = fl2rust::Generator::default();
    let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
    g.in_out("src/myuifile.fl", out_path.join("myuifile.rs").to_str().unwrap()).expect("Failed to generate rust from fl file!");
}
# src/myuifile.fl -> generated via fluid
# data file for the Fltk User Interface Designer (fluid)
version 1.0400
header_name {.h}
code_name {.cxx}
class UserInterface {open
} {
  Function {make_window()} {open
  } {
    Fl_Window {} {open selected
      xywh {138 161 440 355} type Double visible
    } {
      Fl_Button but {
        label {Click me}
        xywh {175 230 95 45}
      }
    }
  }
}
// src/myuifile.rs
#![allow(unused_variables)]
#![allow(unused_mut)]
#![allow(unused_imports)]
#![allow(clippy::needless_update)]

include!(concat!(env!("OUT_DIR"), "/myuifile.rs"));
// src/main.rs
use fltk::{prelude::*, *};
mod myuifile;

fn main() {
    let app = app::App::default();
    let mut ui = myuifile::UserInterface::make_window();
    ui.but.set_callback(move |_| {
        println!("Works!");
    });
    app.run().unwrap();
}

i18n support

Version 0.4.4 adds i18n support via the tr! macro from the tr crate. To enable it:

  • In fluid, go to Edit->Project Settings...->Internationalization.
  • Change the dropdown to use GNU gettext (which the tr crate supports in both forms gettext-rs and gettext).
  • Add tr to you dependencies in you Cargo.toml.
  • Add to your main.rs file:
#[macro_use]
extern crate tr;
  • Initialize tr as described in the tr crate's documentation.

Known limitations

  • Adding arbitrary code or declaring global/member variables is unsupported.
  • Only constructor methods are supported.
  • fl2rust doesn't check the generated Rust code for correctness.

Where can you get FLUID?

There are several options: 1- cargo install fltk-fluid​ 2- Fluid is built when building fltk-rs, where it'll be in the OUT_DIR. 2- Through a package manager. 3- By building the fltk library yourself using cmake.

Tutorial

No runtime deps