[chronojump] Fixed 5 bugs:



commit 9c1046995abf5b7ef18ec885058799b69986c843
Author: Xavier de Blas <xaviblas gmail com>
Date:   Sat Apr 2 04:11:47 2011 +0200

    Fixed 5 bugs:
    
    fixed: connecting 1 chronopic gets unsensitive button_execute test on
    mode != than multiChronopic
    fixed: execute messages take care of threads (use "need" in order to be
    changed by gui thread)
    fixed: crash deleting tests when no test have been executed
    fixed: crash executing run interval
    fixed: crash executing multi chronopic get's hanged after finish and
    pressing platforms. Started and infinite loop of error window

 src/execute/event.cs          |   12 +++--
 src/execute/jump.cs           |   44 +++++++++++----------
 src/execute/multiChronopic.cs |   15 ++++---
 src/execute/pulse.cs          |   13 ++++--
 src/execute/reactionTime.cs   |   18 +++-----
 src/execute/run.cs            |   27 ++++++++++---
 src/gui/chronojump.cs         |   85 +++++++++++++++++++++++++----------------
 src/gui/eventExecute.cs       |    2 +-
 8 files changed, 128 insertions(+), 88 deletions(-)
---
diff --git a/src/execute/event.cs b/src/execute/event.cs
index 018ab55..d9fd7d6 100644
--- a/src/execute/event.cs
+++ b/src/execute/event.cs
@@ -58,8 +58,10 @@ public class EventExecute
 	}
 	protected eventType needUpdateGraphType;
 	
-	protected string syncMessage;
-	protected bool needShowSyncMessage;
+	//protected string syncMessage;
+	//protected bool needShowSyncMessage;
+	protected string feedbackMessage;
+	protected bool needShowFeedbackMessage;
 
 	//instances with the info to create
 	public PrepareEventGraphJumpSimple PrepareEventGraphJumpSimpleObject; 
@@ -313,9 +315,9 @@ public class EventExecute
 			needSensitiveButtonFinish = false;
 		}
 		
