CoreTime.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using System;
  2. namespace InABox.Core
  3. {
  4. public class CoreTime : BaseObject, IEnclosedEntity
  5. {
  6. [TimeOfDayEditor]
  7. [EditorSequence(1)]
  8. [LoggableProperty(Format = "HH\\:mm")]
  9. public TimeSpan Start { get; set; }
  10. [DurationEditor(Summary = Summary.Sum)]
  11. [EditorSequence(2)]
  12. public TimeSpan Duration { get; set; }
  13. [TimeOfDayEditor]
  14. [EditorSequence(3)]
  15. [LoggableProperty(Format = "HH\\:mm")]
  16. public TimeSpan Finish { get; set; }
  17. private bool bChanging = false;
  18. protected override void DoPropertyChanged(string name, object? before, object? after)
  19. {
  20. base.DoPropertyChanged(name, before, after);
  21. if (bChanging)
  22. return;
  23. bChanging = true;
  24. if (String.Equals(name,nameof(Start)))
  25. Duration = Finish > (TimeSpan)after ? Finish.Subtract((TimeSpan)after) : new TimeSpan();
  26. else if (String.Equals(name,nameof(Finish)))
  27. Duration = (TimeSpan)after > Start ? ((TimeSpan)after).Subtract(Start) : new TimeSpan();
  28. else if (String.Equals(name,nameof(Duration)))
  29. Finish = Start.Add((TimeSpan)after);
  30. bChanging = false;
  31. }
  32. }
  33. }