initWithDefaults
Initialize struct options with default options for all fields. Overrides for these defaults are specified in options.
options: field options for all the fields to be displayed. default_value: An optional default value to be used whenever an instance of this type needs ot be created. Used with the same syntax as .init, with the only difference being that this initializer creates default field options for any fields not provided in options.
Example Usage - Display .r, .g, .b, .a as default text entry boxes.
const color_options: dvui.struct_ui.StructOptions(dvui.Color) = .init(.{}, null);
Parameters
- options:std.enums.EnumFieldStruct( StructOptionsT.Key, ?StructOptionsT.Value, @as(?StructOptionsT.Value, null), )
- std.enums.EnumFieldStruct( StructOptionsT.Key, ?StructOptionsT.Value, @as(?StructOptionsT.Value, null), )
- default_value:?StructT
- ?StructT
Source
Implementation
pub fn initWithDefaults(comptime options: std.enums.EnumFieldStruct(
StructOptionsT.Key,
?StructOptionsT.Value,
@as(?StructOptionsT.Value, null),
), comptime default_value: ?StructT) Self {
comptime var field_options: StructOptionsT = .{};
comptime {
for (0..field_options.values.len) |i| {
const key = StructOptionsT.Indexer.keyForIndex(i);
const field_name = @tagName(key);
if (@field(options, field_name)) |*v| {
field_options.put(key, v.*);
} else {
const type_info = @typeInfo(@FieldType(StructT, field_name));
// Skip creating default field options for any pointer fields that can't be displayed.
if (type_info == .pointer and !canDisplayPtr(type_info.pointer)) continue;
field_options.put(key, defaultFieldOption(@FieldType(StructT, field_name)));
}
}
}
return .{
.field_options = field_options,
.default_value = default_value,
};
}