[chronojump] New feature: selecting a runI on treeview, displays it on top cairo realtime graph
- From: Xavier de Blas <xaviblas src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [chronojump] New feature: selecting a runI on treeview, displays it on top cairo realtime graph
- Date: Mon, 7 Mar 2022 17:14:30 +0000 (UTC)
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]