StructureMemberIsVisible_Change.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. using PixiEditor.ChangeableDocument.ChangeInfos.Properties;
  2. namespace PixiEditor.ChangeableDocument.Changes.Properties;
  3. internal class StructureMemberIsVisible_Change : Change
  4. {
  5. private bool? originalIsVisible;
  6. private bool newIsVisible;
  7. private Guid targetMember;
  8. [GenerateMakeChangeAction]
  9. public StructureMemberIsVisible_Change(bool isVisible, Guid memberGuid)
  10. {
  11. this.targetMember = memberGuid;
  12. this.newIsVisible = isVisible;
  13. }
  14. public override OneOf<Success, Error> InitializeAndValidate(Document target)
  15. {
  16. var member = target.FindMember(targetMember);
  17. if (member is null || member.IsVisible == newIsVisible)
  18. return new Error();
  19. originalIsVisible = member.IsVisible;
  20. return new Success();
  21. }
  22. public override IChangeInfo? Apply(Document target, out bool ignoreInUndo)
  23. {
  24. // don't record layer/folder visibility changes - it's just more convenient this way
  25. ignoreInUndo = true;
  26. target.FindMemberOrThrow(targetMember).IsVisible = newIsVisible;
  27. return new StructureMemberIsVisible_ChangeInfo() { GuidValue = targetMember };
  28. }
  29. public override IChangeInfo? Revert(Document target)
  30. {
  31. target.FindMemberOrThrow(targetMember).IsVisible = originalIsVisible!.Value;
  32. return new StructureMemberIsVisible_ChangeInfo() { GuidValue = targetMember };
  33. }
  34. }