[chronojump] Ended automatic feedback on encoder



commit c09ddbe28a8c75584e0c62da673190cba419994d
Author: Xavier de Blas <xaviblas gmail com>
Date:   Tue May 24 09:28:58 2016 +0200

    Ended automatic feedback on encoder

 src/encoder.cs                  |    8 +++
 src/gui/encoder.cs              |   12 +++--
 src/gui/encoderTreeviews.cs     |  110 +++++++++++++++++++++++++-------------
 src/gui/repetitiveConditions.cs |   74 ++++++++++++++++++++++++++
 src/utilGtk.cs                  |    4 ++
 5 files changed, 166 insertions(+), 42 deletions(-)
---
diff --git a/src/encoder.cs b/src/encoder.cs
index 0035886..c87e63d 100644
--- a/src/encoder.cs
+++ b/src/encoder.cs
@@ -391,6 +391,14 @@ public class EncoderCurve
                        return Util.ChangeChars(str, ":::", ",");
        }
        
+       public double MeanSpeedD { get { return Convert.ToDouble(MeanSpeed); } }
+       public double MaxSpeedD  { get { return Convert.ToDouble(MaxSpeed);  } }
+       public double MeanPowerD { get { return Convert.ToDouble(MeanPower); } }
+       public double PeakPowerD { get { return Convert.ToDouble(PeakPower); } }
+       public double MeanForceD { get { return Convert.ToDouble(MeanForce); } }
+       public double MaxForceD  { get { return Convert.ToDouble(MaxForce);  } }
+
+       
        ~EncoderCurve() {}
 }
 
diff --git a/src/gui/encoder.cs b/src/gui/encoder.cs
index a02aac0..9e3f43b 100644
--- a/src/gui/encoder.cs
+++ b/src/gui/encoder.cs
@@ -3860,7 +3860,6 @@ public partial class ChronoJumpWindow
                foreach(EncoderBarsData ebd in data6Variables)
                        data.Add(ebd.GetValue(mainVariable));
 
-
                //search max, min, avg
                double max = -100000;
                double min = 100000;
@@ -3876,6 +3875,8 @@ public partial class ChronoJumpWindow
                if(max <= 0)
                        return; 
                
+               repetitiveConditionsWin.ResetBestSetValue();
+               repetitiveConditionsWin.UpdateBestSetValue(max);
 
                int textWidth = 1;
                int textHeight = 1;
@@ -3961,9 +3962,11 @@ public partial class ChronoJumpWindow
                        if(dWidth < 1)
                                dWidth = 1;
 
-                       
                        //select pen color for bars and sounds
