using System;
using RosettaUI.Swatch;
using UnityEngine;
using UnityEngine.UIElements;
namespace RosettaUI.UIToolkit.AnimationCurveEditor
{
///
/// AnimationCurveEditor下部のプリセット表示部分
///
public class PresetsPreview : VisualElement
{
private static readonly string USSClassName = $"{AnimationCurveEditor.USSClassName}__presets-preview";
private readonly SwatchPersistentService _persistentService;
private readonly Action _applyValueFunc;
public PresetsPreview(SwatchPersistentService persistentService, Action applyValueFunc)
{
_persistentService = persistentService;
_applyValueFunc = applyValueFunc;
AddToClassList(USSClassName);
RegisterCallback(OnAttachToPanel);
RegisterCallback(OnDetachFromPanel);
}
private void OnAttachToPanel(AttachToPanelEvent evt)
{
ResetView();
_persistentService.onSaveSwatches += ResetView;
}
private void OnDetachFromPanel(DetachFromPanelEvent evt)
{
_persistentService.onSaveSwatches -= ResetView;
}
private void ResetView()
{
// remove all children
Clear();
var nameAndValues = _persistentService.LoadSwatches() ?? Array.Empty>();
foreach (var nameAndValue in nameAndValues)
{
var preset = new Preset()
{
Value = nameAndValue.value,
Label = nameAndValue.name
};
preset.RegisterCallback(_ => _applyValueFunc?.Invoke(preset.Value));
Add(preset);
}
}
}
}