using System;
using RosettaUI.Utilities;
namespace RosettaUI.UndoSystem
{
///
/// FieldBaseElementのValueを記録し復元するUndo機能向けのレコード
/// UndoRecordListItemRemoveで利用される
///
public class FieldBaseElementRestoreRecord : ObjectPoolItem>, IElementRestoreRecord
{
public static IElementRestoreRecord Create(Element element)
{
if (element is not FieldBaseElement fieldBaseElement)
{
throw new ArgumentException($"element must be FieldBaseElement<{typeof(TValue).Name}>");
}
var record = GetPooled();
record.Initialize(fieldBaseElement);
return record;
}
private TValue _value;
private void Initialize(FieldBaseElement fieldBaseElement)
{
_value = UndoHelper.Clone(fieldBaseElement.Value);
}
public bool TryRestore(IUndoRestoreElement element)
{
if (element is not FieldBaseElement fieldBaseElement)
{
return false;
}
fieldBaseElement.GetViewBridge().SetValueFromView(UndoHelper.Clone(_value));
return true;
}
}
}