-                       if(mainVariableHigher != -1 && d >= mainVariableHigher) {
+                       string myColor = repetitiveConditionsWin.AssignColorAutomatic(d);
+
+                       if( myColor == UtilGtk.ColorGood || (mainVariableHigher != -1 && d >= 
mainVariableHigher) ) 
+                       {
                                my_pen_ecc_con_e = pen_green_dark_encoder_capture;
                                my_pen_ecc_con_c = pen_green_light_encoder_capture;
                                my_pen_con = pen_green_encoder_capture;
@@ -3971,7 +3974,8 @@ public partial class ChronoJumpWindow
                                if(preferences.volumeOn && count == data.Count -1 && capturing)
                                        Util.PlaySound(Constants.SoundTypes.GOOD, preferences.volumeOn);
                        }
-                       else if(mainVariableLower != -1 && d <= mainVariableLower) {
+                       else if( myColor == UtilGtk.ColorBad || (mainVariableLower != -1 && d <= 
mainVariableLower) )
+                       {
                                my_pen_ecc_con_e = pen_red_dark_encoder_capture;
                                my_pen_ecc_con_c = pen_red_light_encoder_capture;
                                my_pen_con = pen_red_encoder_capture;
diff --git a/src/gui/encoderTreeviews.cs b/src/gui/encoderTreeviews.cs
index de6fcd8..70aac49 100644
--- a/src/gui/encoderTreeviews.cs
+++ b/src/gui/encoderTreeviews.cs
@@ -138,8 +138,12 @@ public partial class ChronoJumpWindow
 
                encoderCaptureListStore = new Gtk.ListStore (typeof (EncoderCurve));
                
-               foreach (EncoderCurve curve in encoderCaptureCurves) 
+               repetitiveConditionsWin.ResetBestSetValue();
+               foreach (EncoderCurve curve in encoderCaptureCurves) {
                        encoderCaptureListStore.AppendValues (curve);
+                               
+                       repetitiveConditionsWin.UpdateBestSetValue(curve);
+               }
 
                treeview_encoder_capture_curves.Model = encoderCaptureListStore;
 
@@ -576,8 +580,13 @@ public partial class ChronoJumpWindow
                }
 
                encoderAnalyzeListStore = new Gtk.ListStore (typeof (EncoderCurve));
-               foreach (EncoderCurve curve in encoderAnalyzeCurves) 
+       
+               repetitiveConditionsWin.ResetBestSetValue();
+               foreach (EncoderCurve curve in encoderAnalyzeCurves) {
                        encoderAnalyzeListStore.AppendValues (curve);
+               
+                       repetitiveConditionsWin.UpdateBestSetValue(curve);
+               }
 
                treeview_encoder_analyze_curves.Model = encoderAnalyzeListStore;
 
@@ -799,6 +808,7 @@ public partial class ChronoJumpWindow
 
 
        /* start rendering capture and analyze cols */
+       
 
        private string assignColor(double found, bool higherActive, bool lowerActive, double higherValue, 
double lowerValue) 
        {
@@ -1022,12 +1032,16 @@ public partial class ChronoJumpWindow
        private void RenderMeanSpeed (Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, 
Gtk.TreeIter iter)
        {
                EncoderCurve curve = (EncoderCurve) model.GetValue (iter, 0);
-               string myColor = assignColor(
-                               Convert.ToDouble(curve.MeanSpeed),
-                               repetitiveConditionsWin.EncoderMeanSpeedHigher, 
-                               repetitiveConditionsWin.EncoderMeanSpeedLower, 
-                               repetitiveConditionsWin.EncoderMeanSpeedHigherValue,
-                               repetitiveConditionsWin.EncoderMeanSpeedLowerValue);
+
+               string myColor = repetitiveConditionsWin.AssignColorAutomatic(curve, Constants.MeanSpeed);
+               
+               if(myColor == "") 
+                       myColor = assignColor(
+                                       curve.MeanSpeedD,
+                                       repetitiveConditionsWin.EncoderMeanSpeedHigher, 
+                                       repetitiveConditionsWin.EncoderMeanSpeedLower, 
+                                       repetitiveConditionsWin.EncoderMeanSpeedHigherValue,
+                                       repetitiveConditionsWin.EncoderMeanSpeedLowerValue);
                if(myColor != "")
                        (cell as Gtk.CellRendererText).Foreground = myColor;
                else
@@ -1041,12 +1055,16 @@ public partial class ChronoJumpWindow
        private void RenderMaxSpeed (Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, 
Gtk.TreeIter iter)
        {
                EncoderCurve curve = (EncoderCurve) model.GetValue (iter, 0);
-               string myColor = assignColor(
-                               Convert.ToDouble(curve.MaxSpeed),
-                               repetitiveConditionsWin.EncoderMaxSpeedHigher, 
-                               repetitiveConditionsWin.EncoderMaxSpeedLower, 
-                               repetitiveConditionsWin.EncoderMaxSpeedHigherValue,
-                               repetitiveConditionsWin.EncoderMaxSpeedLowerValue);
+
+               string myColor = repetitiveConditionsWin.AssignColorAutomatic(curve, Constants.MaxSpeed);
+               
+               if(myColor == "") 
+                       myColor = assignColor(
+                                       curve.MaxSpeedD,
+                                       repetitiveConditionsWin.EncoderMaxSpeedHigher, 
+                                       repetitiveConditionsWin.EncoderMaxSpeedLower, 
+                                       repetitiveConditionsWin.EncoderMaxSpeedHigherValue,
+                                       repetitiveConditionsWin.EncoderMaxSpeedLowerValue);
                if(myColor != "")
                        (cell as Gtk.CellRendererText).Foreground = myColor;
                else
@@ -1068,12 +1086,16 @@ public partial class ChronoJumpWindow
        private void RenderMeanPower (Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, 
Gtk.TreeIter iter)
        {
                EncoderCurve curve = (EncoderCurve) model.GetValue (iter, 0);
-               string myColor = assignColor(
-                               Convert.ToDouble(curve.MeanPower),
-                               repetitiveConditionsWin.EncoderPowerHigher, 
-                               repetitiveConditionsWin.EncoderPowerLower, 
-                               repetitiveConditionsWin.EncoderPowerHigherValue,
-                               repetitiveConditionsWin.EncoderPowerLowerValue);
+               
+               string myColor = repetitiveConditionsWin.AssignColorAutomatic(curve, Constants.MeanPower);
+               
+               if(myColor == "") 
+                       myColor = assignColor(
+                                       curve.MeanPowerD,
+                                       repetitiveConditionsWin.EncoderPowerHigher, 
+                                       repetitiveConditionsWin.EncoderPowerLower, 
+                                       repetitiveConditionsWin.EncoderPowerHigherValue,
+                                       repetitiveConditionsWin.EncoderPowerLowerValue);
                if(myColor != "")
                        (cell as Gtk.CellRendererText).Foreground = myColor;
                else
@@ -1086,12 +1108,16 @@ public partial class ChronoJumpWindow
        private void RenderPeakPower (Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, 
Gtk.TreeIter iter)
        {
                EncoderCurve curve = (EncoderCurve) model.GetValue (iter, 0);
-               string myColor = assignColor(
-                               Convert.ToDouble(curve.PeakPower),
-                               repetitiveConditionsWin.EncoderPeakPowerHigher, 
-                               repetitiveConditionsWin.EncoderPeakPowerLower, 
-                               repetitiveConditionsWin.EncoderPeakPowerHigherValue,
-                               repetitiveConditionsWin.EncoderPeakPowerLowerValue);
+
+               string myColor = repetitiveConditionsWin.AssignColorAutomatic(curve, Constants.PeakPower);
+               
+               if(myColor == "") 
+                       myColor = assignColor(
+                                       curve.PeakPowerD,
+                                       repetitiveConditionsWin.EncoderPeakPowerHigher, 
+                                       repetitiveConditionsWin.EncoderPeakPowerLower, 
+                                       repetitiveConditionsWin.EncoderPeakPowerHigherValue,
+                                       repetitiveConditionsWin.EncoderPeakPowerLowerValue);
                if(myColor != "")
                        (cell as Gtk.CellRendererText).Foreground = myColor;
                else
@@ -1121,12 +1147,16 @@ public partial class ChronoJumpWindow
        private void RenderMeanForce (Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, 
Gtk.TreeIter iter)
        {
                EncoderCurve curve = (EncoderCurve) model.GetValue (iter, 0);
-               string myColor = assignColor(
-                               Convert.ToDouble(curve.MeanForce),
-                               repetitiveConditionsWin.EncoderMeanForceHigher, 
-                               repetitiveConditionsWin.EncoderMeanForceLower, 
-                               repetitiveConditionsWin.EncoderMeanForceHigherValue,
-                               repetitiveConditionsWin.EncoderMeanForceLowerValue);
+
+               string myColor = repetitiveConditionsWin.AssignColorAutomatic(curve, Constants.MeanForce);
+               
+               if(myColor == "") 
+                       myColor = assignColor(
+                                       curve.MeanForceD,
+                                       repetitiveConditionsWin.EncoderMeanForceHigher, 
+                                       repetitiveConditionsWin.EncoderMeanForceLower, 
+                                       repetitiveConditionsWin.EncoderMeanForceHigherValue,
+                                       repetitiveConditionsWin.EncoderMeanForceLowerValue);
                if(myColor != "")
                        (cell as Gtk.CellRendererText).Foreground = myColor;
                else
@@ -1139,12 +1169,16 @@ public partial class ChronoJumpWindow
        private void RenderMaxForce (Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, 
Gtk.TreeIter iter)
        {
                EncoderCurve curve = (EncoderCurve) model.GetValue (iter, 0);
-               string myColor = assignColor(
-                               Convert.ToDouble(curve.MaxForce),
-                               repetitiveConditionsWin.EncoderMaxForceHigher, 
-                               repetitiveConditionsWin.EncoderMaxForceLower, 
-                               repetitiveConditionsWin.EncoderMaxForceHigherValue,
-                               repetitiveConditionsWin.EncoderMaxForceLowerValue);
+               
+               string myColor = repetitiveConditionsWin.AssignColorAutomatic(curve, Constants.MaxForce);
+               
+               if(myColor == "") 
+                       myColor = assignColor(
+                                       curve.MaxForceD,
+                                       repetitiveConditionsWin.EncoderMaxForceHigher, 
+                                       repetitiveConditionsWin.EncoderMaxForceLower, 
+                                       repetitiveConditionsWin.EncoderMaxForceHigherValue,
+                                       repetitiveConditionsWin.EncoderMaxForceLowerValue);
                if(myColor != "")
                        (cell as Gtk.CellRendererText).Foreground = myColor;
                else
diff --git a/src/gui/repetitiveConditions.cs b/src/gui/repetitiveConditions.cs
index 16c2726..3d044bd 100644
--- a/src/gui/repetitiveConditions.cs
+++ b/src/gui/repetitiveConditions.cs
@@ -75,6 +75,8 @@ public class RepetitiveConditionsWindow
        [Widget] Gtk.ComboBox combo_encoder_variable_automatic;
        [Widget] Gtk.CheckButton checkbutton_encoder_automatic_greater;
        [Widget] Gtk.CheckButton checkbutton_encoder_automatic_lower;
+       [Widget] Gtk.SpinButton spinbutton_encoder_automatic_greater;
+       [Widget] Gtk.SpinButton spinbutton_encoder_automatic_lower;
 
        [Widget] Gtk.VBox vbox_encoder_manual;
        [Widget] Gtk.CheckButton checkbutton_encoder_show_manual_feedback;
@@ -155,6 +157,8 @@ public class RepetitiveConditionsWindow
 
        //static bool volumeOn;
        bool volumeOn;
+
+       private double bestSetValue;
        
        static RepetitiveConditionsWindow RepetitiveConditionsWindowBox;
                
@@ -173,6 +177,8 @@ public class RepetitiveConditionsWindow
                
                createComboEncoderAutomaticVariable();
 
+               bestSetValue = 0;
+
                putNonStandardIcons();
        }
 
@@ -417,6 +423,55 @@ public class RepetitiveConditionsWindow
                checkbutton_encoder_peakpower_lower.Active = true;
        }
 
+                       
+       public void ResetBestSetValue() {
+              bestSetValue = 0;        
+       }
+
+       public void UpdateBestSetValue(EncoderCurve curve) 
+       {
+               string autoVar = encoderAutomaticVariable;
+               if(encoderAutomaticHigher || encoderAutomaticLower) 
+               {
+                       if(autoVar == Constants.MeanSpeed)
+                               UpdateBestSetValue(curve.MeanSpeedD);
+                       else if(autoVar == Constants.MaxSpeed)
+                               UpdateBestSetValue(curve.MaxSpeedD);
+                       else if(autoVar == Constants.MeanPower)
+                               UpdateBestSetValue(curve.MeanPowerD);
+                       else if(autoVar == Constants.PeakPower)
+                               UpdateBestSetValue(curve.PeakPowerD);
+                       else if(autoVar == Constants.MeanForce)
+                               UpdateBestSetValue(curve.MeanForceD);
+                       else if(autoVar == Constants.MaxForce)
+                               UpdateBestSetValue(curve.MaxForceD);
+               }
+       }
+       public void UpdateBestSetValue(double d) {
+               if(d > bestSetValue)
+                       bestSetValue = d;
+       }
+               
+       //called from gui/encoderTreeviews.cs
+       public string AssignColorAutomatic(EncoderCurve curve, string variable)
+       {
+               if(encoderAutomaticVariable != variable)
+                       return UtilGtk.ColorNothing;
+
+               double currentValue = curve.GetParameter(variable);
+
+               return AssignColorAutomatic(currentValue);
+       }
+       //called from gui/encoder.cs plotCurvesGraphDoPlot
+       public string AssignColorAutomatic(double currentValue)
+       {
+               if(encoderAutomaticHigher && currentValue > bestSetValue * encoderAutomaticHigherValue / 100)
+                       return UtilGtk.ColorGood;
+               else if (encoderAutomaticLower && currentValue < bestSetValue * encoderAutomaticLowerValue/ 
100)
+                       return UtilGtk.ColorBad;
+
+               return UtilGtk.ColorNothing;
+       }
 
        /* JUMPS */
        public bool TfTcBest {
@@ -505,6 +560,25 @@ public class RepetitiveConditionsWindow
        }
 
        /* ENCODER */
+       //automatic
+
+       private string encoderAutomaticVariable {
+               get { return UtilGtk.ComboGetActive(combo_encoder_variable_automatic); }
+       }
+
+       private bool encoderAutomaticHigher {
+               get { return checkbutton_encoder_automatic_greater.Active; }
+       }
+       private int encoderAutomaticHigherValue {
+               get { return Convert.ToInt32(spinbutton_encoder_automatic_greater.Value); }
+       }
+       private bool encoderAutomaticLower {
+               get { return checkbutton_encoder_automatic_lower.Active; }
+       }
+       private int encoderAutomaticLowerValue {
+               get { return Convert.ToInt32(spinbutton_encoder_automatic_lower.Value); }
+       }
+       
 
        //height
        public bool EncoderHeightHigher {
diff --git a/src/utilGtk.cs b/src/utilGtk.cs
index dc7af76..4674489 100644
--- a/src/utilGtk.cs
+++ b/src/utilGtk.cs
@@ -367,6 +367,10 @@ public class UtilGtk
        public static Gdk.Color GREEN_LIGHT = new Gdk.Color(0,238,0);
        public static Gdk.Color BLUE_DARK = new Gdk.Color(0,0,140);
        public static Gdk.Color BLUE_LIGHT = new Gdk.Color(0,75,238);
+       
+       public static string ColorGood = "ForestGreen";
+       public static string ColorBad = "red";
+       public static string ColorNothing = "";
 
        
        public static Gdk.Color SELECTED = GetBackgroundColorSelected();


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