private static void UpdateDocumentToCurrentVersion(Document doc) { var defaultRLS = SessionSettings.CreateDefaultRouteLineSettingsCollection(); // ensure MonochromeColor is non-invisible foreach (Session s in doc.sessions) { foreach (var rls in s.Settings.RouteLineSettingsCollection.Values) { if (rls.MonochromeColor == Color.FromArgb(0, 0, 0, 0)) { rls.MonochromeColor = rls.ColorRange.Gradient.GetColor(1); rls.MonochromeWidth = rls.Width; } } } // add some speed waypoint attribute settings, introduced in QR 2.1 if (!doc.Settings.ColorRangeIntervalSliderSettings.ContainsKey(WaypointAttribute.Speed)) { var defaultCRISS = DocumentSettings.CreateDefaultColorRangeIntervalSliderSettings(); doc.Settings.ColorRangeIntervalSliderSettings.Add(WaypointAttribute.Speed, defaultCRISS[WaypointAttribute.Speed]); } if (!doc.Settings.LapHistogramSettings.ContainsKey(WaypointAttribute.Speed)) { var defaultLHS = DocumentSettings.CreateDefaultLapHistogramSettings(); doc.Settings.LapHistogramSettings.Add(WaypointAttribute.Speed, defaultLHS[WaypointAttribute.Speed]); } foreach (Session s in doc.sessions) { if (!s.Settings.RouteLineSettingsCollection.ContainsKey(WaypointAttribute.Speed)) { s.Settings.RouteLineSettingsCollection.Add(WaypointAttribute.Speed, defaultRLS[WaypointAttribute.Speed]); } } // add some direction waypoint attribute settings, introduced in QR 2.1-4 if (!doc.Settings.ColorRangeIntervalSliderSettings.ContainsKey(WaypointAttribute.DirectionDeviationToNextLap)) { var defaultCRISS = DocumentSettings.CreateDefaultColorRangeIntervalSliderSettings(); doc.Settings.ColorRangeIntervalSliderSettings.Add(WaypointAttribute.DirectionDeviationToNextLap, defaultCRISS[WaypointAttribute.DirectionDeviationToNextLap]); } if (!doc.Settings.LapHistogramSettings.ContainsKey(WaypointAttribute.DirectionDeviationToNextLap)) { var defaultLHS = DocumentSettings.CreateDefaultLapHistogramSettings(); doc.Settings.LapHistogramSettings.Add(WaypointAttribute.DirectionDeviationToNextLap, defaultLHS[WaypointAttribute.DirectionDeviationToNextLap]); } foreach (Session s in doc.sessions) { if (!s.Settings.RouteLineSettingsCollection.ContainsKey(WaypointAttribute.DirectionDeviationToNextLap)) { s.Settings.RouteLineSettingsCollection.Add(WaypointAttribute.DirectionDeviationToNextLap, defaultRLS[WaypointAttribute.DirectionDeviationToNextLap]); } } // add circle time radius, introduced in QR 2.4 foreach (var s in doc.sessions) { if (s.Settings.CircleTimeRadius == 0) { s.Settings.CircleTimeRadius = 45; } } // add map reading duration settings, introduced in QR 2.4 if (!doc.Settings.ColorRangeIntervalSliderSettings.ContainsKey(WaypointAttribute.MapReadingDuration)) { var defaultCRISS = DocumentSettings.CreateDefaultColorRangeIntervalSliderSettings(); doc.Settings.ColorRangeIntervalSliderSettings.Add(WaypointAttribute.MapReadingDuration, defaultCRISS[WaypointAttribute.MapReadingDuration]); } if (!doc.Settings.LapHistogramSettings.ContainsKey(WaypointAttribute.MapReadingDuration)) { var defaultLHS = DocumentSettings.CreateDefaultLapHistogramSettings(); doc.Settings.LapHistogramSettings.Add(WaypointAttribute.MapReadingDuration, defaultLHS[WaypointAttribute.MapReadingDuration]); } if (!doc.Settings.DefaultSessionSettings.SmoothingIntervals.ContainsKey(WaypointAttribute.MapReadingDuration)) { doc.Settings.DefaultSessionSettings.SmoothingIntervals[WaypointAttribute.MapReadingDuration] = new Interval(0, 0); } foreach (Session s in doc.sessions) { if (!s.Settings.RouteLineSettingsCollection.ContainsKey(WaypointAttribute.MapReadingDuration)) { s.Settings.RouteLineSettingsCollection.Add(WaypointAttribute.MapReadingDuration, defaultRLS[WaypointAttribute.MapReadingDuration]); } } }