コード例 #1
0
ファイル: DetailPaneChart.cs プロジェクト: mechgt/gear-chart
        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);
            }
        }
コード例 #2
0
ファイル: IWorkout.cs プロジェクト: Digresiv/garminworkouts
        public bool ValidateAfterZoneCategoryChanged(IZoneCategory changedCategory)
        {
            bool valueChanged = false;

            // Validate all steps
            foreach (IStep step in Steps)
            {
                if (step.ValidateAfterZoneCategoryChanged(changedCategory))
                {
                    valueChanged = true;
                }
            }

            return valueChanged;
        }
コード例 #3
0
 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();
 }
コード例 #4
0
ファイル: Utils.cs プロジェクト: Digresiv/garminworkouts
        public static bool ZoneCategoryStillExists(IZoneCategoryList list, IZoneCategory zone)
        {
            for (int i = 0; i < list.Count; ++i)
            {
                if (list[i] == zone)
                {
                    return true;
                }
            }

            return false;
        }
コード例 #5
0
        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;                    


        }
コード例 #6
0
ファイル: Utils.cs プロジェクト: Digresiv/garminworkouts
        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);
            }
        }
コード例 #7
0
ファイル: IStep.cs プロジェクト: Digresiv/garminworkouts
 public abstract bool ValidateAfterZoneCategoryChanged(IZoneCategory changedCategory);
コード例 #8
0
        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;
        }
コード例 #9
0
ファイル: RepeatStep.cs プロジェクト: Digresiv/garminworkouts
        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;
        }
コード例 #10
0
ファイル: Options.cs プロジェクト: Digresiv/garminworkouts
        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("");
        }