using System.Collections.Generic; using System.Linq; namespace RosettaUI.UndoSystem { /// /// ListViewのアイテム削除を元に戻すためのUndoRecord /// - 削除されたアイテムのElement以下のFieldBaseElementの値を記録する /// - Undoでアイテムを元に戻し、記録した値を復元する /// - 復元時はElementの構造が変わっていない想定。DynamicElementなどで構造が変わっていると正しく復元できない可能性がある /// public class UndoRecordListItemRemove : UndoRecordListItemRestoreBase { public override string Name => $"List Item Remove index:({string.Join(", ", records.Select(r => r.index))})"; public void Initialize(ListViewItemContainerElement listElement, IEnumerable indices) { base.Initialize(listElement); ClearRecords(); records.AddRange(listElement.GetListEditor().CreateRestoreRecords(indices)); } // Undoで削除されたアイテムを元に戻し、値を復元する public override void Undo() { Element.GetListEditor().ApplyRestoreRecords(records); } public override void Redo() { Element.GetListEditor().RemoveItems(records.Select(r => r.index)); } } public static partial class Undo { public static void RecordListItemRemove(ListViewItemContainerElement listElement, IEnumerable indices) { if (!UndoHistory.CanAdd) return; using (UndoRecorder.Get(out var record)) { record.Initialize(listElement, indices); } } } }