Skip to content

Commit 3975adf

Browse files
committed
Add: enum field
1 parent c0783be commit 3975adf

2 files changed

Lines changed: 58 additions & 3 deletions

File tree

src/DebugUI/Assets/DebugUI/Runtime/DebugUIBuilderExtensions.cs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,30 @@ public static IDebugUIBuilder AddButton(this IDebugUIBuilder builder, string tex
4747
return builder;
4848
}
4949

50+
public static IDebugUIBuilder AddField<TEnum>(this IDebugUIBuilder builder, string label, Func<TEnum> getter)
51+
where TEnum : Enum
52+
{
53+
builder.Factories.Add(new DebugEnumFieldFactory<TEnum>()
54+
{
55+
Label = label,
56+
Getter = getter,
57+
});
58+
return builder;
59+
}
60+
61+
62+
public static IDebugUIBuilder AddField<TEnum>(this IDebugUIBuilder builder, string label, Func<TEnum> getter, Action<TEnum> setter)
63+
where TEnum : Enum
64+
{
65+
builder.Factories.Add(new DebugEnumFieldFactory<TEnum>()
66+
{
67+
Label = label,
68+
Getter = getter,
69+
Setter = setter,
70+
});
71+
return builder;
72+
}
73+
5074
public static IDebugUIBuilder AddField(this IDebugUIBuilder builder, string label, Func<bool> getter)
5175
{
5276
builder.Factories.Add(new DebugFieldFactory<bool, Toggle>()
@@ -68,7 +92,6 @@ public static IDebugUIBuilder AddField(this IDebugUIBuilder builder, string labe
6892
return builder;
6993
}
7094

71-
7295
public static IDebugUIBuilder AddField(this IDebugUIBuilder builder, string label, Func<int> getter)
7396
{
7497
builder.Factories.Add(new DebugFieldFactory<int, IntegerField>()

src/DebugUI/Assets/DebugUI/Runtime/DebugUIElementFactory.cs

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,8 +212,41 @@ public VisualElement CreateVisualElement(ICollection<IDisposable> disposables)
212212
}
213213
}
214214

215+
internal sealed class DebugEnumFieldFactory<TEnum> : IDebugUIElementFactory
216+
where TEnum : Enum
217+
{
218+
public string Label { get; set; }
219+
public Func<TEnum> Getter { get; set; }
220+
public Action<TEnum> Setter { get; set; }
221+
222+
public VisualElement CreateVisualElement(ICollection<IDisposable> disposables)
223+
{
224+
var field = new EnumField(Getter())
225+
{
226+
label = Label,
227+
};
228+
229+
if (Setter == null)
230+
{
231+
VisualElementHelper.SetInputFieldsEnabled(field, false);
232+
}
233+
else
234+
{
235+
field.RegisterValueChangedCallback(x => Setter((TEnum)x.newValue));
236+
}
237+
238+
MinimalRx.EveryValueChanged(this, x => x.Getter())
239+
.Subscribe(x =>
240+
{
241+
field.value = x;
242+
})
243+
.AddTo(disposables);
244+
245+
return field;
246+
}
247+
}
248+
215249
internal sealed class DebugFieldFactory<TValue, TField> : IDebugUIElementFactory
216-
where TValue : IEquatable<TValue>
217250
where TField : BaseField<TValue>, new()
218251
{
219252
public string Label { get; set; }
@@ -249,7 +282,6 @@ public VisualElement CreateVisualElement(ICollection<IDisposable> disposables)
249282
}
250283

251284
internal sealed class DebugCompositeFieldFactory<TValue, TCompositeField, TField, TFieldValue> : IDebugUIElementFactory
252-
where TValue : IEquatable<TValue>
253285
where TCompositeField : BaseCompositeField<TValue, TField, TFieldValue>, new()
254286
where TField : TextValueField<TFieldValue>, new()
255287
{

0 commit comments

Comments
 (0)