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; } } }