[chronojump] JumpsRjFatigue can be divided by 2,3,4



commit 6a16a406eeda08089cfe571e8a3726de3aae4631
Author: Xavier de Blas <xaviblas gmail com>
Date:   Mon Aug 17 15:26:36 2020 +0200

    JumpsRjFatigue can be divided by 2,3,4

 glade/app1.glade                | 35 ++++++++++++++++++++++++--
 src/gui/app1/chronojump.cs      |  1 +
 src/gui/app1/jumpsRjFatigue.cs  | 15 ++++++++++-
 src/gui/cairo/jumpsRjFatigue.cs | 55 ++++++++++++++++++++++-------------------
 4 files changed, 78 insertions(+), 28 deletions(-)
---
diff --git a/glade/app1.glade b/glade/app1.glade
index 6fc69fbc..491f21fc 100644
--- a/glade/app1.glade
+++ b/glade/app1.glade
@@ -20318,8 +20318,8 @@ Concentric</property>
                                                             <property name="visible">True</property>
                                                             <property name="can_focus">False</property>
                                                             <property name="n_rows">2</property>
-                                                            <property name="n_columns">3</property>
-                                                            <property name="column_spacing">16</property>
+                                                            <property name="n_columns">4</property>
+                                                            <property name="column_spacing">20</property>
                                                             <property name="row_spacing">2</property>
                                                             <child>
                                                             <widget class="GtkLabel" id="label563">
@@ -20478,6 +20478,37 @@ Concentric</property>
                                                             <property name="x_options">GTK_FILL</property>
                                                             </packing>
                                                             </child>
+                                                            <child>
+                                                            <widget class="GtkLabel" id="label568">
+                                                            <property name="visible">True</property>
+                                                            <property name="can_focus">False</property>
+                                                            <property name="xalign">0</property>
+                                                            <property name="label" translatable="yes">Divide 
in</property>
+                                                            </widget>
+                                                            <packing>
+                                                            <property name="left_attach">3</property>
+                                                            <property name="right_attach">4</property>
+                                                            <property name="x_options">GTK_FILL</property>
+                                                            </packing>
+                                                            </child>
+                                                            <child>
+                                                            <widget class="GtkComboBox" 
id="combo_jumps_rj_fatigue_divide_in">
+                                                            <property name="visible">True</property>
+                                                            <property name="can_focus">False</property>
+                                                            <property name="active">0</property>
+                                                            <property name="items">2
+3
+4</property>
+                                                            <signal name="changed" 
handler="on_combo_jumps_rj_fatigue_divide_in_changed" swapped="no"/>
+                                                            </widget>
+                                                            <packing>
+                                                            <property name="left_attach">3</property>
+                                                            <property name="right_attach">4</property>
+                                                            <property name="top_attach">1</property>
+                                                            <property name="bottom_attach">2</property>
+                                                            <property name="x_options">GTK_FILL</property>
+                                                            </packing>
+                                                            </child>
                                                             </widget>
                                                             <packing>
                                                             <property name="expand">False</property>
diff --git a/src/gui/app1/chronojump.cs b/src/gui/app1/chronojump.cs
index c033890a..893efe0c 100644
--- a/src/gui/app1/chronojump.cs
+++ b/src/gui/app1/chronojump.cs
@@ -614,6 +614,7 @@ public partial class ChronoJumpWindow
                createComboSelectJumpsRj(true);
                createComboSelectJumpsRjFatigue(true);
                createComboSelectJumpsRjFatigueNum(true);
+               combo_jumps_rj_fatigue_divide_in.Active = 0;
                createComboSelectRuns(true);
                createComboSelectRunsInterval(true);
                
diff --git a/src/gui/app1/jumpsRjFatigue.cs b/src/gui/app1/jumpsRjFatigue.cs
index aafd0360..53f46a92 100644
--- a/src/gui/app1/jumpsRjFatigue.cs
+++ b/src/gui/app1/jumpsRjFatigue.cs
@@ -42,6 +42,8 @@ public partial class ChronoJumpWindow
        [Widget] Gtk.RadioButton radio_jumps_rj_fatigue_heights;
        [Widget] Gtk.RadioButton radio_jumps_rj_fatigue_tv_tc;
 
+       [Widget] Gtk.ComboBox combo_jumps_rj_fatigue_divide_in;
+
        JumpsRjFatigue jumpsRjFatigue;
        JumpsRjFatigueGraph jumpsRjFatigueGraph;
        CjComboSelectJumpsRj comboSelectJumpsRjFatigue;
@@ -111,6 +113,11 @@ public partial class ChronoJumpWindow
                        jumpsRjFatigueDo(true);
        }
 