-		if(needShowSyncMessage) {
-			egd.Textview_message.Buffer = UtilGtk.TextViewPrint(syncMessage);
-			needShowSyncMessage = false;
+		if(needShowFeedbackMessage) {
+			egd.Textview_message.Buffer = UtilGtk.TextViewPrint(feedbackMessage);
+			needShowFeedbackMessage = false;
 		}
 		
 		
diff --git a/src/execute/jump.cs b/src/execute/jump.cs
index 79ef982..da13c17 100644
--- a/src/execute/jump.cs
+++ b/src/execute/jump.cs
@@ -125,7 +125,8 @@ public class JumpExecute : EventExecute
 		
 		
 		if (platformState==Chronopic.Plataforma.ON) {
-			event_execute_textview_message.Buffer = UtilGtk.TextViewPrint(Catalog.GetString("You are IN, JUMP when prepared!!") );
+			feedbackMessage = Catalog.GetString("You are IN, JUMP when prepared!");
+			needShowFeedbackMessage = true; 
 			Util.PlaySound(Constants.SoundTypes.CAN_START, volumeOn);
 
 			loggedState = States.ON;
@@ -175,7 +176,8 @@ public class JumpExecute : EventExecute
 
 		
 		if (platformState==Chronopic.Plataforma.OFF) {
-			event_execute_textview_message.Buffer = UtilGtk.TextViewPrint(Catalog.GetString("You are OUT, JUMP when prepared!!") );
+			feedbackMessage = Catalog.GetString("You are OUT, JUMP when prepared!");
+			needShowFeedbackMessage = true; 
 			Util.PlaySound(Constants.SoundTypes.CAN_START, volumeOn);
 
 			loggedState = States.OFF;
@@ -240,14 +242,10 @@ public class JumpExecute : EventExecute
 				if (platformState == Chronopic.Plataforma.ON && loggedState == States.OFF) 
 				{
 					//has landed
-Log.Write("w1 ");				
-
 					if(hasFall && tc == 0) {
-Log.Write("w2 ");				
 						//jump with fall, landed first time
 						initializeTimer();
 
-Log.Write("w3 ");				
 						//app1.ProgressBarEventOrTimePreExecution(
 						//don't do it, put a boolean value and let the PulseGTK do it
 						updateProgressBar = new UpdateProgressBar (
@@ -256,7 +254,9 @@ Log.Write("w3 ");
 								1 //it's a drop: phase 1/3
 								);
 						needUpdateEventProgressBar = true;
-Log.Write("w4 ");				
+		
+						feedbackMessage = "";
+						needShowFeedbackMessage = true; 
 					} else {
 						//jump with fall: second landed; or without fall first landing
 					
@@ -275,7 +275,6 @@ Log.Write("w4 ");
 						if(hasFall)
 							percentageToPass = 3; //drop jump has three phases
 							
-Log.Write("w5 ");			
 						//app1.ProgressBarEventOrTimePreExecution(
 						//don't do it, put a boolean value and let the PulseGTK do it
 						updateProgressBar = new UpdateProgressBar (
@@ -284,7 +283,6 @@ Log.Write("w5 ");
 								percentageToPass
 								);
 						needUpdateEventProgressBar = true;
-Log.Write("w6 ");				
 					}
 					
 					loggedState = States.ON;
@@ -313,7 +311,6 @@ Log.Write("w6 ");
 						}
 
 						//update event progressbar
-Log.Write("w7 ");			
 						//app1.ProgressBarEventOrTimePreExecution(
 						//don't do it, put a boolean value and let the PulseGTK do it
 						updateProgressBar = new UpdateProgressBar (
@@ -322,13 +319,9 @@ Log.Write("w7 ");
 								2 //it's a drop jump: phase 2/3
 								);
 						needUpdateEventProgressBar = true;
-Log.Write("w8 ");				
 					} else {
-Log.Write("w9 ");				
 						initializeTimer();
 						
-Log.Write("wa ");				
-						
 						//update event progressbar
 						//app1.ProgressBarEventOrTimePreExecution(
 						//don't do it, put a boolean value and let the PulseGTK do it
@@ -338,7 +331,9 @@ Log.Write("wa ");
 								1 //normal jump, phase 1/2
 								);
 						needUpdateEventProgressBar = true;
-Log.Write("wb ");				
+						
+						feedbackMessage = "";
+						needShowFeedbackMessage = true; 
 					}
 
 					//change the automata state
@@ -389,9 +384,10 @@ Log.Write("wb ");
 			myStringPush = myStringPush + "(" + weight.ToString() + "%)";
 		}
 		if(simulated)
-			event_execute_textview_message.Buffer = UtilGtk.TextViewPrint(Constants.SimulatedMessage);
+			feedbackMessage = Catalog.GetString(Constants.SimulatedMessage);
 		else
