Skip to content

Create an UI configuration framework #97

Description

@Lakritzator

This feels like it will be a long chat, as the topic feels complex.

I would like to have the possibility to have a modern settings UI, mostly automatically generated (source generator) by specifying attributes on my configuration interfaces. From complete window (modern, with dark/light mode), the layout inside the window (horizontal / vertical tabs), or re-usable components which can be used in the application wherever they want (allowing flexibility for the developer). The behavior can be automatically (change the setting -> done), on confirm / close (change setting, first when window is closed or confirmed via a button is it set) with a rollback on cancel.

The settings can be UI controls like checkboxes, dropdowns, text boxes, sliders, up/down, radio buttons, and maybe more. Meaning there is a need to have attributes which describe what kind of setting it is. It should be possible to define, in a partial class, a behavior on the different controls, e.g. have something run when the user clicks a checkbox, or clicks in a textbox / leaves again etc.

The single settings are disabled (default) or hidden, depending on the attribute, if there is a constant value for it.
The settings can have errors due to validation before opening, or generate validation errors while changing.

The settings have a matching internationalization, so a key linking the "text" is needed.
Settings might have influence on each other, so one can group multiple settings together (in the UI), and enable / disable or make these visible/invisible with another setting.

I would expect a csproj for the library consumers and a source generation project, which will be provided as nuget packages like the Dapplo.Ini packages, and a csproj with an demo application which is just for development and testing.

The result should be a usable framework for a modern settings UI, which takes a way most of the work & maintenance to create the UI.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions