Document_CreateStructureMember_Change.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using ChangeableDocument.Changeables;
  2. using ChangeableDocument.ChangeInfos;
  3. namespace ChangeableDocument.Changes
  4. {
  5. internal class Document_CreateStructureMember_Change : Change<Document>
  6. {
  7. private Guid newMemberGuid;
  8. private Guid parentFolderGuid;
  9. private int parentFolderIndex;
  10. private StructureMemberType type;
  11. public Document_CreateStructureMember_Change(Guid parentFolder, int parentFolderIndex, StructureMemberType type)
  12. {
  13. this.parentFolderGuid = parentFolder;
  14. this.parentFolderIndex = parentFolderIndex;
  15. this.type = type;
  16. }
  17. protected override void DoInitialize(Document target)
  18. {
  19. newMemberGuid = Guid.NewGuid();
  20. }
  21. protected override IChangeInfo DoApply(Document document)
  22. {
  23. var folder = (Folder)document.FindMemberOrThrow(parentFolderGuid);
  24. StructureMember member = type switch
  25. {
  26. StructureMemberType.Layer => new Layer() { GuidValue = newMemberGuid },
  27. StructureMemberType.Folder => new Folder() { GuidValue = newMemberGuid },
  28. _ => throw new Exception("Cannon create member of type " + type.ToString())
  29. };
  30. folder.Children.Insert(parentFolderIndex, member);
  31. return new Document_CreateStructureMember_ChangeInfo() { GuidValue = newMemberGuid };
  32. }
  33. protected override IChangeInfo DoRevert(Document document)
  34. {
  35. var folder = (Folder)document.FindMemberOrThrow(parentFolderGuid);
  36. folder.Children.RemoveAt(folder.Children.FindIndex(child => child.GuidValue == newMemberGuid));
  37. return new Document_DeleteStructureMember_ChangeInfo() { GuidValue = newMemberGuid };
  38. }
  39. }
  40. }