CreateStructureMember_Change.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using PixiEditor.ChangeableDocument.Changeables;
  2. using PixiEditor.ChangeableDocument.ChangeInfos;
  3. using PixiEditor.ChangeableDocument.ChangeInfos.Structure;
  4. using PixiEditor.ChangeableDocument.Enums;
  5. namespace PixiEditor.ChangeableDocument.Changes.Structure;
  6. internal class CreateStructureMember_Change : Change
  7. {
  8. private Guid newMemberGuid;
  9. private Guid parentFolderGuid;
  10. private int parentFolderIndex;
  11. private StructureMemberType type;
  12. [GenerateMakeChangeAction]
  13. public CreateStructureMember_Change(Guid parentFolder, Guid newGuid, int parentFolderIndex, StructureMemberType type)
  14. {
  15. this.parentFolderGuid = parentFolder;
  16. this.parentFolderIndex = parentFolderIndex;
  17. this.type = type;
  18. newMemberGuid = newGuid;
  19. }
  20. public override void Initialize(Document target) { }
  21. public override IChangeInfo Apply(Document document, out bool ignoreInUndo)
  22. {
  23. var folder = (Folder)document.FindMemberOrThrow(parentFolderGuid);
  24. StructureMember member = type switch
  25. {
  26. StructureMemberType.Layer => new Layer(document.Size) { GuidValue = newMemberGuid },
  27. StructureMemberType.Folder => new Folder() { GuidValue = newMemberGuid },
  28. _ => throw new InvalidOperationException("Cannon create member of type " + type.ToString())
  29. };
  30. folder.Children.Insert(parentFolderIndex, member);
  31. ignoreInUndo = false;
  32. return new CreateStructureMember_ChangeInfo() { GuidValue = newMemberGuid };
  33. }
  34. public override IChangeInfo Revert(Document document)
  35. {
  36. var folder = (Folder)document.FindMemberOrThrow(parentFolderGuid);
  37. var child = document.FindMemberOrThrow(newMemberGuid);
  38. child.Dispose();
  39. folder.Children.RemoveAt(folder.Children.FindIndex(child => child.GuidValue == newMemberGuid));
  40. return new DeleteStructureMember_ChangeInfo() { GuidValue = newMemberGuid, ParentGuid = parentFolderGuid };
  41. }
  42. }