[chronojump] New feature: selecting a runI on treeview, displays it on top cairo realtime graph



commit ee34151a55292592976756c8556856c0e124a04f
Author: Xavier de Blas <xaviblas gmail com>
Date:   Mon Mar 7 18:14:04 2022 +0100

    New feature: selecting a runI on treeview, displays it on top cairo realtime graph

 src/gui/app1/chronojump.cs | 37 +++++++++++++++++++++-----
 src/gui/eventExecute.cs    | 66 +++++++++++++++++++++++++---------------------
 src/run.cs                 | 23 ++++++++++++++++
 3 files changed, 90 insertions(+), 36 deletions(-)
---
diff --git a/src/gui/app1/chronojump.cs b/src/gui/app1/chronojump.cs
index ee9d75ea7..8af96faf6 100644
--- a/src/gui/app1/chronojump.cs
+++ b/src/gui/app1/chronojump.cs
@@ -428,8 +428,10 @@ public partial class ChronoJumpWindow
        private static Pulse currentPulse;
        private static MultiChronopic currentMultiChronopic;
 
-       //to be able to resize cairo jumpRj graph without needing to check sql all the time
+       //to be able to resize cairo jumpRj, runI graphs without needing to check sql all the time
        private static JumpRj selectedJumpRj;
+       private static RunInterval selectedRunInterval;
+       private static RunType selectedRunIntervalType; //we need this for variable distances
 
        private static EventExecute currentEventExecute;
 
@@ -1877,12 +1879,29 @@ public partial class ChronoJumpWindow
                if (myTreeViewRunsInterval.EventSelectedID == 0) {
                        myTreeViewRunsInterval.Unselect();
                        showHideActionEventButtons(false, "RunInterval");
-               } else if (myTreeViewRunsInterval.EventSelectedID == -1) {
+                       return;
+               }
+
+               if (myTreeViewRunsInterval.EventSelectedID == -1)
                        myTreeViewRunsInterval.SelectHeaderLine();
