Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork8
zakarumych/egui-probe
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Effortlessly create UI widgets to display and modify value types using a derive macro with rich customization via attributes. This library is exclusively for theegui UI framework.
- 🪄Derive Macro: Automatically generate UI widgets for your types.
- 🎨Rich Customization: Customize the generated widgets using attributes.
- 🚀Seamless Integration: Designed to work seamlessly with egui.
Addegui_probe
to yourCargo.toml
:
[dependencies]egui_probe ="0.5.2"
DeriveEguiProbe
for your types.Use attributes to customize the UI:
#[derive(EguiProbe)]structSimpleValue{boolean:bool,integer:i32,float:f32,}
And this is what you get:
structFoo;fncustom_probe(_:&mutFoo,ui:&mut egui::Ui, _:&egui_probe::Style) -> egui::Response{ ui.label("This is custom probe")}#[derive(EguiProbe)]#[egui_probe(transparent)]structUpTo7(#[egui_probe(range = ..=7)]u32);#[derive(EguiProbe)]#[egui_probe(tags inlined)]enumInlinedTags{Empty,#[egui_probe(transparent)]InlinedFloat(f32),Text{#[egui_probe(multiline)]text:String,},}#[derive(EguiProbe)]#[egui_probe(tags combobox)]enumComboBoxTags{Empty,Num{value:usize},}implDefaultforComboBoxTags{fndefault() ->Self{ComboBoxTags::Empty}}#[derive(Default,EguiProbe)]#[egui_probe(rename_all =Train-Case)]structInnerValue{line:String,#[egui_probe(multiline)]multi_line:String,#[cfg(feature ="smallvec1")]small_vec_1: smallvec1::SmallVec<[String;4]>,#[cfg(feature ="smallvec2")]small_vec_2: smallvec2::SmallVec<f32,4>,#[cfg(feature ="hashbrown")]hash_brown: hashbrown::HashMap<u8,f32>,}#[derive(EguiProbe)]structDemoValue{boolean:bool,#[egui_probe(toggle_switch)]boolean_toggle:bool,float:f32,#[egui_probe(range =22..=55)]range:usize,range_to:UpTo7,#[egui_probe(range =50..)]range_from:u8,#[egui_probe(as angle)]angle:f32,#[egui_probe(with custom_probe)]custom:Foo,#[egui_probe(name ="renamed ^_^")]renamed:u8,maybe_boolean:Option<bool>,inner:InnerValue,inlined_tags:InlinedTags,option_combobox_tags:Option<ComboBoxTags>,array:[u8;3],vector:Vec<bool>,#[egui_probe(frozen)]frozen_vector:Vec<bool>,map:HashMap<String,u32>,#[egui_probe(frozen)]frozen_map:HashMap<String,u32>,}
And this is what you get:
#[egui_probe(rename_all = kebab-case)]
: Changes default name of all fields into specified case.Available cases are:snake_case
camelCase
kebab-case
PascalCase
SCREAMING_SNAKE_CASE
orUPPER_SNAKE_CASE
Train-Case
#[egui_probe(where TypeA: TraitB)]
: Adds where clause to theEguiProbe
implementation.Predicates follow Rust syntax.#[egui_probe(transparent)]
: Renders entire type as its only field.Won't compile if the type doesn't have exactly one non-skipped field.#[egui_probe(tags kind)]
: Controls how enum variants are rendered.If kind iscombobox
, a combobox is used to select the variant.If kind isinlined
, the variant is rendered inline using radio buttons.
#[egui_probe(name = "custom name")]
: Rename the variant in the UI.#[egui_probe(transparent)]
: Renders the variant as its only field.Won't compile if the variant doesn't have exactly one non-skipped field.
#[egui_probe(skip)]
: Skip the field in the UI.No other attributes should be used with this attribute.#[egui_probe(name = "custom name")]
: Rename the field in the UI.#[egui_probe(with probe_fn)]
: Render a filed using specified probe functionwith signaturefn(&mut FieldType, &mut Ui, &egui_probe::Style) -> egui::Response
.Node thatprobe_fn
can be an expression, so closure can be used.#[egui_probe(as probe_fn)]
: Render a filed using specified probe functionwith signaturefn(&mut FieldType) -> impl EguiProbe
.i.e. wrapping the field into type that implementsEguiProbe
.#[egui_probe(range = 22..=55)]
: Specify a range for numeric values.Works on optionals too.#[egui_probe(multiline)]
: Render a string as a multiline text box.Field must be of typeString
or&str
. Or an option of those.#[egui_probe(toggle_switch)]
: Render a boolean as a toggle switch.Field must be of typebool
or an optional ofbool
.#[egui_probe(frozen)]
: Renders a collection without controls to add or remove elements.#[egui_probe(rgb)]
: Render opaque color picker in RGB space.Field must be of typeegui::Color32
,egui::Rgba
,[u8; 3]
or[f32; 3]
.#[egui_probe(rgba)]
: Render color picker in RGB space with alpha.Field must be of typeegui::Color32
,egui::Rgba
.#[egui_probe(rgba_premultiplied)]
: Render color picker in RGB space with premultiplied alpha.Foregui::Color32
andegui::Rgba
it is the same as#[egui_probe(rgba)]
.But it can be used on[u8; 4]
and[f32; 4]
.#[egui_probe(rgba_unmultiplied)]
: Render color picker in RGB space with unmultiplied alpha.It can't be used withegui::Color32
andegui::Rgba
,as those are always premultiplied. But it can be used on[u8; 4]
and[f32; 4]
.
This project is licensed under either of
- MIT License
- Apache License, Version 2.0
at your option.
Contributions are welcome! Please open an issue or submit a pull request.
Enjoy building your UI with Egui Probe! 🚀
About
Value probing with egui based UI
Resources
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
Packages0
Uh oh!
There was an error while loading.Please reload this page.