-			event_execute_textview_message.Buffer = UtilGtk.TextViewPrint(myStringPush );
+			feedbackMessage = "";
+		needShowFeedbackMessage = true; 
 
 		uniqueID = SqliteJump.Insert(false, Constants.JumpTable, "NULL", personID, sessionID, 
 				type, tv, tc, fall,  //type, tv, tc, fall
@@ -544,11 +540,13 @@ public class JumpRjExecute : JumpExecute
 		bool success = false;
 
 		if (platformState==Chronopic.Plataforma.OFF && hasFall ) {
-			event_execute_textview_message.Buffer = UtilGtk.TextViewPrint(Catalog.GetString("You are OUT, JUMP when prepared!!") );
+			feedbackMessage = Catalog.GetString("You are OUT, JUMP when prepared!");
+			needShowFeedbackMessage = true; 
 			Util.PlaySound(Constants.SoundTypes.CAN_START, volumeOn);
 			success = true;
 		} else if (platformState==Chronopic.Plataforma.ON && ! hasFall ) {
-			event_execute_textview_message.Buffer = UtilGtk.TextViewPrint(Catalog.GetString("You are IN, JUMP when prepared!!") );
+			feedbackMessage = Catalog.GetString("You are IN, JUMP when prepared!");
+			needShowFeedbackMessage = true; 
 			Util.PlaySound(Constants.SoundTypes.CAN_START, volumeOn);
 			success = true;
 		} else {
@@ -648,6 +646,9 @@ public class JumpRjExecute : JumpExecute
 
 						//but start timer
 						initializeTimer();
+						
+						feedbackMessage = "";
+						needShowFeedbackMessage = true; 
 					} else {
 						//reactive jump has not finished... record the next jump
 						Log.WriteLine(string.Format("tcCount: {0}, tvCount: {1}", tcCount, tvCount));
@@ -989,9 +990,10 @@ public class JumpRjExecute : JumpExecute
 				" " + Catalog.GetString("AVG TF") + ": " + Util.TrimDecimals( Util.GetAverage (tvString).ToString(), pDN ) +
 				" " + Catalog.GetString("AVG TC") + ": " + Util.TrimDecimals( Util.GetAverage (tcString).ToString(), pDN ) ;
 			if(simulated)
-				event_execute_textview_message.Buffer = UtilGtk.TextViewPrint(Constants.SimulatedMessage);
+				feedbackMessage = Catalog.GetString(Constants.SimulatedMessage);
 			else
-				event_execute_textview_message.Buffer = UtilGtk.TextViewPrint(myStringPush );
+				feedbackMessage = "";
+			needShowFeedbackMessage = true; 
 		
 
 			//event will be raised, and managed in chronojump.cs
diff --git a/src/execute/multiChronopic.cs b/src/execute/multiChronopic.cs
index e310f86..213cf71 100644
--- a/src/execute/multiChronopic.cs
+++ b/src/execute/multiChronopic.cs
@@ -384,8 +384,8 @@ public class MultiChronopicExecute : EventExecute
 		syncStates syncing = syncStates.DONE;
 		if(syncFirst) {
 			syncing = syncStates.NOTHING;
-			syncMessage = Catalog.GetString("Press and mantain Test button in all Chronopics simultaneously.");
-			needShowSyncMessage = true;
+			feedbackMessage = Catalog.GetString("Press and mantain Test button in all Chronopics simultaneously.");
+			needShowFeedbackMessage = true;
 		}
 
 		do {
@@ -404,18 +404,21 @@ public class MultiChronopicExecute : EventExecute
 					if (firstValue) {
 						firstValue = false;
 						initializeTimer(); //this is for first Chronopic and only for simulated
+						
+						feedbackMessage = "";
+						needShowFeedbackMessage = true; 
 					}
 							
 					if(syncing == syncStates.NOTHING && myPS == Chronopic.Plataforma.ON && myLS == States.OFF) {
 						syncing = syncStates.CONTACTED;
-						syncMessage = Catalog.GetString("Release Test button in all Chronopics simultaneously.");
-						needShowSyncMessage = true;
+						feedbackMessage = Catalog.GetString("Release Test button in all Chronopics simultaneously.");
+						needShowFeedbackMessage = true;
 					}
 					else if (syncing == syncStates.CONTACTED && myPS == Chronopic.Plataforma.OFF && myLS == States.ON) {
 						syncing = syncStates.DONE;
-						syncMessage = Catalog.GetString("Synchronization done.") + "\n" + 
+						feedbackMessage = Catalog.GetString("Synchronization done.") + "\n" + 
 							Catalog.GetString("Test starts now.");
-						needShowSyncMessage = true;
+						needShowFeedbackMessage = true;
 					}
 					else {
 						if(type != Constants.RunAnalysisName)
diff --git a/src/execute/pulse.cs b/src/execute/pulse.cs
index 8ba0a2b..4d940b5 100644
--- a/src/execute/pulse.cs
+++ b/src/execute/pulse.cs
@@ -125,7 +125,7 @@ public class PulseExecute : EventExecute
 		//we record always de TC+TF (or time between we pulse platform and we pulse again)
 		//we don't care about the time between the get in and the get out the platform
 		if (platformState==Chronopic.Plataforma.ON) {
-			string myMessage = Catalog.GetString("You are IN, please leave the platform, prepare for start, and press the 'accept' button!!");
+			string myMessage = Catalog.GetString("You are IN, please leave the platform, prepare for start, and press the 'accept' button!");
 
 			ConfirmWindow confirmWin;		
 			confirmWin = ConfirmWindow.Show(myMessage, "", "");
@@ -137,7 +137,8 @@ public class PulseExecute : EventExecute
 			//if confirmWin.Button_cancel is pressed retuen
 			confirmWin.Button_cancel.Clicked += new EventHandler(cancel_event_before_start);
 		} else if (platformState==Chronopic.Plataforma.OFF) {
-			event_execute_textview_message.Buffer = UtilGtk.TextViewPrint(Catalog.GetString("You are OUT, start when prepared!!") );
+			feedbackMessage = Catalog.GetString("You are OUT, start when prepared!");
+			needShowFeedbackMessage = true; 
 			Util.PlaySound(Constants.SoundTypes.CAN_START, volumeOn);
 
 			loggedState = States.OFF;
@@ -201,6 +202,9 @@ public class PulseExecute : EventExecute
 							pulsePhase = pulsePhases.DOING;
 							//pulse starts
 							initializeTimer();
+
+							feedbackMessage = "";
+							needShowFeedbackMessage = true; 
 						} else {
 							//is not the first pulse
 							if(totalPulsesNum == -1) {
@@ -346,9 +350,10 @@ public class PulseExecute : EventExecute
 		
 		string myStringPush =   Catalog.GetString("Last pulse") + ": " + personName + " " + type ;
 		if(simulated)
-			event_execute_textview_message.Buffer = UtilGtk.TextViewPrint(Constants.SimulatedMessage);
+			feedbackMessage = Catalog.GetString(Constants.SimulatedMessage);
 		else
-			event_execute_textview_message.Buffer = UtilGtk.TextViewPrint(myStringPush );
+			feedbackMessage = "";
+		needShowFeedbackMessage = true; 
 				
 	
 		//event will be raised, and managed in chronojump.cs
diff --git a/src/execute/reactionTime.cs b/src/execute/reactionTime.cs
index 5b7683d..241e425 100644
--- a/src/execute/reactionTime.cs
+++ b/src/execute/reactionTime.cs
@@ -102,8 +102,8 @@ public class ReactionTimeExecute : EventExecute
 		
 		
 		if (platformState==Chronopic.Plataforma.ON) {
-			event_execute_textview_message.Buffer = UtilGtk.TextViewPrint(Catalog.GetString("You are IN, RELEASE when prepared!!") );
-
+			feedbackMessage = Catalog.GetString("You are IN, RELEASE when prepared!");
+			needShowFeedbackMessage = true; 
 			Util.PlaySound(Constants.SoundTypes.CAN_START, volumeOn);
 
 			loggedState = States.ON;
@@ -160,8 +160,6 @@ public class ReactionTimeExecute : EventExecute
 				if (platformState == Chronopic.Plataforma.ON && loggedState == States.OFF) 
 				{
 					//has landed
-Log.Write("w1 ");				
-
 					if(simulated)
 						timestamp = simulatedTimeLast * 1000; //conversion to milliseconds
 
@@ -175,7 +173,6 @@ Log.Write("w1 ");
 					//update event progressbar
 					double percentageToPass = 2; //has two phases
 
-Log.Write("w5 ");			
 					//progressBarEventOrTimePreExecution(
 					//don't do it, put a boolean value and let the PulseGTK do it
 					updateProgressBar = new UpdateProgressBar (
@@ -184,7 +181,6 @@ Log.Write("w5 ");
 							percentageToPass
 							);
 					needUpdateEventProgressBar = true;
-Log.Write("w6 ");				
 
 					loggedState = States.ON;
 				}
@@ -193,10 +189,10 @@ Log.Write("w6 ");
 			
 					//it's out, was inside (= has released)
 					
-Log.Write("w9 ");				
 					initializeTimer();
 						
-Log.Write("wa ");				
+					feedbackMessage = "";
+					needShowFeedbackMessage = true; 
 						
 					//update event progressbar
 					//progressBarEventOrTimePreExecution(
@@ -207,7 +203,6 @@ Log.Write("wa ");
 							1 //normal jump, phase 1/2
 							);
 					needUpdateEventProgressBar = true;
-Log.Write("wb ");				
 
 					//change the automata state
 					loggedState = States.OFF;
@@ -246,9 +241,10 @@ Log.Write("wb ");
 			type + " " + Catalog.GetString("Time") + ": " + Util.TrimDecimals( time.ToString(), pDN ) ;
 		
 		if(simulated)
-			event_execute_textview_message.Buffer = UtilGtk.TextViewPrint(Constants.SimulatedMessage);
+			feedbackMessage = Catalog.GetString(Constants.SimulatedMessage);
 		else
-			event_execute_textview_message.Buffer = UtilGtk.TextViewPrint(myStringPush );
+			feedbackMessage = "";
+		needShowFeedbackMessage = true; 
 
 		uniqueID = SqliteReactionTime.Insert(
 				false, Constants.ReactionTimeTable, 
diff --git a/src/execute/run.cs b/src/execute/run.cs
index b3c6cda..efe5bfe 100644
--- a/src/execute/run.cs
+++ b/src/execute/run.cs
@@ -114,14 +114,16 @@ Log.WriteLine("MANAGE(b)!!!!");
 		//you can start ON or OFF the platform, 
 		//we record always de TF (or time between we abandonate the platform since we arrive)
 		if (platformState==Chronopic.Plataforma.ON) {
-			event_execute_textview_message.Buffer = UtilGtk.TextViewPrint(Catalog.GetString("You are IN, RUN when prepared!!") );
+			feedbackMessage = Catalog.GetString("You are IN, RUN when prepared!");
+			needShowFeedbackMessage = true; 
 			Util.PlaySound(Constants.SoundTypes.CAN_START, volumeOn);
 
 			loggedState = States.ON;
 			startIn = true;
 			runPhase = runPhases.PLATFORM_INI;
 		} else if (platformState==Chronopic.Plataforma.OFF) {
-			event_execute_textview_message.Buffer = UtilGtk.TextViewPrint(Catalog.GetString("You are OUT, RUN when prepared!!") );
+			feedbackMessage = Catalog.GetString("You are OUT, RUN when prepared!");
+			needShowFeedbackMessage = true; 
 			Util.PlaySound(Constants.SoundTypes.CAN_START, volumeOn);
 
 			loggedState = States.OFF;
@@ -226,7 +228,7 @@ Log.WriteLine("MANAGE(3)!!!!");
 					//don't record time
 						
 					initializeTimer();
-
+						
 					//update event progressbar
 					updateProgressBar = new UpdateProgressBar (
 							true, //isEvent
@@ -235,6 +237,9 @@ Log.WriteLine("MANAGE(3)!!!!");
 							);  
 					needUpdateEventProgressBar = true;
 					
+					feedbackMessage = "";
+					needShowFeedbackMessage = true; 
+					
 					//change the automata state
 					loggedState = States.OFF;
 						
@@ -301,9 +306,10 @@ Log.WriteLine("MANAGE(3)!!!!");
 			type + " " + Catalog.GetString("time") + ": " + Util.TrimDecimals( time.ToString(), pDN ) + 
 			" " + Catalog.GetString("speed") + ": " + Util.TrimDecimals ( (distance/time).ToString(), pDN );
 		if(simulated)
-			event_execute_textview_message.Buffer = UtilGtk.TextViewPrint(Constants.SimulatedMessage);
+			feedbackMessage = Catalog.GetString(Constants.SimulatedMessage);
 		else
-			event_execute_textview_message.Buffer = UtilGtk.TextViewPrint(myStringPush );
+			feedbackMessage = "";
+		needShowFeedbackMessage = true; 
 
 
 		string description = "";
@@ -467,6 +473,9 @@ public class RunIntervalExecute : RunExecute
 						runPhase = runPhases.RUNNING;
 						//run starts
 						initializeTimer();
+					
+						feedbackMessage = "";
+						needShowFeedbackMessage = true; 
 					}
 					else {
 						runPhase = runPhases.RUNNING;
@@ -623,6 +632,9 @@ public class RunIntervalExecute : RunExecute
 						//run starts
 						initializeTimer();
 						lastTc = 0;
+
+						feedbackMessage = "";
+						needShowFeedbackMessage = true; 
 					} else
 						lastTc = timestamp/1000.0;
 						
@@ -819,9 +831,10 @@ public class RunIntervalExecute : RunExecute
 							timeTotal.ToString(), metersSecondsPreferred )
 						, pDN ) ;
 			if(simulated)
-				event_execute_textview_message.Buffer = UtilGtk.TextViewPrint(Constants.SimulatedMessage);
+				feedbackMessage = Catalog.GetString(Constants.SimulatedMessage);
 			else
-				event_execute_textview_message.Buffer = UtilGtk.TextViewPrint(myStringPush );
+				feedbackMessage = "";
+			needShowFeedbackMessage = true; 
 
 
 			//event will be raised, and managed in chronojump.cs
diff --git a/src/gui/chronojump.cs b/src/gui/chronojump.cs
index 9966632..2e78892 100644
--- a/src/gui/chronojump.cs
+++ b/src/gui/chronojump.cs
@@ -3931,32 +3931,19 @@ Console.WriteLine("X");
 	private void on_chronopic_clicked (object o, EventArgs args) {
 		chronopicWin = ChronopicWindow.View(volumeOn);
 		chronopicWin.FakeWindowDone.Clicked += new EventHandler(on_chronopic_window_connected_or_done);
-Log.WriteLine("AAAAA");
 	}
 	
 	private void on_chronopic_window_connected_or_done (object o, EventArgs args) {
-Log.WriteLine("BBBBBB");
 		//chronopicWin.FakeWindowDone.Clicked -= new EventHandler(on_chronopic_window_connected_or_done);
 		int cps = chronopicWin.NumConnected();
-	
-		on_extra_window_multichronopic_test_changed(new object(), new EventArgs());
-		/*
-		if(cps >= 2) {	
-			button_multi_chronopic_start.Sensitive = true;
-			extra_window_spin_run_analysis_distance.Sensitive = true;
-			on_extra_window_spin_run_analysis_distance_changed (o, args);
-		} else {
-			button_multi_chronopic_start.Sensitive = false;
-			extra_window_spin_run_analysis_distance.Sensitive = false;
-			button_run_analysis.Sensitive = false;
-		}
-		*/
+
+		if(radio_mode_multi_chronopic.Active)	
+			on_extra_window_multichronopic_test_changed(new object(), new EventArgs());
 		
 		chronopicLabels(cps);
 	}
 	
 	private void chronopicLabels(int cps) {
-Log.WriteLine("CCCCC");
 		label_connected_chronopics.Text = "<b>" + cps.ToString() + "</b>";
 		label_connected_chronopics.UseMarkup = true; 
 		
@@ -4159,12 +4146,9 @@ Console.WriteLine("X");
 		Console.WriteLine("RR3");
 		sensitiveGuiEventDone();
 		Console.WriteLine("RR4");
-		
-		event_execute_textview_message.Buffer = UtilGtk.TextViewPrint("");
 	}
 		
 
-
 	/*
 	 * update button is clicked on eventWindow, chronojump.cs delegate points here
 	 */
@@ -4716,8 +4700,13 @@ Console.WriteLine("X");
 		//then what we are deleting is selected jump, not last jump 
 		//only if selected is last, then
 		//change executing window: drawingarea, button_delete, "deleted test" message
-		if(currentJump.UniqueID == id)
-			deleted_last_test_update_widgets();
+		try {
+			if(currentJump.UniqueID == id)
+				deleted_last_test_update_widgets();
+		} catch {
+			//there's no currentJump (no one jumped), then it crashed,
+			//but don't need to update widgets
+		}
 	}
 
 	private void on_delete_selected_jump_rj_accepted (object o, EventArgs args) {
@@ -4733,8 +4722,13 @@ Console.WriteLine("X");
 			stats_win_fillTreeView_stats(false, false);
 		}
 		Util.DeleteVideo(currentSession.UniqueID, Constants.TestTypes.JUMP_RJ, id );
-		if(currentJumpRj.UniqueID == id)
-			deleted_last_test_update_widgets();
+		try {
+			if(currentJumpRj.UniqueID == id)
+				deleted_last_test_update_widgets();
+		} catch {
+			//there's no currentJumpRj (no one jumped), then it crashed,
+			//but don't need to update widgets
+		}
 	}
 	
 	private void on_delete_selected_run_clicked (object o, EventArgs args) {
@@ -4785,8 +4779,13 @@ Console.WriteLine("X");
 			stats_win_fillTreeView_stats(false, false);
 		}
 		Util.DeleteVideo(currentSession.UniqueID, Constants.TestTypes.RUN, id );
-		if(currentRun.UniqueID == id)
-			deleted_last_test_update_widgets();
+		try {
+			if(currentRun.UniqueID == id)
+				deleted_last_test_update_widgets();
+		} catch {
+			//there's no currentRun (no one done it now), then it crashed,
+			//but don't need to update widgets
+		}
 	}
 
 	private void on_delete_selected_run_interval_accepted (object o, EventArgs args) {
@@ -4802,8 +4801,13 @@ Console.WriteLine("X");
 			stats_win_fillTreeView_stats(false, false);
 		}
 		Util.DeleteVideo(currentSession.UniqueID, Constants.TestTypes.RUN_I, id );
-		if(currentRunInterval.UniqueID == id)
-			deleted_last_test_update_widgets();
+		try {
+			if(currentRunInterval.UniqueID == id)
+				deleted_last_test_update_widgets();
+		} catch {
+			//there's no currentRunInterval (no one done it now), then it crashed,
+			//but don't need to update widgets
+		}
 	}
 	
 	private void on_delete_selected_reaction_time_clicked (object o, EventArgs args) {
@@ -4839,8 +4843,13 @@ Console.WriteLine("X");
 		}
 		*/
 		Util.DeleteVideo(currentSession.UniqueID, Constants.TestTypes.RT, id );
-		if(currentReactionTime.UniqueID == id)
-			deleted_last_test_update_widgets();
+		try {
+			if(currentReactionTime.UniqueID == id)
+				deleted_last_test_update_widgets();
+		} catch {
+			//there's no currentReactionTime (no one done it now), then it crashed,
+			//but don't need to update widgets
+		}
 	}
 
 	private void on_delete_selected_pulse_clicked (object o, EventArgs args) {
@@ -4876,8 +4885,13 @@ Console.WriteLine("X");
 		}
 		*/
 		Util.DeleteVideo(currentSession.UniqueID, Constants.TestTypes.PULSE, id );