-                       showHideActionEventButtons(true, "RunInterval");
-               } else {
-                       showHideActionEventButtons(true, "RunInterval");
+
+               showHideActionEventButtons(true, "RunInterval");
+
+               //graph the run on realtime cairo graph. Using selectedRunInterval to avoid SQL select 
continuously
+               if(selectedRunInterval == null || selectedRunIntervalType == null ||
+                               selectedRunInterval.UniqueID != myTreeViewRunsInterval.EventSelectedID)
+               {
+                       selectedRunInterval = SqliteRunInterval.SelectRunData (Constants.RunIntervalTable, 
myTreeViewRunsInterval.EventSelectedID, false);
+                       selectedRunIntervalType = 
SqliteRunIntervalType.SelectAndReturnRunIntervalType(selectedRunInterval.Type, false);
                }
+
+               blankRunIntervalRealtimeCaptureGraph ();
+               //PrepareRunIntervalRealtimeCaptureGraph (double distance, double lastTime, string 
timesString, double distanceTotal, string distancesString, string type)
+               PrepareRunIntervalRealtimeCaptureGraph (
+                               selectedRunInterval.DistanceTotal, //TODO: take care, maybe is not this 
distance (maybe use selectedRunIntervalType)
+                               selectedRunInterval.TimeLast, selectedRunInterval.IntervalTimesString,
+                               selectedRunInterval.DistanceTotal, selectedRunIntervalType.DistancesString,
+                               selectedRunInterval.Type);
        }
 
        private void treeviewRunsIntervalContextMenu(RunInterval myRun) {
@@ -5548,8 +5567,11 @@ public partial class ChronoJumpWindow
                sensitiveLastTestButtons(! currentEventExecute.Cancel);
                button_inspect_last_test_run_intervallic.Sensitive = ! currentEventExecute.Cancel;
 
-               if ( ! currentEventExecute.Cancel ) {
+               if ( ! currentEventExecute.Cancel )
+               {
                        currentRunInterval = (RunInterval) currentEventExecute.EventDone;
+                       selectedRunInterval = currentRunInterval;
+                       selectedRunIntervalType = currentRunIntervalType;
 
                        currentRunInterval.MetersSecondsPreferred = preferences.metersSecondsPreferred;
 
@@ -6761,6 +6783,8 @@ LogB.Debug("mc finished 5");
                Sqlite.Delete(false, Constants.RunTable, id);
                
                myTreeViewRuns.DelEvent(id);
+               selectedRunInterval = null;
+               selectedRunIntervalType = null;
                showHideActionEventButtons(false, "Run");
                
                if(createdStatsWin) {
@@ -6786,6 +6810,7 @@ LogB.Debug("mc finished 5");
                Sqlite.Delete(false, Constants.RunIntervalTable, id);
                
                myTreeViewRunsInterval.DelEvent(id);
+               selectedRunInterval = null;
                showHideActionEventButtons(false, "RunInterval");
 
                if(createdStatsWin) {
diff --git a/src/gui/eventExecute.cs b/src/gui/eventExecute.cs
index 912ab7306..cd83639de 100644
--- a/src/gui/eventExecute.cs
+++ b/src/gui/eventExecute.cs
@@ -506,17 +506,23 @@ public partial class ChronoJumpWindow
                                                preferences.volumeOn, preferences.gstreamer, 
repetitiveConditionsWin);
                } else if (current_mode == Constants.Modes.RUNSINTERVALLIC)
                {
-                       if(currentEventExecute == null || 
currentEventExecute.PrepareEventGraphRunIntervalRealtimeCaptureObject == null)
-                               return;
-
-                       PrepareRunIntervalRealtimeCaptureGraph(
-                                       
currentEventExecute.PrepareEventGraphRunIntervalRealtimeCaptureObject.distance,
-                                       
currentEventExecute.PrepareEventGraphRunIntervalRealtimeCaptureObject.lastTime,
-                                       
currentEventExecute.PrepareEventGraphRunIntervalRealtimeCaptureObject.timesString,
-                                       
currentEventExecute.PrepareEventGraphRunIntervalRealtimeCaptureObject.distanceTotal,
-                                       
currentEventExecute.PrepareEventGraphRunIntervalRealtimeCaptureObject.distancesString,
-                                       
currentEventExecute.PrepareEventGraphRunIntervalRealtimeCaptureObject.type
-                                       );
+                       if(currentEventExecute != null && currentEventExecute.IsThreadRunning())
+                       {
+                               if(currentEventExecute.PrepareEventGraphRunIntervalRealtimeCaptureObject != 
null)
+                                       PrepareRunIntervalRealtimeCaptureGraph(
+                                                       
currentEventExecute.PrepareEventGraphRunIntervalRealtimeCaptureObject.distance,
+                                                       
currentEventExecute.PrepareEventGraphRunIntervalRealtimeCaptureObject.lastTime,
+                                                       
currentEventExecute.PrepareEventGraphRunIntervalRealtimeCaptureObject.timesString,
+                                                       
currentEventExecute.PrepareEventGraphRunIntervalRealtimeCaptureObject.distanceTotal,
+                                                       
currentEventExecute.PrepareEventGraphRunIntervalRealtimeCaptureObject.distancesString,
+                                                       
currentEventExecute.PrepareEventGraphRunIntervalRealtimeCaptureObject.type);
+                       }
+                       else if(selectedRunInterval != null)
+                               PrepareRunIntervalRealtimeCaptureGraph(
+                                               selectedRunInterval.DistanceTotal, //TODO: take care, maybe 
is not this distance (maybe use selectedRunIntervalType)
+                                               selectedRunInterval.TimeLast, 
selectedRunInterval.IntervalTimesString,
+                                               selectedRunInterval.DistanceTotal, 
selectedRunIntervalType.DistancesString,
+                                               selectedRunInterval.Type);
                }
        }
 
@@ -645,18 +651,8 @@ public partial class ChronoJumpWindow
                else
                        image_check_runI_realtime_rel_abs.Pixbuf = new Pixbuf (null, Util.GetImagePath(false) 
+ "bar_absolute.png");
 
-               // 2) redo graph if possible
-               if(currentEventExecute == null || 
currentEventExecute.PrepareEventGraphRunIntervalRealtimeCaptureObject == null)
-                       return;
-
-               PrepareRunIntervalRealtimeCaptureGraph(
-                               
currentEventExecute.PrepareEventGraphRunIntervalRealtimeCaptureObject.distance,
-                               
currentEventExecute.PrepareEventGraphRunIntervalRealtimeCaptureObject.lastTime,
-                               
currentEventExecute.PrepareEventGraphRunIntervalRealtimeCaptureObject.timesString,
-                               
currentEventExecute.PrepareEventGraphRunIntervalRealtimeCaptureObject.distanceTotal,
-                               
currentEventExecute.PrepareEventGraphRunIntervalRealtimeCaptureObject.distancesString,
-                               currentEventExecute.PrepareEventGraphRunIntervalRealtimeCaptureObject.type
-                               );
+               // 2) redo graph
+               on_event_execute_drawingarea_realtime_capture_cairo_expose_event (new object(), new 
ExposeEventArgs());
        }
 
        // Reactive jump 
@@ -797,17 +793,24 @@ public partial class ChronoJumpWindow
                                event_execute_drawingarea_realtime_capture_cairo, 
preferences.fontType.ToString());
        }
 