+       private void on_combo_jumps_rj_fatigue_divide_in_changed (object o, EventArgs args)
+       {
+               jumpsRjFatigueDo(false);
+       }
+
        private List<object> jumpsRjFatigueSelectJumpsOfType ()
        {
                List<object> types = new List<object>();
@@ -166,6 +173,11 @@ public partial class ChronoJumpWindow
                        if(strFull.Length == 3)
                                jumpDateStr = strFull[1];
 
+                       int divideIn = 2;
+                       string divideInStr = UtilGtk.ComboGetActive(combo_jumps_rj_fatigue_divide_in);
+                       if(divideInStr == "2" || divideInStr == "3" || divideInStr == "4")
+                               divideIn = Convert.ToInt32(divideInStr);
+
                        //regular constructor
                        jumpsRjFatigueGraph = new JumpsRjFatigueGraph(
                                        jumpsRjFatigue.Point_l,
@@ -174,7 +186,8 @@ public partial class ChronoJumpWindow
                                        drawingarea_jumps_rj_fatigue,
                                        currentPerson.Name, jumpType,
                                        jumpDateStr,
-                                       radio_jumps_rj_fatigue_heights.Active);
+                                       radio_jumps_rj_fatigue_heights.Active,
+                                       divideIn);
                        jumpsRjFatigueGraph.Do();
 
                        button_jumps_rj_fatigue_save_image.Sensitive = true;
diff --git a/src/gui/cairo/jumpsRjFatigue.cs b/src/gui/cairo/jumpsRjFatigue.cs
index 2d7ae64b..479c6bfe 100644
--- a/src/gui/cairo/jumpsRjFatigue.cs
+++ b/src/gui/cairo/jumpsRjFatigue.cs
@@ -27,6 +27,8 @@ using Cairo;
 
 public class JumpsRjFatigueGraph : CairoXY
 {
+       private int divideIn;
+
        //constructor when there are no points
        public JumpsRjFatigueGraph (DrawingArea area, string jumpType)//, string title, string jumpType, 
string date)
        {
@@ -42,7 +44,7 @@ public class JumpsRjFatigueGraph : CairoXY
        }
        public JumpsRjFatigueGraph (
                        List<PointF> point_l, double slope, double intercept,
-                       DrawingArea area, string title, string jumpType, string date, bool heights)
+                       DrawingArea area, string title, string jumpType, string date, bool heights, int 
divideIn)
        {
                this.point_l = point_l;
                this.slope = slope;
@@ -51,6 +53,7 @@ public class JumpsRjFatigueGraph : CairoXY
                this.title = title;
                this.jumpType = jumpType;
                this.date = date;
+               this.divideIn = divideIn;
 
                xVariable = countStr;
                xUnits = "";
@@ -79,7 +82,7 @@ public class JumpsRjFatigueGraph : CairoXY
                plotPredictedLine(predictedLineTypes.STRAIGHT, predictedLineCrossMargins.TOUCH);
                g.Color = black;
 
-               divideInTwoAndPlotAverage();
+               divideAndPlotAverage(divideIn);
 
                plotRealPoints(true);
 
@@ -107,34 +110,24 @@ public class JumpsRjFatigueGraph : CairoXY
                writeTextAtRight(ypos++, date, false);
        }
 
-       private void divideInTwoAndPlotAverage()
+       private void divideAndPlotAverage(int parts)
        {
-               if(point_l.Count < 4)
+               if(point_l.Count < parts * 2)
                        return;
 
-               List<PointF> point_l_start = new List<PointF>();
-               List<PointF> point_l_end = new List<PointF>();
-               double sumIni = 0;
-               double sumEnd = 0;
-
-               for(int i = 0; i < point_l.Count; i ++)
+               List<List<PointF>> l_l = SplitList(point_l, Convert.ToInt32(Math.Floor(point_l.Count / (1.0 * 
parts))));
+               int done = 0;
+               foreach(List<PointF> l in l_l)
                {
-                       if(i < Math.Floor(point_l.Count / 2.0))
-                       {
-                               point_l_start.Add(point_l[i]);
-                               sumIni += point_l[i].Y;
-                               //LogB.Information(string.Format("Added to point_l_start: {0}", point_l[i]));
-                       }
-                       if(point_l.Count - i -1 < Math.Floor(point_l.Count / 2.0))
-                       {
-                               point_l_end.Add(point_l[i]);
-                               sumEnd += point_l[i].Y;
-                               //LogB.Information(string.Format("Added to point_l_end: {0}", point_l[i]));
-                       }
+                       if(done >= parts)
+                               break; //to fix i SplitList returned more chunks than wanted
+
+                       double sum = 0;
+                       foreach(PointF p in l)
+                               sum += p.Y;
+                       paintHorizSegment (l[0].X, l[l.Count -1].X, sum / l.Count);
+                       done ++;
                }
-
-               paintHorizSegment (point_l_start[0].X, point_l_start[point_l_start.Count -1].X, sumIni / 
point_l_start.Count);
-               paintHorizSegment (point_l_end[0].X, point_l_end[point_l_end.Count -1].X, sumEnd / 
point_l_end.Count);
        }
 
        private void paintHorizSegment (double xa, double xb, double y)
@@ -148,4 +141,16 @@ public class JumpsRjFatigueGraph : CairoXY
 
                g.Stroke ();
        }
+
+       //https://stackoverflow.com/a/11463800
+       public static List<List<PointF>> SplitList(List<PointF> listMain, int nSize)
+       {
+               var l_l = new List<List<PointF>>();
+
+               for (int i = 0; i < listMain.Count; i += nSize)
+                       l_l.Add(listMain.GetRange(i, Math.Min(nSize, listMain.Count - i)));
+
+               return l_l;
+       }
+
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]