#ui #widgets #bindings #graphics

bin+lib fl2rust

将流体(fltk ui 设计器)文件转换为 Rust 编译器

60 个版本

0.5.19 2023年12月29日
0.5.17 2023年8月2日
0.5.16 2023年7月19日
0.5.12 2022年12月2日
0.3.2 2021年2月19日

#292GUI

Download history 17/week @ 2024-04-22 32/week @ 2024-04-29 24/week @ 2024-05-06 23/week @ 2024-05-13 64/week @ 2024-05-20 28/week @ 2024-05-27 114/week @ 2024-06-03 36/week @ 2024-06-10 66/week @ 2024-06-17 48/week @ 2024-06-24 25/week @ 2024-07-01 33/week @ 2024-07-08 35/week @ 2024-07-15 25/week @ 2024-07-22 54/week @ 2024-07-29 59/week @ 2024-08-05

每月下载量 174
用于 3 crates

MIT 许可证

36KB
854

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 cratetr! 宏添加了国际化支持。要启用它

  • 在 fluid 中,转到 编辑->项目设置...->国际化。
  • 将下拉菜单更改为使用 GNU gettext(tr crate 两种形式都支持,即 gettext-rs 和 gettext)。
  • 在您的 Cargo.toml 中添加 tr 依赖项。
  • 将 tr 添加到您的 main.rs 文件中
#[macro_use]
extern crate tr;
  • 根据 tr crate 的文档初始化 tr。

已知限制

  • 只支持构造函数方法。
  • fl2rust 不会检查生成的 Rust 代码的正确性。

教程

依赖项

~32KB