#egui #enums #create #macro-derive #ui #generate #egui-struct

过程宏 egui_struct_macros

EguiStruct是一个Rust derive宏,可以从任意结构和枚举创建egui UI。

4个版本 (2个破坏性更新)

0.4.2 2024年7月9日
0.4.1 2024年4月2日
0.3.0 2023年11月9日
0.2.0 2023年10月30日

#1447 in 过程宏

Download history 18/week @ 2024-04-14 6/week @ 2024-04-21 9/week @ 2024-05-05 2/week @ 2024-05-12 45/week @ 2024-05-19 7/week @ 2024-05-26 24/week @ 2024-06-02 15/week @ 2024-06-09 5/week @ 2024-06-16 15/week @ 2024-06-23 1/week @ 2024-06-30 125/week @ 2024-07-07 11/week @ 2024-07-14 49/week @ 2024-07-28

每月下载量:185
用于egui_struct

MIT许可证

62KB
958

EguiStruct

crates.io Documentation MIT

EguiStruct是一个Rust derive宏,可以从任意结构和枚举创建egui UI。这对于生成可以在egui UI中修改和显示的数据绑定非常有用。

库的想法类似于以下库:egui-probeenum2eguiegui_inspectegui-controls,但有一些重要的区别。

EguiStruct与类似库的比较

EguiStruct egui-probe enum2egui egui_inspect egui-controls
egui版本 0.26 (0.21-0.28) **** 0.27/0.28 0.23/0.24.1/0.26 0.20 N/A
布局* 网格 网格 分组/嵌套 嵌套 网格
国际化支持 ✅ (rust-i18n**)
字段描述 ✅ 鼠标悬停提示(来自属性) ✅ 第三列(来自文档注释)
重命名字段/变体 ✅/❌ (枚举仅限)
大量名称大小写转换
变更回调
重置按钮
跳过字段
数值和字符串支持
Vec支持 ✅/❌ (不支持添加/删除元素) ✅ std, smallvec1/2
其他支持 ✅ bool, Option, [T;N] ✅ bool, Option, [T;N], 一些egui类型 ✅ bool, Option ✅ bool, [T;N]
HashMap/Set支持 ✅ std, indexmap ✅ std, hashbrown ✅ std, hashbrown
映射字段/覆盖实现
结构derive
枚举derive
derive中的自定义类型
配置数值 ✅ 滑块(min,max),滑块(min,max,step),DragValue(min,max),DragValue,列表 ✅ DragValue(min,max),DragValue ✅ 滑块(min,max),DragValue
配置字符串 ✅ 多行/单行,列表 ✅ 多行/单行 ✅ 多行/单行
配置用户类型
配置其他 ✅ Color32, bool, 枚举(下拉框或内嵌按钮),集合/向量/映射
列表/下拉框包装器 ✅ ***

* 所有的内容都放在滚动和网格布局中(具有可折叠的行)

  • Gui更整洁,
  • 所有值都对齐,
  • Gui宽度紧凑

** 集成/考虑到国际化(使用rust-i18n包(如果使用提取器修改后的rust-i18n))

*** 将 T: Clone + ToString + PartialEq 类型包装到 Combobox<T> 并通过 config 属性迭代器传递所有可能的值 → 字段将显示为下拉框

**** 请参阅 Usage >> egui 版本EguiStruct 通过功能支持egui的所有版本;其他包只支持“最新”版本,对其他版本的支持是通过使用遗留版本实现的)

用法

基本描述

egui_struct 添加到您的 Cargo.toml

egui_struct = "0.4"

将 derive 宏 EguiStruct 添加到您想显示的结构(以及所有嵌套类型)

#[derive(EguiStruct)]
pub struct TupleStruct(u8, u32, String, SubData);

然后,要显示数据,您只需要在顶级结构上调用 show_top(..)

egui::CentralPanel::default().show(ctx, |ui| {
  data.show_top(ui, RichText::new("Data").heading(), None);
});

详细描述

请参阅文档

示例

请参阅 ./demo

obraz

egui版本

egui_struct 0.4 默认依赖于 egui 0.26。要使用egui的其他版本,请在 Cargo.toml 中使用正确的功能,例如,要使其与egui 0.28一起工作

egui_struct = { version = "0.4", default-features = false, features = [ "egui28" ] }

或者使用 [patch] 部分。

默认egui版本功能将在semver次要版本发布(0.5)时更新到最新egui。

待办事项

  • 优雅的错误/无效输入处理及有用的消息(宏)
    • 添加界限
  • 测试
  • 代码清理与简化
  • 支持向Vec和Hashmap中添加/删除元素
  • (需要专业化) EguiStructEq/EguiStructClone 默认实现

依赖关系

~1.2–1.7MB
~32K SLoC