TimeBlock.cs 1.4 KB

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