fl2rust
用法
$ cargo install fl2rust
然后运行:
$ fl2rust <fl file>.fl > <output file>.rs
要通过 cargo 实现自动化,我们可以通过将 fl2rust 添加到构建依赖项中来将其用作库:
# 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();
}
获取FLUID的几种方式:
cargo install fltk-fluid
- 通过包管理器。
- 通过使用 cmake 自己构建 fltk 库。
- Fluid 在构建 fltk-rs 时构建,它将位于 OUT_DIR 中。
- archLinux安装fluid(sudo pacman -S fltk)
i18n 支持
tr!
0.4.4 版通过tr crate 中的宏添加了 i18n 支持。要启用它:
- 在
fluid
中,Edit->Project Settings...->Internationalization.。 - 更改下拉菜单以使用 GNU gettext(tr crate 支持 gettext-rs 和 gettext 两种形式)。
- 将 tr 添加到 Cargo.toml 中的依赖项。
- 添加到我们的 main.rs 文件:
#[macro_use]
extern crate tr;
- 按照 tr crate 的文档中的描述初始化 tr。
已知限制
- 不支持添加任意代码或声明全局/成员变量。
- 仅支持构造方法。
- fl2rust 不会检查生成的 Rust 代码的正确性。
教程
- 将 FLUID(RAD 工具)与 Rust 一起使用