-		if(currentPulse.UniqueID == id)
-			deleted_last_test_update_widgets();
+		try {
+			if(currentPulse.UniqueID == id)
+				deleted_last_test_update_widgets();
+		} catch {
+			//there's no currentPulse (no one done it now), then it crashed,
+			//but don't need to update widgets
+		}
 	}
 
 	private void on_delete_selected_multi_chronopic_clicked (object o, EventArgs args) {
@@ -4906,8 +4920,13 @@ Console.WriteLine("X");
 		showHideActionEventButtons(false, Constants.MultiChronopicName);
 		
 		Util.DeleteVideo(currentSession.UniqueID, Constants.TestTypes.MULTICHRONOPIC, id );
-		if(currentMultiChronopic.UniqueID == id)
-			deleted_last_test_update_widgets();
+		try {
+			if(currentMultiChronopic.UniqueID == id)
+				deleted_last_test_update_widgets();
+		} catch {
+			//there's no currentMultiChronopic (no one done it now), then it crashed,
+			//but don't need to update widgets
+		}
 	}
 	
 
diff --git a/src/gui/eventExecute.cs b/src/gui/eventExecute.cs
index 0a4a404..9c0bb05 100644
--- a/src/gui/eventExecute.cs
+++ b/src/gui/eventExecute.cs
@@ -1816,7 +1816,7 @@ Log.WriteLine("Preparing reactive A");
 				}
 				break;
 			case EventType.Types.RUN:
-				if(lastRunIsSimple) {
+				if(thisRunIsSimple) {
 					Log.Write("update graph: RUN");
 					PrepareRunSimpleGraph(
 							currentEventExecute.PrepareEventGraphRunSimpleObject.time,



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