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 过程宏
每月下载量:185
用于egui_struct
62KB
958 行
EguiStruct
EguiStruct是一个Rust derive宏,可以从任意结构和枚举创建egui UI。这对于生成可以在egui UI中修改和显示的数据绑定非常有用。
库的想法类似于以下库:egui-probe、enum2egui、egui_inspect 和 egui-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
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