CreateFolder_ChangeInfo.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using System.Collections.Immutable;
  2. using PixiEditor.ChangeableDocument.Enums;
  3. namespace PixiEditor.ChangeableDocument.ChangeInfos.Structure;
  4. public record class CreateFolder_ChangeInfo : CreateStructureMember_ChangeInfo
  5. {
  6. public CreateFolder_ChangeInfo(
  7. Guid parentGuid,
  8. int index,
  9. float opacity,
  10. bool isVisible,
  11. bool clipToMemberBelow,
  12. string name,
  13. BlendMode blendMode,
  14. Guid guidValue,
  15. bool hasMask,
  16. bool maskIsVisible,
  17. ImmutableList<CreateStructureMember_ChangeInfo> children) : base(parentGuid, index, opacity, isVisible, clipToMemberBelow, name, blendMode, guidValue, hasMask, maskIsVisible)
  18. {
  19. Children = children;
  20. }
  21. public ImmutableList<CreateStructureMember_ChangeInfo> Children { get; }
  22. internal static CreateFolder_ChangeInfo FromFolder(Guid parentGuid, int index, Folder folder)
  23. {
  24. var builder = ImmutableList.CreateBuilder<CreateStructureMember_ChangeInfo>();
  25. for (int i = 0; i < folder.Children.Count; i++)
  26. {
  27. var child = folder.Children[i];
  28. CreateStructureMember_ChangeInfo info = child switch
  29. {
  30. Folder innerFolder => CreateFolder_ChangeInfo.FromFolder(folder.GuidValue, i, innerFolder),
  31. Layer innerLayer => CreateLayer_ChangeInfo.FromLayer(folder.GuidValue, i, innerLayer),
  32. _ => throw new NotSupportedException(),
  33. };
  34. builder.Add(info);
  35. }
  36. return new CreateFolder_ChangeInfo(
  37. parentGuid,
  38. index,
  39. folder.Opacity,
  40. folder.IsVisible,
  41. folder.ClipToMemberBelow,
  42. folder.Name,
  43. folder.BlendMode,
  44. folder.GuidValue,
  45. folder.Mask is not null,
  46. folder.MaskIsVisible,
  47. builder.ToImmutable()
  48. );
  49. }
  50. }