14 个版本
0.5.19 | 2023年12月29日 |
---|---|
0.5.18 | 2023年12月27日 |
0.5.17 | 2023年8月2日 |
0.5.16 | 2023年7月19日 |
0.5.8 | 2022年11月29日 |
#1327 in GUI
42KB
877 行
fl2rust
用法
将流体(fltk ui 设计器)文件转换为 Rust 编译器的工具。
MSRV
0.5 版本的最低支持 Rust 版本是 1.63,且 fltk-rs > 1.3.21。
作为可执行文件
您可以通过 cargo-install 安装 fl2rust 并在命令行上运行它
$ cargo install fl2rust
然后运行
$ fl2rust <fl file>.fl > <output file>.rs
作为 proc-macro
(可以通过 cargo-generate 使用的一个模板仓库可以在 这里 找到) 将 fl2rust-macro 添加到您的依赖列表中
# Cargo.toml
[dependencies]
fltk = "1"
fl2rust-macro = "0.5"
由 fluid 生成的 ui 文件,我们将其命名为 myuifile.fl 并将其保存在我们的 src 目录中
# 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}
}
}
}
}
在我们的主源文件中
use fltk::{prelude::*, *};
mod ui {
fl2rust_macro::include_ui!("src/myuifile.fl");
}
fn main() {
let a = app::App::default();
let mut ui = ui::UserInterface::make_window();
ui.but.set_callback(|b| println!("Button clicked!"));
a.run().unwrap();
}
在我们的 build.rs 文件中
fn main() {
println!("cargo:rerun-if-changed=src/myuifile.fl");
}
作为构建依赖项
要使用 cargo 自动化,可以将 fl2rust 作为库添加到您的构建依赖中
# Cargo.toml
[dependencies]
fltk = "1"
[build-dependencies]
fl2rust = "0.5"
// 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!");
}
由 fluid 生成的 ui 文件,我们将其命名为 myuifile.fl 并将其保存在我们的 src 目录中
# 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(dead_code)]
#![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安装 fltk-fluid
- 通过包管理器。
- 通过使用 cmake 自行构建 fltk 库。
国际化支持
版本 0.4.4 通过 tr crate 的 tr!
宏添加了国际化支持。要启用它
- 在 fluid 中,转到编辑->项目设置...->国际化。
- 将下拉菜单更改为使用 GNU gettext(tr crate 两种形式都支持,即 gettext-rs 和 gettext)。
- 将 tr 添加到您的 Cargo.toml 依赖中。
- 将 tr 添加到您的 main.rs 文件中
#[macro_use]
extern crate tr;
- 根据 tr crate 的文档初始化 tr。
已知限制
- 只支持构造函数方法。
- fl2rust 不检查生成的 Rust 代码的正确性。
教程
依赖项
~32KB