public VisualElement GetParameterSettingsField(ExposedParameter parameter, Action<object> valueChangedCallback)
{
serializedObject.Update();
VisualElement view = new VisualElement();
int propIndex = FindPropertyIndex(parameter);
var serializedParameter = serializedParameters.GetArrayElementAtIndex(propIndex);
serializedParameter.managedReferenceValue = exposedParameterObject.parameters[propIndex];
var serializedSettings = serializedParameter.FindPropertyRelative(nameof(ExposedParameter.settings));
serializedSettings.managedReferenceValue = exposedParameterObject.parameters[propIndex].settings;
var settingsField = new PropertyField(serializedSettings);
settingsField.Bind(serializedObject);
view.Add(settingsField);
// TODO: see if we can replace this with an event
oldParameterSettings[parameter] = parameter.settings;
view.Add(new IMGUIContainer(() =>
{
if (oldParameterSettings.TryGetValue(parameter, out var settings))
{
if (!settings.Equals(parameter.settings))
valueChangedCallback(parameter.settings);
}
oldParameterSettings[parameter] = parameter.settings;
}));
return view;
}