Rust之fluid用法(fltk ui 设计器)

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 一起使用

猜你喜欢

转载自blog.csdn.net/love906897406/article/details/125886655