-       public void PrepareRunIntervalRealtimeCaptureGraph (double distance, double lastTime, string 
timesString, double distanceTotal, string distancesString, string type)
+       public void PrepareRunIntervalRealtimeCaptureGraph (double lastDistance, double lastTime, string 
timesString, double distanceTotal, string distancesString, string type)
        {
                if(currentPerson == null)
                        return;
 
+               bool isLastCaptured = false;
+               if(currentEventExecute != null && currentEventExecute.IsThreadRunning()) //during the capture
+                       isLastCaptured = true;
+               else if(currentRunInterval != null && selectedRunInterval != null &&
+                               currentRunInterval.UniqueID == selectedRunInterval.UniqueID) //selected == 
last captured
+                       isLastCaptured = true;
+
                cairoPaintBarsPreRealTime = new CairoPaintBarsPreRunIntervalRealtimeCapture(
                                event_execute_drawingarea_realtime_capture_cairo, 
preferences.fontType.ToString(), current_mode,
                                currentPerson.Name, type, preferences.digitsNumber,// 
preferences.heightPreferred,
-                               check_runI_realtime_rel_abs.Active, distance,
+                               check_runI_realtime_rel_abs.Active, lastDistance,
                                //lastTime,
-                               timesString, distancesString);
+                               timesString, distancesString, isLastCaptured);
 
                // B) Paint cairo graph
                //cairoPaintBarsPreRealTime.UseHeights = useHeights;
@@ -2984,8 +2987,7 @@ public class CairoPaintBarsPreJumpReactiveRealtimeCapture : CairoPaintBarsPre
        public CairoPaintBarsPreJumpReactiveRealtimeCapture (DrawingArea darea, string fontStr,
                        Constants.Modes mode, string personName, string testName, int pDN,// bool 
heightPreferred,
                        //double lastTv, double lastTc,
-                       string tvString, string tcString,
-                       bool isLastCaptured)
+                       string tvString, string tcString, bool isLastCaptured)
        {
                initialize (darea, fontStr, mode, personName, testName, pDN);
                if(isLastCaptured)
@@ -3115,10 +3117,14 @@ public class CairoPaintBarsPreRunIntervalRealtimeCapture : CairoPaintBarsPre
                        Constants.Modes mode, string personName, string testName, int pDN,// bool 
heightPreferred,
                        bool isRelative,
                        double lastDistance,
-                       string timesString, string distancesString)
+                       string timesString, string distancesString, bool isLastCaptured)
        {
                initialize (darea, fontStr, mode, personName, testName, pDN);
-               this.title = Catalog.GetString("Last test:") + " " + generateTitle();
+               if(isLastCaptured)
+                       this.title = Catalog.GetString("Last test:") + " " + generateTitle();
+               else
+                       this.title = Catalog.GetString("Selected:") + " " + generateTitle();
+
                this.isRelative = isRelative;
 
                distance_l = new List<double>();
diff --git a/src/run.cs b/src/run.cs
index 81014ddcc..dd693de82 100644
--- a/src/run.cs
+++ b/src/run.cs
@@ -257,6 +257,29 @@ public class RunInterval : Run
                return splitTimes;
        }
 
+       private List<double> timeList
+       {
+               get {
+                       List<double> l = new List<double>();
+                       string [] strFull = intervalTimesString.Split(new char[] {'='});
+                       foreach(string str in strFull)
+                       {
+                               if(Util.IsNumber(Util.ChangeDecimalSeparator(str), true))
+                                       l.Add(Convert.ToDouble(Util.ChangeDecimalSeparator(str)));
+                       }
+                       return l;
+               }
+       }
+       public double TimeLast
+       {
+               get {
+                       if(timeList == null || timeList.Count == 0)
+                               return 0;
+                       else
+                               return timeList[timeList.Count -1];
+               }
+       }
+
        public static string GetCSVInputMulti() {
                return Path.Combine(Path.GetTempPath(), "sprintInputMulti.csv");
        }


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