/// <summary> /// Update the display models with all trains in the document. /// </summary> public void UpdateTrainDisplays() { DownTrainsDisplay.TrainSegments.Clear(); DownTrainsDisplay.CleanLocations(); UpTrainsDisplay.TrainSegments.Clear(); UpTrainsDisplay.CleanLocations(); foreach (var train in TrainList) { ProcessTrain(train); } }
private void TrainRemoveHandler(object sender, TrainEventArgs e) { if (DownTrainsDisplay.TrainSegments.RemoveAll(s => s.TrainId == e.Train.Id) > 0) { DownTrainsDisplay.CleanLocations(); } if (UpTrainsDisplay.TrainSegments.RemoveAll(s => s.TrainId == e.Train.Id) > 0) { UpTrainsDisplay.CleanLocations(); } OnTimetableDocumentChanged(); }
private void ProcessTrain(Train train) { Log.Trace(CultureInfo.CurrentCulture, Resources.LogMessage_ProcessTrain, train.Id); TrainSegmentModel currentSegment = new TrainSegmentModel(train, null); SetToWorkCellValue(currentSegment.ToWorkCell); SetToWorkCellValue(currentSegment.LocoToWorkCell); Direction?currentDirection = null; currentSegment.PageFootnotes.AddRange(GetFootnotesForTimingPoint(train.TrainTimes[0])); if (!string.IsNullOrWhiteSpace(train.TrainTimes[0].Path)) { LocationEntryModel lem = new LocationEntryModel { DisplayedText = train.TrainTimes[0].Path, EntryType = TrainLocationTimeEntryType.RoutingCode, LocationId = train.TrainTimes[0].Location.Id, LocationKey = train.TrainTimes[0].Location.Id + LocationIdSuffixes.Path, }; currentSegment.Timings.Add(lem); currentSegment.TimingsIndex.Add(lem.LocationKey, lem); } if (train.TrainTimes[0].ArrivalTime?.Time != null) { var timeModel = train.TrainTimes[0].ArrivalTimeModel; currentSegment.Timings.Add(timeModel); currentSegment.TimingsIndex.Add(train.TrainTimes[0].Location.Id + LocationIdSuffixes.Arrival, timeModel); } if (!string.IsNullOrWhiteSpace(train.TrainTimes[0].Platform)) { LocationEntryModel lem = new LocationEntryModel { DisplayedText = train.TrainTimes[0].Platform, EntryType = TrainLocationTimeEntryType.RoutingCode, LocationId = train.TrainTimes[0].Location.Id, LocationKey = train.TrainTimes[0].Location.Id + LocationIdSuffixes.Platform, }; currentSegment.Timings.Add(lem); currentSegment.TimingsIndex.Add(lem.LocationKey, lem); } if (train.TrainTimes[0].DepartureTime?.Time != null) { var timeModel = train.TrainTimes[0].DepartureTimeModel; currentSegment.Timings.Add(timeModel); currentSegment.TimingsIndex.Add(train.TrainTimes[0].Location.Id + LocationIdSuffixes.Departure, timeModel); } if (!string.IsNullOrWhiteSpace(train.TrainTimes[0].Line)) { LocationEntryModel lem = new LocationEntryModel { DisplayedText = train.TrainTimes[0].Line, EntryType = TrainLocationTimeEntryType.RoutingCode, LocationId = train.TrainTimes[0].Location.Id, LocationKey = train.TrainTimes[0].Location.Id + LocationIdSuffixes.Line, }; currentSegment.Timings.Add(lem); currentSegment.TimingsIndex.Add(lem.LocationKey, lem); } for (int i = 1; i < train.TrainTimes.Count; ++i) { Direction newDirection = train.TrainTimes[i].Location > train.TrainTimes[i - 1].Location ? Direction.Down : Direction.Up; if (currentDirection == null) { currentDirection = newDirection; } else if (currentDirection != newDirection) { if (currentDirection == Direction.Down) { DownTrainsDisplay.Add(currentSegment); } else { UpTrainsDisplay.Add(currentSegment); } currentSegment = new TrainSegmentModel(train, null); currentDirection = newDirection; } currentSegment.PageFootnotes.AddRange(GetFootnotesForTimingPoint(train.TrainTimes[i])); if (!string.IsNullOrWhiteSpace(train.TrainTimes[i].Path)) { LocationEntryModel lem = new LocationEntryModel { DisplayedText = train.TrainTimes[i].Path, EntryType = TrainLocationTimeEntryType.RoutingCode, LocationId = train.TrainTimes[i].Location.Id, LocationKey = train.TrainTimes[i].Location.Id + LocationIdSuffixes.Path, }; currentSegment.Timings.Add(lem); currentSegment.TimingsIndex.Add(lem.LocationKey, lem); } if (train.TrainTimes[i].ArrivalTime?.Time != null) { var timeModel = train.TrainTimes[i].ArrivalTimeModel; currentSegment.Timings.Add(timeModel); currentSegment.TimingsIndex.Add(train.TrainTimes[i].Location.Id + LocationIdSuffixes.Arrival, timeModel); } if (!string.IsNullOrWhiteSpace(train.TrainTimes[i].Platform)) { LocationEntryModel lem = new LocationEntryModel { DisplayedText = train.TrainTimes[i].Platform, EntryType = TrainLocationTimeEntryType.RoutingCode, LocationId = train.TrainTimes[i].Location.Id, LocationKey = train.TrainTimes[i].Location.Id + LocationIdSuffixes.Platform, }; currentSegment.Timings.Add(lem); currentSegment.TimingsIndex.Add(lem.LocationKey, lem); } if (train.TrainTimes[i].DepartureTime?.Time != null) { var timeModel = train.TrainTimes[i].DepartureTimeModel; currentSegment.Timings.Add(timeModel); currentSegment.TimingsIndex.Add(train.TrainTimes[i].Location.Id + LocationIdSuffixes.Departure, timeModel); } if (!string.IsNullOrWhiteSpace(train.TrainTimes[i].Line)) { LocationEntryModel lem = new LocationEntryModel { DisplayedText = train.TrainTimes[i].Line, EntryType = TrainLocationTimeEntryType.RoutingCode, LocationId = train.TrainTimes[i].Location.Id, LocationKey = train.TrainTimes[i].Location.Id + LocationIdSuffixes.Line, }; currentSegment.Timings.Add(lem); currentSegment.TimingsIndex.Add(lem.LocationKey, lem); } } if (currentDirection == Direction.Down) { DownTrainsDisplay.Add(currentSegment); } else { UpTrainsDisplay.Add(currentSegment); } }