Skip to content

Add support for custom enum as sketch parameter#107

Merged
abey79 merged 13 commits into
masterfrom
enum-widget
Jan 12, 2024
Merged

Add support for custom enum as sketch parameter#107
abey79 merged 13 commits into
masterfrom
enum-widget

Conversation

@abey79

@abey79 abey79 commented Jan 12, 2024

Copy link
Copy Markdown
Owner

This PR adds support for custom enum to be used as sketch parameter, via the same Widget derive macro and #[sketch_widget] helper attribute.

The generated code distinguishes two cases:

  1. "simple", C-style enums (no variant contains data)
  2. "complex" enums (one or more variant has named or unnamed fields)

The former are displayed as a simple label + combo box that align to the UI grid. The latter offer a hierarchical UI that displays UI for nested data.

The ui_demo.rs example is updated to showcase the change.

#[sketch_widget]
#[derive(Default)]
enum SimpleEnum {
    #[default]
    Poodle,
    Corgy,
    Dalmatian,
}

#[sketch_widget]
#[derive(Default)]
enum CustomEnum {
    Variant1 {
        #[param(slider, min = 0.0, max = 1.0)]
        some_float: f64,

        #[skip]
        incompatible: IncompatibleStruct,
    },
    Variant2(
        bool,
        #[param(slider, min = 0.0, max = 1.0)] f64,
        #[skip] IncompatibleStruct,
    ),
    #[default]
    Variant3,
}
image

Limitations

  • Using self to refer to another field in a #[param] attribute is not possible with enum fields.
  • The whiskers-derive crate code is getting uglier and uglier.
  • The UI for complex-enum empty variant is not very nice.

abey79 added 11 commits January 11, 2024 11:43
TODO:
- better UI
- handle "simple" enum (no collapsing, grid true)
- handle `self` (how???)
- clean code
TODO:
- proper formatting of identifiers
- handle `self` (how???)
- clean code
TODO:
- handle `self` (how???)
- clean code
TODO:
- handle `self` (how???)
- clean code
TODO:
- handle `param`!!!!
- handle `self` (how???)
- clean code
TODO:
- handle `skip`!!!!
- handle `self` (how???)
- clean code
@abey79 abey79 added whiskers Relates to whiskers or whiskers-derive feature New feature labels Jan 12, 2024
@abey79 abey79 merged commit bd5b5c9 into master Jan 12, 2024
@abey79 abey79 deleted the enum-widget branch January 12, 2024 14:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature New feature whiskers Relates to whiskers or whiskers-derive

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant