#egui #macro-derive #ui #enums #create #data #difference

egui_struct

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

5 个不稳定版本

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

Rust 模式 中排名第 460

Download history 6/week @ 2024-05-03 5/week @ 2024-05-10 34/week @ 2024-05-17 15/week @ 2024-05-24 12/week @ 2024-05-31 14/week @ 2024-06-07 6/week @ 2024-06-14 10/week @ 2024-06-21 4/week @ 2024-06-28 106/week @ 2024-07-05 14/week @ 2024-07-12 65/week @ 2024-07-26 29/week @ 2024-08-02 84/week @ 2024-08-09 87/week @ 2024-08-16

每月下载量 265

MIT 许可协议 MIT

50KB
819

EguiStruct

crates.io Documentation MIT

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

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

EguiStruct 与类似 crate 的比较

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**)
字段描述 ✅ 鼠标悬停提示(来自属性) ✅ 第三列(来自文档注释)
重命名字段/变体 ✅/❌ (仅枚举)
大量名称大小写转换
回调-on-change
重置按钮
跳过字段
数值和字符串支持
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),拖动值(min,max),拖动值,列表 ✅ 拖动值(min,max),拖动值 ✅ 滑块(min,max),拖动值
配置字符串 ✅ 多行/单行,列表 ✅ 多行/单行 ✅ 多行/单行
配置用户类型
配置其他 ✅ Color32, bool, 枚举(组合框或内联按钮),集合/向量/映射
列表/组合框包装器 ✅ ***

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

  • Gui 更有序
  • 所有值对齐
  • Gui 在宽度上紧凑

** 集成/考虑国际化(使用 rust-i18n crate(或使用提取器 修改的 rust-i18n))

*** 将 T: Clone + ToString + PartialEq 类型包装到 Combobox<T> 中,并通过 config 属性迭代器传递所有可能的值 → 字段将以组合框的形式显示

**** 请参阅 Usage >> egui 版本 部分 (EguiStruct 通过功能支持 egui 的所有版本;其他 crate 只支持“最新”版本,其他版本的支持是通过使用旧版本实现的)

使用方法

基本描述

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 默认实现

依赖关系

~6–11MB
~114K SLoC