using RosettaUI; namespace PrefsGUI.RosettaUI { public static class PrefsGUIExtensionField { public static Element CreateElement(this PrefsParamOuter prefs, LabelElement label = null) { var element = UI.Row( prefs.CreateFieldRaw(label ?? UI.Label(() => prefs.key)), prefs.CreateDefaultButtonElement() ); PrefsGUIExtension.SubscribeSyncedFlag(prefs, element); return element; } public static Element CreateFieldRaw(this PrefsParamOuter prefs, LabelElement label = null) { return UI.Field(label, prefs.Get, v => prefs.Set(v)); } public static Element CreateElement( #pragma warning disable CS0618 // Type or member is obsolete this PrefsSet prefs) #pragma warning restore CS0618 // Type or member is obsolete where TPrefs0 : PrefsParamOuter where TPrefs1 : PrefsParamOuter { var fold = UI.Fold( UI.Label(() => prefs.key), prefs.prefs0.CreateElement(), prefs.prefs1.CreateElement() ); SubscribePrefsSetSyncedFlag(prefs.prefs0, prefs.prefs1, fold); return fold; void SubscribePrefsSetSyncedFlag(PrefsParam prefs0, PrefsParam prefs1, Element element) { prefs0.onSyncedChanged += _ => OnSyncedChanged(); prefs1.onSyncedChanged += _ => OnSyncedChanged(); OnSyncedChanged(); void OnSyncedChanged() { var synced = prefs0.Synced && prefs1.Synced; element?.SetColor(synced ? PrefsParam.syncedColor : null); } } } } }