private void UpdateAxisStripes() { if (Activity != null && Options.Instance.ShowZonesInChart) { switch (YAxisReferential) { case LineChartTypes.Cadence: { ShownZones = PluginMain.GetApplication().Logbook.CadenceZones[0]; break; } case LineChartTypes.HeartRateBPM: case LineChartTypes.HeartRatePercentMax: { ShownZones = Activity.Category.HeartRateZone; break; } case LineChartTypes.Power: { ShownZones = PluginMain.GetApplication().Logbook.PowerZones[0]; break; } case LineChartTypes.Speed: { ShownZones = Activity.Category.SpeedZone; break; } } } if (MainChart != null) { SetupAxisStripes(MainChart.YAxis, YAxisReferential); } }
public bool ValidateAfterZoneCategoryChanged(IZoneCategory changedCategory) { bool valueChanged = false; // Validate all steps foreach (IStep step in Steps) { if (step.ValidateAfterZoneCategoryChanged(changedCategory)) { valueChanged = true; } } return valueChanged; }
private string printCategories(IZoneCategory zones, TimeSpan totalTime, bool speed, bool climb, bool heart) { bool evenStart = m_even; IDictionary<String, TimeSpan> dict = new Dictionary<String, TimeSpan>(); foreach (IActivity activity in m_activities) { ActivityInfo info = ActivityInfoCache.Instance.GetInfo(activity); ZoneCategoryInfo zinfos = null; bool cont = true; if (speed) zinfos = info.SpeedZoneInfo(zones); else if (climb) zinfos = info.ClimbZoneInfo(zones); else if (heart) { if (activity.HeartRatePerMinuteTrack == null) cont = false; else zinfos = info.HeartRateZoneInfo(zones); } if (cont) { foreach (ZoneInfo zinfo in zinfos.Zones) { TimeSpan v = zinfo.TotalTime; if (!dict.ContainsKey(zinfo.Name)) { dict.Add(zinfo.Name, v); } else { dict[zinfo.Name] = dict[zinfo.Name].Add(v); } } } } StringBuilder builder = new StringBuilder(); builder.Append("<table width=\"100%\">"); foreach (String name in dict.Keys) { String timeType = StringResources.SecondsFormat; String time = String.Format("{0:00}", dict[name].Seconds); if (totalTime.TotalMinutes > 1) { timeType = StringResources.MinutesFormat + ":" + timeType; time = String.Format("{0:00}", dict[name].Minutes) + ":" + time; } if (totalTime.TotalHours > 1) { timeType = StringResources.HoursFormat + ":" + timeType; time = String.Format("{0:00}", dict[name].Hours) + ":" + time; } if (totalTime.TotalDays > 1) { timeType = StringResources.DaysFormat + ":" + timeType; time = String.Format("{0:00}", dict[name].Days) + ":" + time; } addEntry(builder, name + " (" + timeType + ")", time + " (" + (dict[name].TotalSeconds / totalTime.TotalSeconds).ToString("P2") + ")"); } builder.Append("</table>"); m_even = evenStart; return builder.ToString(); }
public static bool ZoneCategoryStillExists(IZoneCategoryList list, IZoneCategory zone) { for (int i = 0; i < list.Count; ++i) { if (list[i] == zone) { return true; } } return false; }
private string[,] printCategoriesAsArrays(IZoneCategory zones, TimeSpan totalTime, bool speed, bool climb, bool heart) { if (m_activities.Count == 0) return null; IDictionary<String, TimeSpan> dict = new Dictionary<String, TimeSpan>(); foreach (IActivity activity in m_activities) { ActivityInfo info = ActivityInfoCache.Instance.GetInfo(activity); ZoneCategoryInfo zinfos = null; bool cont = true; if (speed) zinfos = info.SpeedZoneInfo(zones); else if (climb) zinfos = info.ClimbZoneInfo(zones); else if (heart) { if (activity.HeartRatePerMinuteTrack == null) cont = false; else zinfos = info.HeartRateZoneInfo(zones); } if (cont) { foreach (ZoneInfo zinfo in zinfos.Zones) { TimeSpan v = zinfo.TotalTime; if (!dict.ContainsKey(zinfo.Name)) { dict.Add(zinfo.Name, v); } else { dict[zinfo.Name] = dict[zinfo.Name].Add(v); } } } } string[,] returnvalues = new string[2, dict.Keys.Count]; int i = 0; foreach (String name in dict.Keys) { String timeType = StringResources.SecondsFormat; String time = String.Format("{0:00}", dict[name].Seconds); if (totalTime.TotalMinutes > 1) { timeType = StringResources.MinutesFormat + ":" + timeType; time = String.Format("{0:00}", dict[name].Minutes) + ":" + time; } if (totalTime.TotalHours > 1) { timeType = StringResources.HoursFormat + ":" + timeType; time = String.Format("{0:00}", dict[name].Hours) + ":" + time; } if (totalTime.TotalDays > 1) { timeType = StringResources.DaysFormat + ":" + timeType; time = String.Format("{0:00}", dict[name].Days) + ":" + time; } returnvalues[0, i] = name + " (" + timeType + ")"; returnvalues[1, i] = time + " (" + (dict[name].TotalSeconds / totalTime.TotalSeconds).ToString("P2") + ")"; i++; } return returnvalues; }
public static void SerializeSTZoneInfoXML(IStep step, IZoneCategory categoryZones, INamedLowHighZone zone, XmlDocument document) { int index = categoryZones.Zones.IndexOf(zone); if (index != -1) { XmlNode extensionNode; XmlNode categoryNode; XmlNode valueNode; extensionNode = document.CreateElement("TargetOverride"); // Step Id node valueNode = document.CreateElement("StepId"); extensionNode.AppendChild(valueNode); valueNode.AppendChild(document.CreateTextNode(step.ParentWorkout.GetStepExportId(step).ToString())); // Category node categoryNode = document.CreateElement("Category"); extensionNode.AppendChild(categoryNode); // RefId GarminFitnessString categoryRefID = new GarminFitnessString(categoryZones.ReferenceId); categoryRefID.Serialize(categoryNode, "Id", document); // Zone index GarminFitnessInt32Range zoneIndex = new GarminFitnessInt32Range(index); zoneIndex.Serialize(categoryNode, "Index", document); step.ParentWorkout.AddSportTracksExtension(extensionNode); } }
public abstract bool ValidateAfterZoneCategoryChanged(IZoneCategory changedCategory);
public override bool ValidateAfterZoneCategoryChanged(IZoneCategory changedCategory) { bool valueChanged = false; // We have to check the target if it's a ST zone and if so, // make sure the zone is still valid switch (Target.Type) { case ITarget.TargetType.Cadence: { BaseCadenceTarget baseTarget = (BaseCadenceTarget)Target; if (baseTarget.ConcreteTarget.Type == BaseCadenceTarget.IConcreteCadenceTarget.CadenceTargetType.ZoneST) { CadenceZoneSTTarget concreteTarget = (CadenceZoneSTTarget)baseTarget.ConcreteTarget; if (!Utils.NamedZoneStillExists(PluginMain.GetApplication().Logbook.CadenceZones, concreteTarget.Zone)) { // Revert zone to a valid default zone concreteTarget.Zone = Options.Instance.CadenceZoneCategory.Zones[0]; // Mark as dirty concreteTarget.IsDirty = true; valueChanged = true; } } break; } case ITarget.TargetType.HeartRate: { BaseHeartRateTarget baseTarget = (BaseHeartRateTarget)Target; if (baseTarget.ConcreteTarget.Type == BaseHeartRateTarget.IConcreteHeartRateTarget.HeartRateTargetType.ZoneST) { HeartRateZoneSTTarget concreteTarget = (HeartRateZoneSTTarget)baseTarget.ConcreteTarget; if(!Utils.NamedZoneStillExists(PluginMain.GetApplication().Logbook.HeartRateZones, concreteTarget.Zone)) { // Revert zone to a valid default zone concreteTarget.Zone = ParentConcreteWorkout.Category.HeartRateZone.Zones[0]; // Mark as dirty concreteTarget.IsDirty = true; valueChanged = true; } } break; } case ITarget.TargetType.Speed: { BaseSpeedTarget baseTarget = (BaseSpeedTarget)Target; if (baseTarget.ConcreteTarget.Type == BaseSpeedTarget.IConcreteSpeedTarget.SpeedTargetType.ZoneST) { SpeedZoneSTTarget concreteTarget = (SpeedZoneSTTarget)baseTarget.ConcreteTarget; if(!Utils.NamedZoneStillExists(PluginMain.GetApplication().Logbook.SpeedZones, concreteTarget.Zone)) { // Revert zone to a valid default zone concreteTarget.Zone = ParentConcreteWorkout.Category.SpeedZone.Zones[0]; // Mark as dirty concreteTarget.IsDirty = true; valueChanged = true; } } break; } case ITarget.TargetType.Power: { BasePowerTarget baseTarget = (BasePowerTarget)Target; if (baseTarget.ConcreteTarget.Type == BasePowerTarget.IConcretePowerTarget.PowerTargetType.ZoneST) { PowerZoneSTTarget concreteTarget = (PowerZoneSTTarget)baseTarget.ConcreteTarget; if(!Utils.NamedZoneStillExists(PluginMain.GetApplication().Logbook.PowerZones, concreteTarget.Zone)) { // Revert zone to a valid default zone concreteTarget.Zone = Options.Instance.PowerZoneCategory.Zones[0]; // Mark as dirty concreteTarget.IsDirty = true; valueChanged = true; } } break; } } return valueChanged; }
public override bool ValidateAfterZoneCategoryChanged(IZoneCategory changedCategory) { bool valueChanged = false; // Validate all steps for (int i = 0; i < m_StepsToRepeat.Count; ++i) { if (m_StepsToRepeat[i].ValidateAfterZoneCategoryChanged(changedCategory)) { valueChanged = true; } } return valueChanged; }
public void ResetLogbookSettings() { // Logbook settings m_UseSportTracksHeartRateZones = true; m_UseSportTracksSpeedZones = true; m_UseSportTracksPowerZones = true; m_CadenceZoneCategory = PluginMain.GetApplication().Logbook.CadenceZones[0]; m_PowerZoneCategory = PluginMain.GetApplication().Logbook.PowerZones[0]; m_IsPowerZoneDirty = false; m_IsCadenceZoneDirty = false; // Set default Garmin to ST category map values m_STToGarminCategoryMap = new Dictionary<IActivityCategory, STCategoriesInfo>(); ClearAllSTCategoriesInfo(); foreach (IActivityCategory category in PluginMain.GetApplication().Logbook.ActivityCategories) { SetGarminCategory(category, GarminCategories.Other); } TriggerOptionsChangedEvent(""); }