File: TrimRouteAndAddLapsAction.cs

package info (click to toggle)
quickroute-gps 2.5-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 19,576 kB
  • sloc: cs: 74,488; makefile: 72; sh: 43
file content (72 lines) | stat: -rw-r--r-- 2,195 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
using System;
using System.Collections.Generic;
using System.Text;

namespace QuickRoute.BusinessEntities.Actions
{
  public class TrimRouteAndAddLapsAction : IAction 
  {
    public DateTime? StartTime { get; set; }
    public DateTime? EndTime { get; set; }
    public List<Lap> Laps { get; set; }
    public Session Session { get; set; }
    private CutRouteAction startTimeCutAction;
    private CutRouteAction endTimeCutAction;
    private List<AddLapAction> addLapActions;
    private readonly TimeSpan offset;

    public TrimRouteAndAddLapsAction(DateTime? startTime, DateTime? endTime, List<Lap> laps, Session session)
    {
      StartTime = startTime;
      EndTime = endTime;
      Laps = laps;
      Session = session;

      if (StartTime.HasValue && EndTime.HasValue)
      {
        if (EndTime.Value < Session.Route.FirstWaypoint.Time || StartTime.Value > Session.Route.LastWaypoint.Time)
        {
          offset = Session.Route.FirstWaypoint.Time - StartTime.Value;
        }
      }
    }

    public void Execute()
    {
      if (StartTime.HasValue)
      {
        startTimeCutAction = new CutRouteAction(Session, StartTime.Value + offset,
                                                CutType.Before);
        startTimeCutAction.Execute();
      }
      if (EndTime.HasValue)
      {
        endTimeCutAction = new CutRouteAction(Session, EndTime.Value + offset,
                                                CutType.After);
        endTimeCutAction.Execute();
      }
      addLapActions = new List<AddLapAction>();
      foreach(Lap lap in Laps)
      {
        lap.Time += offset;
        if (lap.Time >= Session.Route.FirstWaypoint.Time &&
            lap.Time <= Session.Route.LastWaypoint.Time)
        {
          var a = new AddLapAction(lap, Session);
          addLapActions.Add(a);
          a.Execute();
        }
      }
    }

    public void Undo()
    {
      foreach (AddLapAction a in addLapActions)
      {
        a.Undo();
      }
      if (endTimeCutAction != null) endTimeCutAction.Undo();
      if (startTimeCutAction != null) startTimeCutAction.Undo();
    }
  }
}