[chronojump] Big change on gui making all contacts stuff look like encoder



commit 44ca2253a89b16fdb7f31e8ec13aafee41bcb972
Author: Xavier de Blas <xaviblas gmail com>
Date:   Wed Dec 4 11:17:25 2019 +0100

    Big change on gui making all contacts stuff look like encoder

 glade/repetitive_conditions.glade | 163 +++++++++++++++++++++++-
 src/execute/jump.cs               |   2 +-
 src/forceSensorDynamics.cs        |  10 +-
 src/gui/chronojump.cs             | 261 ++++++++++++++++++++++++++++----------
 src/gui/chronojumpIcons.cs        |  39 +++---
 src/gui/encoder.cs                |  12 +-
 src/gui/eventExecute.cs           |  11 +-
 src/gui/forceSensor.cs            | 122 +++++++-----------
 src/gui/forceSensorAnalyze.cs     |   6 +-
 src/gui/jump.cs                   |   3 +-
 src/gui/person.cs                 |   6 +-
 src/gui/repetitiveConditions.cs   |  77 +++++++++--
 src/gui/runEncoder.cs             |  47 +++----
 src/gui/webcam.cs                 | 117 ++++++++++-------
 src/preferences.cs                |   4 +
 15 files changed, 600 insertions(+), 280 deletions(-)
---
diff --git a/glade/repetitive_conditions.glade b/glade/repetitive_conditions.glade
index f3150cf5..0a02053a 100644
--- a/glade/repetitive_conditions.glade
+++ b/glade/repetitive_conditions.glade
@@ -3644,7 +3644,7 @@
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkHBox" id="hbox16">
+                  <widget class="GtkHBox" id="hbox_test_bells">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <property name="spacing">8</property>
@@ -3771,6 +3771,167 @@
                     <property name="position">3</property>
                   </packing>
                 </child>
+                <child>
+                  <widget class="GtkVBox" id="vbox_force_capture_feedback">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="spacing">12</property>
+                    <child>
+                      <widget class="GtkCheckButton" id="check_force_sensor_capture_feedback">
+                        <property name="label" translatable="yes">Show feedback rectangle</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="draw_indicator">True</property>
+                        <signal name="toggled" handler="on_check_force_sensor_capture_feedback_toggled" 
swapped="no"/>
+                      </widget>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkAlignment" id="alignment29">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="left_padding">20</property>
+                        <child>
+                          <widget class="GtkHBox" id="hbox_force_sensor_capture_feedback">
+                            <property name="visible">True</property>
+                            <property name="sensitive">False</property>
+                            <property name="can_focus">False</property>
+                            <property name="spacing">20</property>
+                            <child>
+                              <widget class="GtkHBox" id="hbox324">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="spacing">4</property>
+                                <child>
+                                  <widget class="GtkLabel" id="label395">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="label">at</property>
+                                  </widget>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <widget class="GtkSpinButton" id="spin_force_sensor_capture_feedback_at">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="invisible_char">●</property>
+                                    <property name="invisible_char_set">True</property>
+                                    <property name="primary_icon_activatable">False</property>
+                                    <property name="secondary_icon_activatable">False</property>
+                                    <property name="primary_icon_sensitive">True</property>
+                                    <property name="secondary_icon_sensitive">True</property>
+                                    <property name="adjustment">100 0 9999 1 10 0</property>
+                                    <property name="climb_rate">1</property>
+                                    <property name="numeric">True</property>
+                                  </widget>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">False</property>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <widget class="GtkLabel" id="label397">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="xalign">0</property>
+                                    <property name="label">N</property>
+                                  </widget>
+                                  <packing>
+                                    <property name="expand">True</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">2</property>
+                                  </packing>
+                                </child>
+                              </widget>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <widget class="GtkHBox" id="hbox323">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="spacing">4</property>
+                                <child>
+                                  <widget class="GtkLabel" id="label396">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="label">range</property>
+                                  </widget>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <widget class="GtkSpinButton" 
id="spin_force_sensor_capture_feedback_range">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="invisible_char">●</property>
+                                    <property name="invisible_char_set">True</property>
+                                    <property name="primary_icon_activatable">False</property>
+                                    <property name="secondary_icon_activatable">False</property>
+                                    <property name="primary_icon_sensitive">True</property>
+                                    <property name="secondary_icon_sensitive">True</property>
+                                    <property name="adjustment">40 2 200 1 10 0</property>
+                                    <property name="climb_rate">1</property>
+                                    <property name="numeric">True</property>
+                                  </widget>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">False</property>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <widget class="GtkLabel" id="label398">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="xalign">0</property>
+                                    <property name="label">N</property>
+                                  </widget>
+                                  <packing>
+                                    <property name="expand">True</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">2</property>
+                                  </packing>
+                                </child>
+                              </widget>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                          </widget>
+                        </child>
+                      </widget>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">4</property>
+                  </packing>
+                </child>
               </widget>
             </child>
             <child>
diff --git a/src/execute/jump.cs b/src/execute/jump.cs
index 9012a4d2..b6367002 100644
--- a/src/execute/jump.cs
+++ b/src/execute/jump.cs
@@ -151,7 +151,7 @@ public class JumpExecute : EventExecute
                        //mark now that we have leaved platform:
                        if (simulated)
                                platformState = Chronopic.Plataforma.OFF;
-                       
+
                        //start thread
                        thread = new Thread(new ThreadStart(waitEvent));
                        GLib.Idle.Add (new GLib.IdleHandler (PulseGTK));
diff --git a/src/forceSensorDynamics.cs b/src/forceSensorDynamics.cs
index 724e5ed9..90fb659e 100644
--- a/src/forceSensorDynamics.cs
+++ b/src/forceSensorDynamics.cs
@@ -171,6 +171,11 @@ public abstract class ForceSensorDynamics
                return force_l;
        }
 
+       public List<ForceSensorRepetition> GetRepetitions()
+       {
+               return forceSensorRepetition_l;
+       }
+
        //----- start of: only implemented on elastic ----->
 
        public virtual List<double> GetPositions()
@@ -193,11 +198,6 @@ public abstract class ForceSensorDynamics
                return new List<double>();
        }
 
-       public List<ForceSensorRepetition> GetRepetitions()
-       {
-               return forceSensorRepetition_l;
-       }
-
        //<----- end of: only implemented on elastic -----
 
 }
diff --git a/src/gui/chronojump.cs b/src/gui/chronojump.cs
index d1b03a4a..27c0baf0 100644
--- a/src/gui/chronojump.cs
+++ b/src/gui/chronojump.cs
@@ -214,8 +214,18 @@ public partial class ChronoJumpWindow
        [Widget] Gtk.VBox vbox_rest_time_set;
        [Widget] Gtk.SpinButton spinbutton_rest_minutes;
        [Widget] Gtk.SpinButton spinbutton_rest_seconds;
-       
+
        //tests
+       [Widget] Gtk.Button button_contacts_exercise;
+       [Widget] Gtk.Notebook notebook_contacts_capture_doing_wait;
+       [Widget] Gtk.Button button_contacts_bells;
+       [Widget] Gtk.Button button_contacts_capture_load;
+       [Widget] Gtk.Button button_contacts_recalculate;
+       [Widget] Gtk.VBox vbox_contacts_signal_comment;
+       [Widget] Gtk.TextView textview_contacts_signal_comment;
+       [Widget] Gtk.Button button_contacts_signal_save_comment;
+       [Widget] Gtk.VBox vbox_contacts_device_and_camera;
+
        //jumps
        [Widget] Gtk.Button button_edit_selected_jump;
        [Widget] Gtk.Button button_video_play_selected_jump;
@@ -289,6 +299,7 @@ public partial class ChronoJumpWindow
 
        //force sensor
        [Widget] Gtk.HBox hbox_capture_phases_time;
+       [Widget] Gtk.VBox vbox_contacts_load_recalculate;
 
        //multiChronopic        
        [Widget] Gtk.Button button_edit_selected_multi_chronopic;
@@ -313,6 +324,7 @@ public partial class ChronoJumpWindow
        [Widget] Gtk.Button button_person_add_single;
        [Widget] Gtk.Button button_person_add_multiple;
 
+       [Widget] Gtk.Button button_contacts_exercise_close_and_capture;
        [Widget] Gtk.Notebook notebook_execute;
        [Widget] Gtk.Notebook notebook_results;
        [Widget] Gtk.Notebook notebook_options_top;
@@ -322,8 +334,9 @@ public partial class ChronoJumpWindow
        [Widget] Gtk.Button button_image_test_zoom;
        [Widget] Gtk.Image image_test_zoom;
        [Widget] Gtk.Button button_delete_last_test;
-       [Widget] Gtk.Button button_inspect_last_test;
-       [Widget] Gtk.VBox vbox_last_test_buttons;
+       [Widget] Gtk.Button button_inspect_last_test_run_simple;
+       [Widget] Gtk.Button button_inspect_last_test_run_intervallic;
+       //[Widget] Gtk.VBox vbox_last_test_buttons;
 
        [Widget] Gtk.HBox hbox_chronopics_and_more;
        [Widget] Gtk.Button button_activate_chronopics;
@@ -493,12 +506,34 @@ public partial class ChronoJumpWindow
 
        private void on_button_contacts_exercise_clicked (object o, EventArgs args)
        {
+               notebook_contacts_capture_doing_wait.Sensitive = false;
+               vbox_contacts_device_and_camera.Sensitive = false;
+               notebook_session_person.Sensitive = false;
+               main_menu.Sensitive = false;
+               button_contacts_exercise.Sensitive = false;
+               hbox_contacts_sup_capture_analyze_two_buttons.Sensitive = false;
+               hbox_top_person.Sensitive = false;
+
+               button_contacts_exercise_close_and_capture.Sensitive = myTreeViewPersons.IsThereAnyRecord();
                notebook_contacts_execute_or_instructions.CurrentPage = 1;
        }
        private void on_button_contacts_exercise_close_clicked (object o, EventArgs args)
        {
+               notebook_contacts_capture_doing_wait.Sensitive = true;
+               vbox_contacts_device_and_camera.Sensitive = true;
+               notebook_session_person.Sensitive = true;
+               main_menu.Sensitive = true;
+               button_contacts_exercise.Sensitive = true;
+               hbox_contacts_sup_capture_analyze_two_buttons.Sensitive = true;
+               hbox_top_person.Sensitive = true;
+
                notebook_contacts_execute_or_instructions.CurrentPage = 0;
        }
+       private void on_button_contacts_exercise_close_and_capture_clicked (object o, EventArgs args)
+       {
+               on_button_contacts_exercise_close_clicked (o, args);
+               on_button_execute_test_clicked(o, args);
+       }
 
        private void on_button_image_test_zoom_clicked(object o, EventArgs args)
        {
@@ -586,13 +621,7 @@ public partial class ChronoJumpWindow
                //at initialization of chronojump and gives problems if this signals are raised while 
preferences are loading
                loadPreferencesAtStart ();
 
-               /*
-               //TODO: make this visible for all systems when it finally works
-               checkbutton_video.Visible = (
-                               UtilAll.GetOSEnum() == UtilAll.OperatingSystems.LINUX ||
-                               UtilAll.GetOSEnum() == UtilAll.OperatingSystems.WINDOWS);
-                               */
-               checkbutton_video.Visible = true;
+               checkbutton_video_contacts.Visible = true;
 
                if(topMessage != "") {
                        label_message_permissions_at_boot.Text = topMessage;
@@ -694,6 +723,9 @@ public partial class ChronoJumpWindow
                if(splashWin != null)
                        splashWin.UpdateLabel(Catalog.GetString(Constants.SplashMessages[9]));
 
+               //done here because in Glade we cannot use the TextBuffer.Changed
+               textview_contacts_signal_comment.Buffer.Changed += new 
EventHandler(on_textview_contacts_signal_comment_key_press_event);
+
                encoderInitializeStuff();       
 
                LogB.Information("Calling configInitRead from gui / ChronojumpWindow");
@@ -864,13 +896,13 @@ public partial class ChronoJumpWindow
 
                //---- video ----
 
-               UtilGtk.ColorsCheckOnlyPrelight(checkbutton_video);
+               UtilGtk.ColorsCheckOnlyPrelight(checkbutton_video_contacts);
                UtilGtk.ColorsCheckOnlyPrelight(checkbutton_video_encoder);
                
                //don't raise the signal        
-               checkbutton_video.Clicked -= new EventHandler(on_checkbutton_video_clicked);
-               checkbutton_video.Active = preferences.videoOn;
-               checkbutton_video.Clicked += new EventHandler(on_checkbutton_video_clicked);
+               checkbutton_video_contacts.Clicked -= new EventHandler(on_checkbutton_video_contacts_clicked);
+               checkbutton_video_contacts.Active = preferences.videoOn;
+               checkbutton_video_contacts.Clicked += new EventHandler(on_checkbutton_video_contacts_clicked);
                //don't raise the signal        
                checkbutton_video_encoder.Clicked -= new EventHandler(on_checkbutton_video_encoder_clicked);
                checkbutton_video_encoder.Active = preferences.videoOn;
@@ -2640,7 +2672,7 @@ public partial class ChronoJumpWindow
                personAddModifyWin = PersonAddModifyWindow.Show(app1,
                                currentSession, new Person(-1), 
                                //preferences.digitsNumber, checkbutton_video, configChronojump.UseVideo,
-                               preferences.digitsNumber, checkbutton_video,
+                               preferences.digitsNumber, checkbutton_video_contacts,
                                preferences.videoDevice, preferences.videoDevicePixelFormat, 
preferences.videoDeviceResolution, preferences.videoDeviceFramerate,
                                configChronojump.Compujump
                                );
@@ -2768,7 +2800,7 @@ public partial class ChronoJumpWindow
 
                personAddModifyWin = PersonAddModifyWindow.Show(app1, currentSession, currentPerson, 
                                //preferences.digitsNumber, checkbutton_video, configChronojump.UseVideo,
-                               preferences.digitsNumber, checkbutton_video,
+                               preferences.digitsNumber, checkbutton_video_contacts,
                                preferences.videoDevice, preferences.videoDevicePixelFormat, 
preferences.videoDeviceResolution, preferences.videoDeviceFramerate,
                                configChronojump.Compujump
                                ); 
@@ -2983,7 +3015,7 @@ public partial class ChronoJumpWindow
                preferences = preferencesWin.GetPreferences;
                LogB.Mute = preferences.muteLogs;
 
-               if(checkbutton_video.Active) {
+               if(checkbutton_video_contacts.Active) {
                        videoCapturePrepare(false); //if error, show message
                }
 
@@ -3097,7 +3129,7 @@ public partial class ChronoJumpWindow
                setApp1Title(tempSessionName, current_menuitem_mode);
 
                //run simple will be the only one with its drawing are
-               event_execute_drawingarea_run_simple_double_contacts.Visible = false;
+               frame_run_simple_double_contacts.Visible = false;
 
                //default for everything except encoder
                encoder_menuitem.Visible = false;
@@ -3124,6 +3156,7 @@ public partial class ChronoJumpWindow
                }
 
 
+               button_contacts_bells.Sensitive = false;
                radio_mode_contacts_capture.Active = true;
                radio_mode_contacts_general.Active = true;
                arrow_contacts_sup_capture_analyze.Visible = false;
@@ -3131,9 +3164,10 @@ public partial class ChronoJumpWindow
                radio_mode_contacts_jumps_profile.Visible = false;
                radio_mode_contacts_sprint.Visible = false;
                notebook_analyze.CurrentPage = Convert.ToInt32(notebook_analyze_pages.STATISTICS);
-               button_inspect_last_test.Visible = false;
-               alignment_force_capture_feedback.Visible = false;
+               button_inspect_last_test_run_intervallic.Visible = false;
                button_force_sensor_adjust.Visible = false;
+               vbox_contacts_load_recalculate.Visible = false;
+               vbox_contacts_signal_comment.Visible = false;
 
                //on OSX R is not installed by default. Check if it's installed. Needed for encoder and force 
sensor
                if(
@@ -3174,6 +3208,7 @@ public partial class ChronoJumpWindow
                        } else 
                        {
                                notebooks_change(m);
+                               button_contacts_bells.Sensitive = true;
                                on_extra_window_jumps_rj_test_changed(new object(), new EventArgs());
                                hbox_results_legend.Visible = false;
 
@@ -3188,18 +3223,19 @@ public partial class ChronoJumpWindow
                        //notebook_capture_analyze.ShowTabs = true;
                        hbox_contacts_sup_capture_analyze_two_buttons.Visible = true;
                        button_threshold.Visible = true;
-                       button_inspect_last_test.Visible = true;
 
                        if(m == Constants.Menuitem_modes.RUNSSIMPLE) 
                        {
                                notebooks_change(m);
                                on_extra_window_runs_test_changed(new object(), new EventArgs());
                                hbox_results_legend.Visible = true;
-                               event_execute_drawingarea_run_simple_double_contacts.Visible = true;
+                               frame_run_simple_double_contacts.Visible = true;
                        }
                        else
                        {
+                               button_inspect_last_test_run_intervallic.Visible = true;
                                notebooks_change(m);
+                               button_contacts_bells.Sensitive = true;
                                on_extra_window_runs_interval_test_changed(new object(), new EventArgs());
                                hbox_results_legend.Visible = false;
                                createTreeView_runs_interval_sprint (treeview_runs_interval_sprint);
@@ -3320,6 +3356,12 @@ public partial class ChronoJumpWindow
                {
                        notebook_sup.CurrentPage = 0;
                        notebooks_change(m);
+
+                       vbox_contacts_load_recalculate.Visible = true;
+                       vbox_contacts_signal_comment.Visible = true;
+                       button_contacts_capture_load.Sensitive = myTreeViewPersons.IsThereAnyRecord();
+
+                       button_contacts_bells.Sensitive = true;
 //                     on_extra_window_reaction_times_test_changed(new object(), new EventArgs());
 
                        //notebook_capture_analyze.ShowTabs = false; //only capture tab is shown (only valid 
for "OTHER" tests)
@@ -3332,13 +3374,16 @@ public partial class ChronoJumpWindow
                        //on force sensor only show table
                        notebook_capture_graph_table.CurrentPage = 1; //"Show table"
                        notebook_capture_graph_table.ShowTabs = false;
-
-                       alignment_force_capture_feedback.Visible = true;
                }
                else if(m == Constants.Menuitem_modes.RUNSENCODER)
                {
                        notebook_sup.CurrentPage = 0;
                        notebooks_change(m);
+
+                       vbox_contacts_load_recalculate.Visible = true;
+                       vbox_contacts_signal_comment.Visible = true;
+                       button_contacts_capture_load.Sensitive = myTreeViewPersons.IsThereAnyRecord();
+
 //                     on_extra_window_reaction_times_test_changed(new object(), new EventArgs());
 
                        //notebook_capture_analyze.ShowTabs = false; //only capture tab is shown (only valid 
for "OTHER" tests)
@@ -3424,23 +3469,17 @@ public partial class ChronoJumpWindow
                chronojumpWindowTestsNext();
        }
 
-       //forceSensor and runEncoder have some specific stuff as they do not have DB yet
        private void showHideCaptureSpecificControls(Constants.Menuitem_modes m)
        {
                hbox_capture_phases_time.Visible = (m != Constants.Menuitem_modes.FORCESENSOR && m != 
Constants.Menuitem_modes.RUNSENCODER);
 
                if(! configChronojump.Compujump)
-               {
-                       //showWebcamCaptureContactsControls (m != Constants.Menuitem_modes.RUNSENCODER);
                        showWebcamCaptureContactsControls(true);
-               }
 
                force_sensor_menuitem.Visible = (m == Constants.Menuitem_modes.FORCESENSOR);
-
                race_encoder_menuitem.Visible = (m == Constants.Menuitem_modes.RUNSENCODER);
        }
 
-
        void setEncoderTypePixbuf()
        {
                Pixbuf pixbuf;
@@ -3904,7 +3943,7 @@ public partial class ChronoJumpWindow
 
        private void on_button_execute_test_acceptedPre_start_camera(WebcamStartedTestStart wsts)
        {
-               button_video_play_this_test_sensitive (WebcamManage.GuiContactsEncoder.CONTACTS, false);
+               button_video_play_this_test_contacts_sensitive (WebcamManage.GuiContactsEncoder.CONTACTS, 
false);
 
                webcamManage = new WebcamManage();
                if(! webcamStart (WebcamManage.GuiContactsEncoder.CONTACTS, 1))
@@ -3922,6 +3961,7 @@ public partial class ChronoJumpWindow
                bool waitUntilRecording = true;
                if(! waitUntilRecording)
                {
+                       notebook_video_contacts.CurrentPage = 1;
                        if(wsts == WebcamStartedTestStart.FORCESENSOR)
                                forceSensorCapturePre3_GTK_cameraCalled();
                        else if(wsts == WebcamStartedTestStart.RUNENCODER)
@@ -4002,6 +4042,84 @@ public partial class ChronoJumpWindow
                change_notebook_results_data();
        }
 
+       private void contactsShowCaptureDoingButtons(bool captureDoing)
+       {
+               if(captureDoing)
+                       notebook_contacts_capture_doing_wait.CurrentPage = 1;
+               else
+                       notebook_contacts_capture_doing_wait.CurrentPage = 0;
+       }
+
+       private void on_button_contacts_capture_load_clicked (object o, EventArgs args)
+       {
+               //on this case should not arrive here becuase sensitivity does not allow it. But extra check 
just in case.
+               if(currentPerson == null || currentSession == null)
+                       return;
+
+               if(current_menuitem_mode == Constants.Menuitem_modes.FORCESENSOR)
+                       force_sensor_load();
+               else if(current_menuitem_mode == Constants.Menuitem_modes.RUNSENCODER)
+                       run_encoder_load();
+       }
+
+       private void on_button_contacts_recalculate_clicked (object o, EventArgs args)
+       {
+               if(current_menuitem_mode == Constants.Menuitem_modes.FORCESENSOR)
+                       force_sensor_recalculate();
+               else if(current_menuitem_mode == Constants.Menuitem_modes.RUNSENCODER)
+                       run_encoder_recalculate();
+       }
+
+       void on_textview_contacts_signal_comment_key_press_event (object o, EventArgs args)
+       {
+               button_contacts_signal_save_comment.Label = Catalog.GetString("Save comment");
+               button_contacts_signal_save_comment.Sensitive = true;
+       }
+       void on_button_contacts_signal_save_comment_clicked (object o, EventArgs args)
+       {
+               if(current_menuitem_mode == Constants.Menuitem_modes.FORCESENSOR)
+               {
+                       currentForceSensor.Comments = 
UtilGtk.TextViewGetCommentValidSQL(textview_contacts_signal_comment);
+                       currentForceSensor.UpdateSQLJustComments(false);
+               }
+               else if(current_menuitem_mode == Constants.Menuitem_modes.RUNSENCODER)
+               {
+                       currentRunEncoder.Comments = 
UtilGtk.TextViewGetCommentValidSQL(textview_contacts_signal_comment);
+                       currentRunEncoder.UpdateSQLJustComments(false);
+               }
+
+               button_contacts_signal_save_comment.Label = Catalog.GetString("Saved comment.");
+               button_contacts_signal_save_comment.Sensitive = false;
+       }
+
+       private Constants.BellModes getBellMode (Constants.Menuitem_modes m)
+       {
+               if(m == Constants.Menuitem_modes.JUMPSREACTIVE)
+                       return Constants.BellModes.JUMPS;
+               else if(m == Constants.Menuitem_modes.RUNSINTERVALLIC)
+                       return Constants.BellModes.RUNS;
+               else if(m == Constants.Menuitem_modes.POWERGRAVITATORY)
+                       return Constants.BellModes.ENCODERGRAVITATORY;
+               else if(m == Constants.Menuitem_modes.POWERINERTIAL)
+                       return Constants.BellModes.ENCODERINERTIAL;
+               else if(m == Constants.Menuitem_modes.FORCESENSOR)
+                       return Constants.BellModes.FORCESENSOR;
+
+               //default to JUMPSREACTIVE
+               return Constants.BellModes.JUMPS;
+       }
+
+       private void on_button_contacts_bells_clicked (object o, EventArgs args)
+       {
+               Constants.Menuitem_modes m = current_menuitem_mode;
+               if(m != Constants.Menuitem_modes.JUMPSREACTIVE &&
+                               m != Constants.Menuitem_modes.RUNSINTERVALLIC &&
+                               m != Constants.Menuitem_modes.FORCESENSOR)
+                       return;
+
+               repetitiveConditionsWin.View(getBellMode(m), preferences, encoderRhythm);
+       }
+
        private void change_notebook_results_data()
        {
                //there are some notebook_execute pages that have not notebook_results_data pages
@@ -4168,7 +4286,8 @@ public partial class ChronoJumpWindow
 
                if (! canCaptureC)
                        currentEventExecute.SimulateInitValues(rand);
-               
+
+               contactsShowCaptureDoingButtons(true);
                if( currentJumpType.StartIn ) 
                        currentEventExecute.Manage();
                else 
@@ -4198,7 +4317,7 @@ public partial class ChronoJumpWindow
                                        //unsensitive slCMJ options 
                                        hbox_extra_window_jumps_single_leg_radios.Sensitive = false;
                                        //but show the input cm
-                                       notebook_options_at_execute_button.CurrentPage = 1;
+                                       notebook_contacts_capture_doing_wait.CurrentPage = 2;
                                }
                                SqliteJump.UpdateDescription(Constants.JumpTable, 
                                                currentJump.UniqueID, currentJump.Description);
@@ -4250,6 +4369,7 @@ public partial class ChronoJumpWindow
        private void on_test_finished_can_touch_gtk (object o, EventArgs args)
        {
                currentEventExecute.FakeButtonThreadDyed.Clicked -= new 
EventHandler(on_test_finished_can_touch_gtk);
+               contactsShowCaptureDoingButtons(false);
 
                on_event_execute_EventEnded();
 
@@ -4482,6 +4602,7 @@ public partial class ChronoJumpWindow
                if(! canCaptureC)
                        currentEventExecute.SimulateInitValues(rand);
                
+               contactsShowCaptureDoingButtons(true);
                currentEventExecute.Manage();
 
                thisJumpIsSimple = false; //used by: on_event_execute_update_graph_in_progress_clicked
@@ -4626,7 +4747,8 @@ public partial class ChronoJumpWindow
 
                if (! canCaptureC)
                        currentEventExecute.SimulateInitValues(rand);
-                       
+
+               contactsShowCaptureDoingButtons(true);
                currentEventExecute.Manage();
 
                thisRunIsSimple = true; //used by: on_event_execute_update_graph_in_progress_clicked
@@ -4762,6 +4884,7 @@ public partial class ChronoJumpWindow
                if(! canCaptureC)
                        currentEventExecute.SimulateInitValues(rand);
 
+               contactsShowCaptureDoingButtons(true);
                currentEventExecute.Manage();
 
                thisRunIsSimple = false; //used by: on_event_execute_update_graph_in_progress_clicked
@@ -4775,7 +4898,7 @@ public partial class ChronoJumpWindow
        {
                //test can be deleted if not cancelled
                sensitiveLastTestButtons(! currentEventExecute.Cancel);
-               button_inspect_last_test.Sensitive = ! currentEventExecute.Cancel;
+               button_inspect_last_test_run_intervallic.Sensitive = ! currentEventExecute.Cancel;
 
                if ( ! currentEventExecute.Cancel ) {
                        currentRunInterval = (RunInterval) currentEventExecute.EventDone;
@@ -4991,6 +5114,7 @@ public partial class ChronoJumpWindow
                
                currentEventExecute.FakeButtonReactionTimeStart.Clicked += new 
EventHandler(on_event_execute_reaction_time_start);
 
+               contactsShowCaptureDoingButtons(true);
                currentEventExecute.Manage(); //check that platform is ok
                
                currentEventExecute.FakeButtonUpdateGraph.Clicked += 
@@ -5036,6 +5160,7 @@ public partial class ChronoJumpWindow
                        LogB.Information("flushed!");   
                }
 
+               contactsShowCaptureDoingButtons(true);
                currentEventExecute.Manage2();
        }
 
@@ -5141,6 +5266,7 @@ public partial class ChronoJumpWindow
                if(! canCaptureC)
                        currentEventExecute.SimulateInitValues(rand);
                
+               contactsShowCaptureDoingButtons(true);
                currentEventExecute.Manage();
                
                currentEventExecute.FakeButtonUpdateGraph.Clicked += 
@@ -5427,6 +5553,7 @@ public partial class ChronoJumpWindow
 
                //mark to only get inside on_multi_chronopic_finished one time
                multiFinishing = false;
+               contactsShowCaptureDoingButtons(true);
                currentEventExecute.Manage();
 
                currentEventExecute.FakeButtonUpdateGraph.Clicked += 
@@ -6883,48 +7010,25 @@ LogB.Debug("mc finished 5");
 
                new About(progVersion, translator_credits);
        }
-               
-       private void on_button_rj_bells_clicked(object o, EventArgs args) {
-               repetitiveConditionsWin.View(Constants.BellModes.JUMPS, preferences.volumeOn, 
preferences.gstreamer,
-                               preferences.encoderCaptureMainVariable,
-                               preferences.encoderCaptureSecondaryVariable, 
preferences.encoderCaptureSecondaryVariableShow, encoderRhythm);
-       }
 
-       private void on_button_time_bells_clicked(object o, EventArgs args) {
-               repetitiveConditionsWin.View(Constants.BellModes.RUNS, preferences.volumeOn, 
preferences.gstreamer,
-                               preferences.encoderCaptureMainVariable,
-                               preferences.encoderCaptureSecondaryVariable, 
preferences.encoderCaptureSecondaryVariableShow, encoderRhythm);
-       }
-       
        private void on_repetitive_conditions_closed(object o, EventArgs args)
        {
                //update bell color if feedback exists
                Constants.Menuitem_modes m = current_menuitem_mode;
                Pixbuf pixbuf;
 
-               Constants.BellModes bellMode;
+               Constants.BellModes bellMode = getBellMode(m);
                if(m == Constants.Menuitem_modes.JUMPSREACTIVE || m == 
Constants.Menuitem_modes.RUNSINTERVALLIC)
                {
-                       bellMode = Constants.BellModes.JUMPS;
-                       if(m == Constants.Menuitem_modes.RUNSINTERVALLIC)
-                               bellMode = Constants.BellModes.RUNS;
-
                        if(repetitiveConditionsWin.FeedbackActive(bellMode))
                                pixbuf = new Pixbuf (null, Util.GetImagePath(false) + 
"stock_bell_active.png");
                        else
                                pixbuf = new Pixbuf (null, Util.GetImagePath(false) + "stock_bell_none.png");
 
-                       if(m == Constants.Menuitem_modes.JUMPSREACTIVE)
-                               image_jump_reactive_bell.Pixbuf = pixbuf;
-                       else
-                               image_run_interval_bell.Pixbuf = pixbuf;
+                       image_contacts_bell.Pixbuf = pixbuf;
                }
                else if(m == Constants.Menuitem_modes.POWERGRAVITATORY || m == 
Constants.Menuitem_modes.POWERINERTIAL)
                {
-                       bellMode = Constants.BellModes.ENCODERGRAVITATORY;
-                       if(m == Constants.Menuitem_modes.POWERINERTIAL)
-                               bellMode = Constants.BellModes.ENCODERINERTIAL;
-
                        if(repetitiveConditionsWin.FeedbackActive(bellMode))
                                pixbuf = new Pixbuf (null, Util.GetImagePath(false) + 
"stock_bell_active.png");
                        else
@@ -6995,6 +7099,33 @@ LogB.Debug("mc finished 5");
                        //updates preferences object and Sqlite preferences
                        preferences.UpdateEncoderRhythm(encoderRhythm);
                }
+               else if(m == Constants.Menuitem_modes.FORCESENSOR)
+               {
+                       bool feedbackActive = repetitiveConditionsWin.GetForceSensorFeedbackActive;
+                       if(preferences.forceSensorCaptureFeedbackActive != feedbackActive)
+                       {
+                               SqlitePreferences.Update(SqlitePreferences.ForceSensorCaptureFeedbackActive, 
feedbackActive.ToString(), false);
+                               preferences.forceSensorCaptureFeedbackActive = feedbackActive;
+                       }
+
+                       //change the rest of values only if feedback is active
+                       if(feedbackActive)
+                       {
+                               int feedbackAt = repetitiveConditionsWin.GetForceSensorFeedbackAt;
+                               if(preferences.forceSensorCaptureFeedbackAt != feedbackAt)
+                               {
+                                       
SqlitePreferences.Update(SqlitePreferences.ForceSensorCaptureFeedbackAt, feedbackAt.ToString(), false);
+                                       preferences.forceSensorCaptureFeedbackAt = feedbackAt;
+                               }
+
+                               int feedbackRange = repetitiveConditionsWin.GetForceSensorFeedbackRange;
+                               if(preferences.forceSensorCaptureFeedbackRange != feedbackRange)
+                               {
+                                       
SqlitePreferences.Update(SqlitePreferences.ForceSensorCaptureFeedbackRange, feedbackRange.ToString(), false);
+                                       preferences.forceSensorCaptureFeedbackRange = feedbackRange;
+                               }
+                       }
+               }
        }
        
 
@@ -7223,7 +7354,8 @@ LogB.Debug("mc finished 5");
                hbox_jumps.Sensitive = false;
                hbox_jumps_rj.Sensitive = false;
                button_execute_test.Sensitive = false;
-               
+               button_contacts_capture_load.Sensitive = false;
+
                encoderButtonsSensitive(encoderSensEnum.NOPERSON);
                //don't cal personChanged because it will make changes on analyze repetitions and 
currentPerson == null
                //personChanged();
@@ -7250,6 +7382,7 @@ LogB.Debug("mc finished 5");
                hbox_jumps.Sensitive = true;
                hbox_jumps_rj.Sensitive = true;
                button_execute_test.Sensitive = true;
+               button_contacts_capture_load.Sensitive = true;
 
                encoderButtonsSensitive(encoderSensEnum.YESPERSON);
                personChanged();
@@ -7321,7 +7454,7 @@ LogB.Debug("mc finished 5");
                        frame_persons.Sensitive = false;
                
                button_execute_test.Sensitive = false;
-               vbox_contacts_camera.Sensitive = false;
+               hbox_contacts_camera.Sensitive = false;
                
                button_contacts_person_change.Sensitive = false;
                button_encoder_person_change.Sensitive = false;
@@ -7383,7 +7516,7 @@ LogB.Debug("mc finished 5");
                        vbox_persons_bottom.Sensitive = true;
 
                button_execute_test.Sensitive = true;
-               vbox_contacts_camera.Sensitive = true;
+               hbox_contacts_camera.Sensitive = true;
 
                button_contacts_person_change.Sensitive = true;
                button_encoder_person_change.Sensitive = true;
@@ -7465,7 +7598,7 @@ LogB.Debug("mc finished 5");
        private void sensitiveLastTestButtons(bool sensitive)
        {
                LogB.Information("sensitiveLastTestButtons: " + sensitive.ToString());
-               vbox_last_test_buttons.Sensitive = sensitive;
+               //vbox_last_test_buttons.Sensitive = sensitive; TODO:
        }
        /*
         * sensitive GUI on executeAuto methods 
diff --git a/src/gui/chronojumpIcons.cs b/src/gui/chronojumpIcons.cs
index fbe39921..07ad09f0 100644
--- a/src/gui/chronojumpIcons.cs
+++ b/src/gui/chronojumpIcons.cs
@@ -55,6 +55,8 @@ public partial class ChronoJumpWindow
        //[Widget] Gtk.Image image_persons_down;
        [Widget] Gtk.Image image_contacts_exercise;
        [Widget] Gtk.Image image_contacts_exercise_close;
+       [Widget] Gtk.Image image_contacts_capture_load;
+       [Widget] Gtk.Image image_contacts_recalculate;
        [Widget] Gtk.Image image_rest;
        [Widget] Gtk.Image image_all_persons_events;
        [Widget] Gtk.Image image_all_persons_events_h;
@@ -63,6 +65,8 @@ public partial class ChronoJumpWindow
        [Widget] Gtk.Image image_chronopic_connect_contacts;
        [Widget] Gtk.Image image_chronopic_connect_encoder;
        [Widget] Gtk.Image image_button_execute;
+       [Widget] Gtk.Image image_contacts_bell;
+       [Widget] Gtk.Image image_contacts_close_and_capture;
        [Widget] Gtk.Image image_tests_capture;
        [Widget] Gtk.Image image_tests_sprint;
        [Widget] Gtk.Image image_tests_analyze_general;
@@ -80,6 +84,7 @@ public partial class ChronoJumpWindow
        [Widget] Gtk.Image image_add_test4;
        [Widget] Gtk.Image image_add_test5;
        [Widget] Gtk.Image image_test_inspect;
+       [Widget] Gtk.Image image_test_inspect1;
 
        [Widget] Gtk.Image image_selector_start_jumps;
        [Widget] Gtk.Image image_selector_start_runs;
@@ -164,7 +169,6 @@ public partial class ChronoJumpWindow
        //force sensor
        [Widget] Gtk.Image image_selector_start_force_sensor;
        [Widget] Gtk.Image image_force_sensor_adjust_help;
-       [Widget] Gtk.Image image_force_sensor_capture_load;
        [Widget] Gtk.Image image_force_sensor_analyze_load;
        [Widget] Gtk.Image image_force_sensor_tare;
        [Widget] Gtk.Image image_force_sensor_calibrate;
@@ -174,7 +178,6 @@ public partial class ChronoJumpWindow
        [Widget] Gtk.Image image_force_sensor_capture_adjust_close;
        [Widget] Gtk.Image image_force_sensor_analyze_options;
        [Widget] Gtk.Image image_force_sensor_analyze_options_close;
-       [Widget] Gtk.Image image_force_sensor_capture_recalculate;
        [Widget] Gtk.Image image_force_sensor_analyze_analyze;
        [Widget] Gtk.Image image_force_sensor_exercise_edit;
        [Widget] Gtk.Image image_force_sensor_exercise_delete;
@@ -185,15 +188,13 @@ public partial class ChronoJumpWindow
 
        //race encoder
        [Widget] Gtk.Image image_race_encoder_open_folder;
-       [Widget] Gtk.Image image_race_encoder_capture_load;
-       [Widget] Gtk.Image image_race_encoder_capture_recalculate;
        [Widget] Gtk.Image image_run_encoder_exercise_edit;
        [Widget] Gtk.Image image_run_encoder_exercise_add;
        [Widget] Gtk.Image image_run_encoder_exercise_delete;
        [Widget] Gtk.Image image_menuitem_runEncoder_session_overview;
 
        //video play icons
-       [Widget] Gtk.Image image_video_play_this_test;
+       [Widget] Gtk.Image image_video_play_this_test_contacts;
        [Widget] Gtk.Image image_video_play_this_test_encoder;
        [Widget] Gtk.Image image_video_play_selected_jump;
        [Widget] Gtk.Image image_video_play_selected_jump_rj;
@@ -202,7 +203,7 @@ public partial class ChronoJumpWindow
        [Widget] Gtk.Image image_video_play_selected_pulse;
        [Widget] Gtk.Image image_video_play_selected_reaction_time;
        [Widget] Gtk.Image image_video_play_selected_multi_chronopic;
-       [Widget] Gtk.Image image_video_preview;
+       [Widget] Gtk.Image image_video_contacts_preview;
        [Widget] Gtk.Image image_video_encoder_preview;
 
        [Widget] Gtk.Image image_encoder_capture_curves_save;
@@ -320,6 +321,7 @@ public partial class ChronoJumpWindow
                pixbuf = new Pixbuf (null, Util.GetImagePath(false) + "image_capture.png");
                image_tests_capture.Pixbuf = pixbuf;
                image_mode_encoder_capture.Pixbuf = pixbuf;
+               image_contacts_close_and_capture.Pixbuf = pixbuf;
 
                pixbuf = new Pixbuf (null, Util.GetImagePath(false) + "image_sprint.png");
                image_tests_sprint.Pixbuf = pixbuf;
@@ -356,6 +358,7 @@ public partial class ChronoJumpWindow
 
                pixbuf = new Pixbuf (null, Util.GetImagePath(false) + "image_test_inspect.png");
                image_test_inspect.Pixbuf = pixbuf;
+               image_test_inspect1.Pixbuf = pixbuf;
 
                pixbuf = new Pixbuf (null, Util.GetImagePath(false) + "image_chronopic_connect.png");
                image_chronopic_connect_contacts.Pixbuf = pixbuf;
@@ -363,8 +366,7 @@ public partial class ChronoJumpWindow
 
                pixbuf = new Pixbuf (null, Util.GetImagePath(false) + "image_recalculate.png");
                image_recalculate.Pixbuf = pixbuf;
-               image_race_encoder_capture_recalculate.Pixbuf = pixbuf;
-               image_force_sensor_capture_recalculate.Pixbuf = pixbuf;
+               image_contacts_recalculate.Pixbuf = pixbuf;
 
                pixbuf = new Pixbuf (null, Util.GetImagePath(false) + "image_build_24.png");
                image_encoder_configuration.Pixbuf = pixbuf;
@@ -389,9 +391,8 @@ public partial class ChronoJumpWindow
                image_session_open.Pixbuf = pixbuf;
                image_encoder_capture_open.Pixbuf = pixbuf;
                image_encoder_capture_open1.Pixbuf = pixbuf;
-               image_force_sensor_capture_load.Pixbuf = pixbuf;
+               image_contacts_capture_load.Pixbuf = pixbuf;
                image_force_sensor_analyze_load.Pixbuf = pixbuf;
-               image_race_encoder_capture_load.Pixbuf = pixbuf;
 
                pixbuf = new Pixbuf (null, Util.GetImagePath(false) + "zero.png");
                image_force_sensor_tare.Pixbuf = pixbuf;
@@ -458,16 +459,17 @@ public partial class ChronoJumpWindow
                image_encoder_calibrate.Pixbuf = pixbuf;
                image_encoder_recalibrate.Pixbuf = pixbuf;
 
-               image_video_yes.Pixbuf = new Pixbuf (null, Util.GetImagePath(false) + "videocamera_on.png");
+               image_video_contacts_yes1.Pixbuf = new Pixbuf (null, Util.GetImagePath(false) + 
"videocamera_on.png");
+               image_video_contacts_yes.Pixbuf = new Pixbuf (null, Util.GetImagePath(false) + 
"videocamera_on.png");
                image_video_encoder_yes.Pixbuf = new Pixbuf (null, Util.GetImagePath(false) + 
"videocamera_on.png");
                image_video_encoder_yes1.Pixbuf = new Pixbuf (null, Util.GetImagePath(false) + 
"videocamera_on.png");
-               image_video_no.Pixbuf = new Pixbuf (null, Util.GetImagePath(false) + "videocamera_off.png");
+               image_video_contacts_no.Pixbuf = new Pixbuf (null, Util.GetImagePath(false) + 
"videocamera_off.png");
                image_video_encoder_no.Pixbuf = new Pixbuf (null, Util.GetImagePath(false) + 
"videocamera_off.png");
 
                image_camera_at_boot.Pixbuf = new Pixbuf (null, Util.GetImagePath(false) + 
"videocamera_off.png");
 
                pixbuf = new Pixbuf (null, Util.GetImagePath(false) + "image_photo_preview.png");
-               image_video_preview.Pixbuf = pixbuf;
+               image_video_contacts_preview.Pixbuf = pixbuf;
                image_video_encoder_preview.Pixbuf = pixbuf;
 
                /*
@@ -581,8 +583,7 @@ public partial class ChronoJumpWindow
                //image_encoder_capture_open.Pixbuf = pixbuf;
 
                pixbuf = new Pixbuf (null, Util.GetImagePath(false) + "stock_bell_none.png");
-               image_jump_reactive_bell.Pixbuf = pixbuf;
-               image_run_interval_bell.Pixbuf = pixbuf;
+               image_contacts_bell.Pixbuf = pixbuf;
                image_encoder_bell.Pixbuf = pixbuf;
                
                pixbuf = new Pixbuf (null, Util.GetImagePath(false) + "preferences-system.png");
@@ -609,10 +610,9 @@ public partial class ChronoJumpWindow
                image_encoder_exercise_delete.Pixbuf = pixbuf;
                image_force_sensor_exercise_delete.Pixbuf = pixbuf;
                image_run_encoder_exercise_delete.Pixbuf = pixbuf;
-
-
                image_button_cancel.Pixbuf = pixbuf;
                image_encoder_capture_cancel.Pixbuf = pixbuf;
+               image_encoder_signal_delete.Pixbuf = pixbuf;
 
                pixbuf = new Pixbuf (null, Util.GetImagePath(false) + "image_cancel.png");
                image_encoder_analyze_cancel.Pixbuf = pixbuf;
@@ -631,7 +631,7 @@ public partial class ChronoJumpWindow
 
                //video play icons
                pixbuf = new Pixbuf (null, Util.GetImagePath(false) + "video_play.png");
-               image_video_play_this_test.Pixbuf = pixbuf;
+               image_video_play_this_test_contacts.Pixbuf = pixbuf;
                image_video_play_this_test_encoder.Pixbuf = pixbuf;
                image_video_play_selected_jump.Pixbuf = pixbuf;
                image_video_play_selected_jump_rj.Pixbuf = pixbuf;
@@ -694,9 +694,6 @@ public partial class ChronoJumpWindow
                pixbuf = new Pixbuf (null, Util.GetImagePath(false) + "image_email.png");
                image_encoder_analyze_image_compujump_send_email_send.Pixbuf = pixbuf;
 
-               pixbuf = new Pixbuf (null, Util.GetImagePath(false) + "stock_delete.png");
-               image_encoder_signal_delete.Pixbuf = pixbuf;
-
                pixbuf = new Pixbuf (null, Util.GetImagePath(false) + "image_analyze_general.png");
                image_tests_analyze_general.Pixbuf = pixbuf;
 
diff --git a/src/gui/encoder.cs b/src/gui/encoder.cs
index 8afa82cd..a9b0d7cf 100644
--- a/src/gui/encoder.cs
+++ b/src/gui/encoder.cs
@@ -621,16 +621,7 @@ public partial class ChronoJumpWindow
        
        private void on_button_encoder_bells_clicked(object o, EventArgs args)
        {
-               if(current_menuitem_mode == Constants.Menuitem_modes.POWERGRAVITATORY)
-                       repetitiveConditionsWin.View(Constants.BellModes.ENCODERGRAVITATORY,
-                                       preferences.volumeOn, preferences.gstreamer,
-                                       preferences.encoderCaptureMainVariable,
-                                       preferences.encoderCaptureSecondaryVariable, 
preferences.encoderCaptureSecondaryVariableShow, encoderRhythm);
-               else
-                       repetitiveConditionsWin.View(Constants.BellModes.ENCODERINERTIAL,
-                                       preferences.volumeOn, preferences.gstreamer,
-                                       preferences.encoderCaptureMainVariable,
-                                       preferences.encoderCaptureSecondaryVariable, 
preferences.encoderCaptureSecondaryVariableShow, encoderRhythm);
+               repetitiveConditionsWin.View(getBellMode(current_menuitem_mode), preferences, encoderRhythm);
        }
 
        /*
@@ -1222,7 +1213,6 @@ public partial class ChronoJumpWindow
        {
                eCapture.Finish();
                encoderProcessFinish = true;
-                       
        }
        void on_button_encoder_capture_finish_cont_clicked (object o, EventArgs args) 
        {
diff --git a/src/gui/eventExecute.cs b/src/gui/eventExecute.cs
index 80902af1..73658c8f 100644
--- a/src/gui/eventExecute.cs
+++ b/src/gui/eventExecute.cs
@@ -111,6 +111,7 @@ public partial class ChronoJumpWindow
        [Widget] Gtk.Notebook notebook_results_data;
        
        [Widget] Gtk.DrawingArea event_execute_drawingarea;
+       [Widget] Gtk.Frame frame_run_simple_double_contacts;
        [Widget] Gtk.DrawingArea event_execute_drawingarea_run_simple_double_contacts;
        /*
        [Widget] Gtk.Box hbox_combo_graph_results_width;
@@ -249,7 +250,7 @@ public partial class ChronoJumpWindow
        }
        private ExecutingGraphData event_execute_prepareForTest () 
        {
-               checkbutton_video.Sensitive = false;
+               checkbutton_video_contacts.Sensitive = false;
 
                ExecutingGraphData executingGraphData = new ExecutingGraphData(
                                event_execute_button_cancel, event_execute_button_finish, 
@@ -2332,10 +2333,10 @@ public partial class ChronoJumpWindow
        {
                hideButtons();
 
-               checkbutton_video.Sensitive = true;
+               checkbutton_video_contacts.Sensitive = true;
                if(preferences.videoOn) {       
                        label_video_feedback.Text = "";
-                       button_video_preview.Visible = true;
+                       button_video_contacts_preview.Visible = true;
                        //capturer.ClickStop();
                        //videoCapturePrepare(false); //if error, show message
                }
@@ -2488,11 +2489,11 @@ public partial class ChronoJumpWindow
        {
                hideButtons();
                
-               checkbutton_video.Sensitive = true;
+               checkbutton_video_contacts.Sensitive = true;
                if(preferences.videoOn) {
                        //it will be recorded on temp, but chronojump will move it to chronojump/multimedia 
folders
                        label_video_feedback.Text = "";
-                       button_video_preview.Visible = true;
+                       button_video_contacts_preview.Visible = true;
                        //capturer.ClickStop();
                        //videoCapturePrepare(false); //if error, show message
                }
diff --git a/src/gui/forceSensor.cs b/src/gui/forceSensor.cs
index e6ef1e1a..b5968a27 100644
--- a/src/gui/forceSensor.cs
+++ b/src/gui/forceSensor.cs
@@ -77,15 +77,10 @@ public partial class ChronoJumpWindow
        [Widget] Gtk.RadioButton radio_force_sensor_laterality_both;
        [Widget] Gtk.RadioButton radio_force_sensor_laterality_l;
        [Widget] Gtk.RadioButton radio_force_sensor_laterality_r;
-       [Widget] Gtk.TextView textview_force_sensor_capture_comment;
        [Widget] Gtk.HBox hbox_force_sensor_lat_and_comments;
-       [Widget] Gtk.Alignment alignment_force_sensor_adjust;
        [Widget] Gtk.HBox hbox_force_sensor_adjust_actions;
-       [Widget] Gtk.Label label_force_sensor_adjust;
        [Widget] Gtk.Button button_force_sensor_tare;
        [Widget] Gtk.Button button_force_sensor_calibrate;
-       [Widget] Gtk.Button button_force_sensor_capture_recalculate;
-       [Widget] Gtk.Button button_force_sensor_save_comment;
        [Widget] Gtk.Label label_force_sensor_value_max;
        [Widget] Gtk.Label label_force_sensor_value;
        [Widget] Gtk.Label label_force_sensor_value_min;
@@ -93,11 +88,6 @@ public partial class ChronoJumpWindow
        [Widget] Gtk.SpinButton spin_force_sensor_calibration_kg_value;
        [Widget] Gtk.Button button_force_sensor_image_save_signal;
        [Widget] Gtk.DrawingArea force_capture_drawingarea;
-       [Widget] Gtk.Alignment alignment_force_capture_feedback;
-       [Widget] Gtk.CheckButton check_force_sensor_capture_feedback;
-       [Widget] Gtk.HBox hbox_force_sensor_capture_feedback;
-       [Widget] Gtk.SpinButton spin_force_sensor_capture_feedback_at;
-       [Widget] Gtk.SpinButton spin_force_sensor_capture_feedback_range;
 
        ForceSensorExerciseWindow forceSensorExerciseWin;
        ForceSensorElasticBandsWindow forceSensorElasticBandsWin;
@@ -408,9 +398,11 @@ public partial class ChronoJumpWindow
                {
                        forceSensorButtonsSensitive(false);
                        sensitiveLastTestButtons(false);
+                       contactsShowCaptureDoingButtons(true);
                        image_force_sensor_graph.Sensitive = false; //unsensitivize the RFD image (can 
contain info of previous data)
 
-                       textview_force_sensor_capture_comment.Buffer.Text = "";
+                       //textview_force_sensor_capture_comment.Buffer.Text = "";
+                       textview_contacts_signal_comment.Buffer.Text = "";
 
                        if(currentForceSensorExercise.TareBeforeCapture)
                        {
@@ -440,11 +432,7 @@ public partial class ChronoJumpWindow
                hbox_force_sensor_lat_and_comments.Sensitive = sensitive;
                button_execute_test.Sensitive = sensitive;
                button_force_sensor_analyze_load.Sensitive = sensitive;
-
-               //right now cannot be changed dinamically while capturing
-               alignment_force_capture_feedback.Sensitive = sensitive;
-
-               vbox_contacts_camera.Sensitive = sensitive;
+               hbox_contacts_camera.Sensitive = sensitive;
 
                //other gui buttons
                main_menu.Sensitive = sensitive;
@@ -454,11 +442,6 @@ public partial class ChronoJumpWindow
                hbox_chronopics_and_more.Sensitive = sensitive;
        }
 
-       private void on_check_force_sensor_capture_feedback_toggled (object o, EventArgs args)
-       {
-               hbox_force_sensor_capture_feedback.Sensitive = check_force_sensor_capture_feedback.Active;
-       }
-
        private void forceSensorPersonChanged()
        {
                blankForceSensorInterface();
@@ -467,9 +450,8 @@ public partial class ChronoJumpWindow
        {
                currentForceSensor = new ForceSensor();
 
-               button_force_sensor_capture_recalculate.Sensitive = false;
-               textview_force_sensor_capture_comment.Buffer.Text = "";
-               button_force_sensor_save_comment.Sensitive = false;
+               button_contacts_recalculate.Sensitive = false;
+               textview_contacts_signal_comment.Buffer.Text = "";
                notebook_force_sensor_analyze.Sensitive = false;
                button_force_sensor_analyze_options.Sensitive = false;
                button_force_sensor_analyze_analyze.Sensitive = false;
@@ -499,15 +481,17 @@ public partial class ChronoJumpWindow
 
                if(forceOtherThread.IsAlive)
                {
+                       /*
                        if(forceSensorOtherMode == forceSensorOtherModeEnum.TARE ||
                                forceSensorOtherMode == forceSensorOtherModeEnum.CALIBRATE)
-                               label_force_sensor_adjust.Text = forceSensorOtherMessage + secondsStr;
+                               event_execute_label_message.Text = forceSensorOtherMessage + secondsStr;
                        else
+                       */
                                event_execute_label_message.Text = forceSensorOtherMessage + secondsStr;
                }
                else
                {
-                       label_force_sensor_adjust.Text = forceSensorOtherMessage;
+                       event_execute_label_message.Text = forceSensorOtherMessage;
                        LogB.ThreadEnding();
 
                        if(forceSensorOtherMode == forceSensorOtherModeEnum.TARE ||
@@ -781,7 +765,7 @@ public partial class ChronoJumpWindow
 
                forcePaintHVLines(ForceSensorGraphs.CAPTURE, fscPoints.RealHeightG, 
ForceSensorCapturePoints.DefaultRealHeightGNeg, 10, false);
                //draw horizontal rectangle of feedback
-               if(check_force_sensor_capture_feedback.Active)
+               if(preferences.forceSensorCaptureFeedbackActive)
                        forceSensorSignalPlotFeedbackRectangle(fscPoints,
                                        force_capture_drawingarea, force_capture_pixmap, 
pen_yellow_force_capture);
 
@@ -889,7 +873,8 @@ public partial class ChronoJumpWindow
                forceSensorTimeStart = DateTime.Now; //to have an active count of capture time
                forceSensorTimeStartCapture = forceSensorTimeStart; //to have same DateTime on filename and 
on sql datetime
                capturingForce = arduinoCaptureStatus.CAPTURING;
-               string captureComment = 
UtilGtk.TextViewGetCommentValidSQL(textview_force_sensor_capture_comment);
+//             string captureComment = 
UtilGtk.TextViewGetCommentValidSQL(textview_force_sensor_capture_comment);
+               string captureComment = UtilGtk.TextViewGetCommentValidSQL(textview_contacts_signal_comment);
 
                Util.CreateForceSensorSessionDirIfNeeded (currentSession.UniqueID);
 
@@ -1048,7 +1033,7 @@ LogB.Information(" fs B ");
                if(! forceCaptureThread.IsAlive || forceProcessFinish || forceProcessCancel || 
forceProcessError)
                {
 LogB.Information(" fs C ");
-                       button_video_play_this_test.Sensitive = false;
+                       button_video_play_this_test_contacts.Sensitive = false;
                        if(forceProcessFinish)
                        {
                                if(capturingForce != arduinoCaptureStatus.COPIED_TO_TMP)
@@ -1086,11 +1071,12 @@ LogB.Information(" fs C ");
                                                                currentForceSensor.UniqueID);
                                                currentForceSensor.UpdateSQL(false);
                                                label_video_feedback.Text = "";
-                                               button_video_play_this_test.Sensitive = true;
+                                               button_video_play_this_test_contacts.Sensitive = true;
                                        }
 
                                        Thread.Sleep (250); //Wait a bit to ensure is copied
                                        sensitiveLastTestButtons(true);
+                                       contactsShowCaptureDoingButtons(false);
 
                                        
fscPoints.InitRealWidthHeight(preferences.forceSensorCaptureWidthSeconds);
 
@@ -1105,8 +1091,7 @@ LogB.Information(" fs C ");
                                                forceSensorZoomDefaultValues();
                                                forceSensorDoGraphAI();
                                        }
-                                       button_force_sensor_capture_recalculate.Sensitive = true;
-                                       button_force_sensor_save_comment.Sensitive = true;
+                                       button_contacts_recalculate.Sensitive = true;
                                        button_delete_last_test.Sensitive = true;
                                        force_capture_drawingarea.Sensitive = true;
                                        button_force_sensor_image_save_signal.Sensitive = true;
@@ -1125,6 +1110,7 @@ LogB.Information(" fs C ");
                                //stop the camera (and do not save)
                                webcamEnd (Constants.TestTypes.FORCESENSOR, -1);
                                sensitiveLastTestButtons(false);
+                               contactsShowCaptureDoingButtons(false);
 
                                if(forceProcessCancel)
                                        event_execute_label_message.Text = "Cancelled.";
@@ -1136,8 +1122,7 @@ LogB.Information(" fs C ");
                                button_force_sensor_image_save_rfd_auto.Sensitive = false;
                                button_force_sensor_image_save_rfd_manual.Sensitive = false;
                                checkbutton_force_sensor_ai_b.Sensitive = false;
-                               button_force_sensor_capture_recalculate.Sensitive = false;
-                               button_force_sensor_save_comment.Sensitive = false;
+                               button_contacts_recalculate.Sensitive = false;
                                button_delete_last_test.Sensitive = false;
                        }
                        else
@@ -1221,7 +1206,7 @@ LogB.Information(" fs I ");
 
                                forcePaintHVLines(ForceSensorGraphs.CAPTURE, fscPoints.RealHeightG, 
forceSensorValues.ForceMin * 2, fscPoints.RealWidthG, false);
                                //draw horizontal rectangle of feedback
-                               if(check_force_sensor_capture_feedback.Active)
+                               if(preferences.forceSensorCaptureFeedbackActive)
                                        forceSensorSignalPlotFeedbackRectangle(fscPoints,
                                                        force_capture_drawingarea, force_capture_pixmap, 
pen_yellow_force_capture);
 
@@ -1321,7 +1306,7 @@ LogB.Information(" fs R ");
                LogB.Information(" fs N0 ");
 
                UtilGtk.ErasePaint(force_capture_drawingarea, force_capture_pixmap);
-               if(check_force_sensor_capture_feedback.Active)
+               if(preferences.forceSensorCaptureFeedbackActive)
                        forceSensorSignalPlotFeedbackRectangle(fscPoints,
                                        force_capture_drawingarea, force_capture_pixmap, 
pen_yellow_force_capture);
 
@@ -1436,7 +1421,7 @@ LogB.Information(" fs R ");
 
        //this is called when user clicks on load signal
        //very based on: on_encoder_load_signal_clicked () future have some inheritance
-       private void on_button_force_sensor_load_clicked (object o, EventArgs args)
+       private void force_sensor_load ()
        {
                List<ForceSensor> data = SqliteForceSensor.Select(false, -1, currentPerson.UniqueID, 
currentSession.UniqueID);
 
@@ -1538,7 +1523,8 @@ LogB.Information(" fs R ");
                setForceSensorCaptureOptions(fs.CaptureOption);
 
                setLaterality(fs.Laterality);
-               textview_force_sensor_capture_comment.Buffer.Text = fs.Comments;
+               //textview_force_sensor_capture_comment.Buffer.Text = fs.Comments;
+               textview_contacts_signal_comment.Buffer.Text = fs.Comments;
 
                assignCurrentForceSensorExercise();
 
@@ -1570,7 +1556,7 @@ LogB.Information(" fs R ");
                forceSensorCopyTempAndDoGraphs(forceSensorGraphsEnum.SIGNAL);
                image_force_sensor_graph.Sensitive = false; //unsensitivize the RFD image (can contain info 
of previous data)
 
-               button_video_play_this_test.Sensitive = (fs.VideoURL != "");
+               button_video_play_this_test_contacts.Sensitive = (fs.VideoURL != "");
                sensitiveLastTestButtons(true);
 
                //if drawingarea has still not shown, don't paint graph because GC screen is not defined
@@ -1580,8 +1566,7 @@ LogB.Information(" fs R ");
                        forceSensorDoGraphAI();
                }
                //event_execute_label_message.Text = "Loaded: " + 
Util.GetLastPartOfPath(filechooser.Filename);
-               button_force_sensor_capture_recalculate.Sensitive = true;
-               button_force_sensor_save_comment.Sensitive = true;
+               button_contacts_recalculate.Sensitive = true;
                force_capture_drawingarea.Sensitive = true;
                notebook_force_sensor_analyze.Sensitive = true;
                button_force_sensor_analyze_options.Sensitive = true;
@@ -1714,7 +1699,7 @@ LogB.Information(" fs R ");
        // ---- end of forceSensorDeleteTest stuff -------
 
 
-       private void on_button_force_sensor_capture_recalculate_clicked (object o, EventArgs args)
+       private void force_sensor_recalculate ()
        {
                if(! Util.FileExists(lastForceSensorFullPath))
                {
@@ -1741,7 +1726,8 @@ LogB.Information(" fs R ");
                currentForceSensor.ExerciseName = currentForceSensorExercise.Name; //just in case
                currentForceSensor.CaptureOption = getForceSensorCaptureOptions();
                currentForceSensor.Laterality = getLaterality(false);
-               currentForceSensor.Comments = 
UtilGtk.TextViewGetCommentValidSQL(textview_force_sensor_capture_comment);
+               //currentForceSensor.Comments = 
UtilGtk.TextViewGetCommentValidSQL(textview_force_sensor_capture_comment);
+               currentForceSensor.Comments = 
UtilGtk.TextViewGetCommentValidSQL(textview_contacts_signal_comment);
 
                double stiffness;
                string stiffnessString;
@@ -1765,12 +1751,6 @@ LogB.Information(" fs R ");
                currentForceSensor.UpdateSQL(false);
        }
 
-       private void on_button_force_sensor_save_comment_clicked (object o, EventArgs args)
-       {
-               currentForceSensor.Comments = 
UtilGtk.TextViewGetCommentValidSQL(textview_force_sensor_capture_comment);
-               currentForceSensor.UpdateSQLJustComments(false);
-       }
-
        private void on_button_force_sensor_analyze_analyze_clicked (object o, EventArgs args)
        {
                if(! Util.FileExists(lastForceSensorFullPath))
@@ -1939,7 +1919,7 @@ LogB.Information(" fs R ");
                                false);
 
                //draw horizontal rectangle of feedback
-               if(check_force_sensor_capture_feedback.Active)
+               if(preferences.forceSensorCaptureFeedbackActive)
                        forceSensorSignalPlotFeedbackRectangle(fscPoints,
                                        force_capture_drawingarea, force_capture_pixmap, 
pen_yellow_force_capture);
 
@@ -1971,11 +1951,8 @@ LogB.Information(" fs R ");
 
        private void setForceSensorTopAtOperationStart()
        {
-               int at = Convert.ToInt32(spin_force_sensor_capture_feedback_at.Value);
-               int range = Convert.ToInt32(spin_force_sensor_capture_feedback_range.Value);
-
-               if(check_force_sensor_capture_feedback.Active)
-                       forceSensorTopRectangleAtOperationStart = Convert.ToInt32(at + range /2);
+               if(preferences.forceSensorCaptureFeedbackActive)
+                       forceSensorTopRectangleAtOperationStart = 
Convert.ToInt32(preferences.forceSensorCaptureFeedbackAt + preferences.forceSensorCaptureFeedbackRange /2);
                else
                        forceSensorTopRectangleAtOperationStart = 0;
        }
@@ -1993,8 +1970,8 @@ LogB.Information(" fs R ");
                        Gtk.DrawingArea drawingarea, Gdk.Pixmap pixmap, Gdk.GC pen_rectangle)
        {
                //draw horizontal rectangle of feedback
-               int fbkNValue = Convert.ToInt32(spin_force_sensor_capture_feedback_at.Value); //feedback 
Newtons value
-               int fbkNRange = Convert.ToInt32(spin_force_sensor_capture_feedback_range.Value); //feedback 
Newtons range (height of the rectangle)
+               int fbkNValue = preferences.forceSensorCaptureFeedbackAt; //feedback Newtons value
+               int fbkNRange = preferences.forceSensorCaptureFeedbackRange; //feedback Newtons range (height 
of the rectangle)
 
                int fbkGraphCenter = points.GetForceInPx(fbkNValue);
                int fbkGraphRectHeight = points.GetForceInPx(0) - points.GetForceInPx(fbkNRange);
@@ -2247,38 +2224,29 @@ LogB.Information(" fs R ");
 
        private void on_button_force_sensor_adjust_clicked (object o, EventArgs args)
        {
-               hbox_force_capture_buttons.Sensitive = false;
-               button_force_sensor_adjust.Sensitive = false;
-               alignment_force_capture_feedback.Sensitive = false;
+               button_force_sensor_adjust.Sensitive = false; //to not be called again
 
-               button_force_sensor_adjust.Visible = false;
-               hbox_force_sensor_lat_and_comments.Visible = false;
-               notebook_execute.Visible = false;
-               viewport_chronopics.Visible = false;
-               alignment_force_sensor_adjust.Visible = true;
+               //hbox_force_capture_buttons.Sensitive = false;
+               notebook_contacts_execute_or_instructions.Sensitive = false;
 
-               notebook_options_at_execute_button.CurrentPage = 2;
+               viewport_chronopics.Visible = false;
+               notebook_contacts_capture_doing_wait.CurrentPage = 3;
 
                forceSensorCaptureAdjustSensitivity(false);
-               label_force_sensor_adjust.Text = Catalog.GetString("If you want to calibrate, please tare 
first.");
-               event_execute_label_message.Text = "";
+               event_execute_label_message.Text = Catalog.GetString("If you want to calibrate, please tare 
first.");
        }
        private void on_button_force_sensor_adjust_close_clicked (object o, EventArgs args)
        {
-               hbox_force_capture_buttons.Sensitive = true;
                button_force_sensor_adjust.Sensitive = true;
-               alignment_force_capture_feedback.Sensitive = true;
 
-               button_force_sensor_adjust.Visible = true;
-               hbox_force_sensor_lat_and_comments.Visible = true;
-               notebook_execute.Visible = true;
-               viewport_chronopics.Visible = true;
-               alignment_force_sensor_adjust.Visible = false;
+               //hbox_force_capture_buttons.Sensitive = true;
+               notebook_contacts_execute_or_instructions.Sensitive = true;
 
-               notebook_options_at_execute_button.CurrentPage = 0;
+               viewport_chronopics.Visible = true;
+               notebook_contacts_capture_doing_wait.CurrentPage = 0;
 
                forceSensorCaptureAdjustSensitivity(true);
-               label_force_sensor_adjust.Text = "";
+               event_execute_label_message.Text = "";
        }
 
        private void forceSensorCaptureAdjustSensitivity(bool s) //s for sensitive. When adjusting s = false
diff --git a/src/gui/forceSensorAnalyze.cs b/src/gui/forceSensorAnalyze.cs
index de901e6f..8a18d878 100644
--- a/src/gui/forceSensorAnalyze.cs
+++ b/src/gui/forceSensorAnalyze.cs
@@ -887,7 +887,7 @@ public partial class ChronoJumpWindow
                        button_force_sensor_analyze_AB_save.Visible = true;
 
                //draw horizontal rectangle of feedback
-               if(check_force_sensor_capture_feedback.Active)
+               if(preferences.forceSensorCaptureFeedbackActive)
                        forceSensorSignalPlotFeedbackRectangle(fsAI.FscAIPoints, force_sensor_ai_drawingarea, 
force_sensor_ai_pixmap, pen_yellow_light_force_ai);
 
                // 1) create paintPoints
@@ -1442,14 +1442,14 @@ public partial class ChronoJumpWindow
                        // 11) calculate variability
                        double variability = 0;
                        double feedbackDiff = 0;
-                       int feedbackF = Convert.ToInt32(spin_force_sensor_capture_feedback_at.Value);
+                       int feedbackF = preferences.forceSensorCaptureFeedbackAt;
 
                        fsAI.CalculateVariabilityAndAccuracy(countA, countB, feedbackF, out variability, out 
feedbackDiff);
 
                        label_force_sensor_ai_variability_values.Text = Math.Round(variability, 3).ToString();
 
                        // 12) calculate Accuracy (Feedback difference)
-                       if(check_force_sensor_capture_feedback.Active && feedbackF > 0)
+                       if(preferences.forceSensorCaptureFeedbackActive && feedbackF > 0)
                        {
                                label_force_sensor_ai_feedback_values.Text = Math.Round(feedbackDiff, 
3).ToString();
                                vbox_force_sensor_ai_feedback.Visible = true;
diff --git a/src/gui/jump.cs b/src/gui/jump.cs
index 543800df..56866210 100644
--- a/src/gui/jump.cs
+++ b/src/gui/jump.cs
@@ -988,7 +988,6 @@ public partial class ChronoJumpWindow
 
        //slCMJ 
        [Widget] Gtk.Box hbox_extra_window_jumps_single_leg_radios;
-       [Widget] Gtk.Notebook notebook_options_at_execute_button;
        [Widget] Gtk.RadioButton extra_window_jumps_radiobutton_single_leg_mode_vertical;
        [Widget] Gtk.RadioButton extra_window_jumps_radiobutton_single_leg_mode_horizontal;
        [Widget] Gtk.RadioButton extra_window_jumps_radiobutton_single_leg_dominance_this_limb;
@@ -1490,7 +1489,7 @@ public partial class ChronoJumpWindow
                hbox_extra_window_jumps_single_leg_radios.Sensitive = true;
 
                //hide slCMJ distance stuff and show button execute test again
-               notebook_options_at_execute_button.CurrentPage = 0;
+               notebook_contacts_capture_doing_wait.CurrentPage = 0;
        }
 
 }
diff --git a/src/gui/person.cs b/src/gui/person.cs
index 16d04cb7..1403fdab 100644
--- a/src/gui/person.cs
+++ b/src/gui/person.cs
@@ -884,7 +884,7 @@ public class PersonAddModifyWindow
        private string sex = Constants.M;
        private double weightIni;
        int pDN;
-       Gtk.CheckButton app1_checkbutton_video;
+       Gtk.CheckButton app1_checkbutton_video_contacts;
        
        private int serverUniqueID;
 
@@ -1221,7 +1221,7 @@ public class PersonAddModifyWindow
        static public PersonAddModifyWindow Show (Gtk.Window parent, 
                        Session mySession, Person currentPerson, int pDN, 
                        //Gtk.CheckButton app1_checkbutton_video, bool showCapturePhoto,
-                       Gtk.CheckButton app1_checkbutton_video,
+                       Gtk.CheckButton app1_checkbutton_video_contacts,
                        string videoDevice, string videoDevicePixelFormat, string videoDeviceResolution, 
string videoDeviceFramerate,
                        bool compujump)
        {
@@ -1231,7 +1231,7 @@ public class PersonAddModifyWindow
                }
 
                PersonAddModifyWindowBox.pDN = pDN;
-               PersonAddModifyWindowBox.app1_checkbutton_video = app1_checkbutton_video;
+               PersonAddModifyWindowBox.app1_checkbutton_video_contacts = app1_checkbutton_video_contacts;
                PersonAddModifyWindowBox.videoDevice = videoDevice;
                PersonAddModifyWindowBox.videoDevicePixelFormat = videoDevicePixelFormat;
                PersonAddModifyWindowBox.videoDeviceResolution = videoDeviceResolution;
diff --git a/src/gui/repetitiveConditions.cs b/src/gui/repetitiveConditions.cs
index e79009e2..d61f61ec 100644
--- a/src/gui/repetitiveConditions.cs
+++ b/src/gui/repetitiveConditions.cs
@@ -127,6 +127,7 @@ public class RepetitiveConditionsWindow
        [Widget] Gtk.Label label_test_sound_result;
        [Widget] Gtk.Button button_close;
 
+       [Widget] Gtk.HBox hbox_test_bells;
        //bells good (green)
        [Widget] Gtk.Image image_repetitive_best_tf_tc;
        [Widget] Gtk.Image image_repetitive_best_time;
@@ -184,6 +185,12 @@ public class RepetitiveConditionsWindow
        [Widget] Gtk.HBox hbox_rhythm_rest_reps_value;
        [Widget] Gtk.CheckButton check_rhythm_rest_reps;
 
+       //forceSensor
+       [Widget] Gtk.VBox vbox_force_capture_feedback;
+       [Widget] Gtk.CheckButton check_force_sensor_capture_feedback;
+       [Widget] Gtk.HBox hbox_force_sensor_capture_feedback;
+       [Widget] Gtk.SpinButton spin_force_sensor_capture_feedback_at;
+       [Widget] Gtk.SpinButton spin_force_sensor_capture_feedback_range;
 
        const int FEEDBACKPAGE = 0;
        const int RHYTHMPAGE = 1;
@@ -237,29 +244,33 @@ public class RepetitiveConditionsWindow
                
                return RepetitiveConditionsWindowBox;
        }
-       
-       public void View (Constants.BellModes bellMode, bool volumeOn, Preferences.GstreamerTypes gstreamer,
-                       Constants.EncoderVariablesCapture encoderMainVariable,
-                       Constants.EncoderVariablesCapture encoderSecondaryVariable,
-                       bool encoderSecondaryVariableShow,
-                       EncoderRhythm encoderRhythm)
+
+       public void View (Constants.BellModes bellMode, Preferences preferences, EncoderRhythm encoderRhythm)
        {
                //when user "deleted_event" the window
                if (RepetitiveConditionsWindowBox == null) {
                        RepetitiveConditionsWindowBox = new RepetitiveConditionsWindow (); 
                }
-               RepetitiveConditionsWindowBox.showWidgets(bellMode, encoderMainVariable, 
encoderSecondaryVariable, encoderSecondaryVariableShow, encoderRhythm);
+               RepetitiveConditionsWindowBox.showWidgets(bellMode,
+                               preferences.encoderCaptureMainVariable, 
preferences.encoderCaptureSecondaryVariable,
+                               preferences.encoderCaptureSecondaryVariableShow, encoderRhythm,
+                               preferences.forceSensorCaptureFeedbackActive,
+                               preferences.forceSensorCaptureFeedbackAt,
+                               preferences.forceSensorCaptureFeedbackRange);
 
                RepetitiveConditionsWindowBox.repetitive_conditions.Show ();
-               RepetitiveConditionsWindowBox.volumeOn = volumeOn;
-               RepetitiveConditionsWindowBox.gstreamer = gstreamer;
+               RepetitiveConditionsWindowBox.volumeOn = preferences.volumeOn;
+               RepetitiveConditionsWindowBox.gstreamer = preferences.gstreamer;
        }
 
        void showWidgets(Constants.BellModes bellMode,
                        Constants.EncoderVariablesCapture encoderMainVariable,
                        Constants.EncoderVariablesCapture encoderSecondaryVariable,
                        bool encoderSecondaryVariableShow,
-                       EncoderRhythm encoderRhythm)
+                       EncoderRhythm encoderRhythm,
+                       bool forceSensorCaptureFeedbackActive,
+                       int forceSensorCaptureFeedbackAt,
+                       int forceSensorCaptureFeedbackRange)
        {
                frame_best_and_worst.Hide();
                frame_conditions.Hide();
@@ -271,6 +282,8 @@ public class RepetitiveConditionsWindow
                vbox_encoder_manual.Hide();
                notebook_encoder_conditions.Hide();
                vbox_encoder_stuff.Hide();
+               vbox_force_capture_feedback.Hide();
+               hbox_test_bells.Hide();
 
                notebook_main.GetNthPage(RHYTHMPAGE).Hide();
                notebook_main.ShowTabs = false;
@@ -280,12 +293,15 @@ public class RepetitiveConditionsWindow
                        hbox_jump_best_worst.Show();
                        hbox_jump_conditions.Show();
                        frame_conditions.Show();
+                       hbox_test_bells.Show();
                } else if(bellMode == Constants.BellModes.RUNS) {
                        frame_best_and_worst.Show();
                        hbox_run_best_worst.Show();
                        hbox_run_conditions.Show();
                        frame_conditions.Show();
-               } else { //encoder (grav and inertial)
+                       hbox_test_bells.Show();
+               } else if (bellMode == Constants.BellModes.ENCODERGRAVITATORY || bellMode == 
Constants.BellModes.ENCODERINERTIAL)
+               {
                        vbox_encoder_stuff.Show();
                        frame_encoder_automatic_conditions.Show();
                        notebook_main.ShowTabs = true;
@@ -309,6 +325,23 @@ public class RepetitiveConditionsWindow
 
                        notebook_main.GetNthPage(RHYTHMPAGE).Show();
                        encoder_rhythm_set_values(encoderRhythm);
+                       hbox_test_bells.Show();
+               }
+               else if(bellMode == Constants.BellModes.FORCESENSOR)
+               {
+                       if(forceSensorCaptureFeedbackActive)
+                       {
+                               check_force_sensor_capture_feedback.Active = true;
+                               hbox_force_sensor_capture_feedback.Sensitive = true;
+                       } else {
+                               check_force_sensor_capture_feedback.Active = false;
+                               hbox_force_sensor_capture_feedback.Sensitive = false;
+                       }
+
+                       spin_force_sensor_capture_feedback_at.Value = forceSensorCaptureFeedbackAt;
+                       spin_force_sensor_capture_feedback_range.Value = forceSensorCaptureFeedbackRange;
+
+                       vbox_force_capture_feedback.Visible = true;
                }
 
                label_test_sound_result.Text = "";
@@ -455,7 +488,8 @@ public class RepetitiveConditionsWindow
                        if(checkbutton_time_lower.Active || checkbutton_time_greater.Active)
                                return true;
                }
-               else { //encoder (grav and inertial)
+               else if (bellMode == Constants.BellModes.ENCODERGRAVITATORY || bellMode == 
Constants.BellModes.ENCODERINERTIAL)
+               {
                        if(checkbutton_encoder_automatic_greater.Active || 
checkbutton_encoder_automatic_lower.Active ||
                                        checkbutton_encoder_height_higher.Active || 
checkbutton_encoder_height_lower.Active ||
                                        checkbutton_encoder_mean_speed_higher.Active || 
checkbutton_encoder_mean_speed_lower.Active ||
@@ -466,6 +500,8 @@ public class RepetitiveConditionsWindow
                                        checkbutton_encoder_peakpower_higher.Active || 
checkbutton_encoder_peakpower_lower.Active)
                                return true;
                }
+               else if(bellMode == Constants.BellModes.FORCESENSOR)
+                       return check_force_sensor_capture_feedback.Active;
 
                return false;
        }
@@ -807,6 +843,23 @@ public class RepetitiveConditionsWindow
                                reps_cluster, restClusters);
        }
 
+       /* FORCESENSOR */
+
+       private void on_check_force_sensor_capture_feedback_toggled (object o, EventArgs args)
+       {
+               hbox_force_sensor_capture_feedback.Sensitive = check_force_sensor_capture_feedback.Active;
+       }
+
+       public bool GetForceSensorFeedbackActive {
+               get { return check_force_sensor_capture_feedback.Active; }
+       }
+       public int GetForceSensorFeedbackAt {
+               get { return Convert.ToInt32(spin_force_sensor_capture_feedback_at.Value); }
+       }
+       public int GetForceSensorFeedbackRange {
+               get { return Convert.ToInt32(spin_force_sensor_capture_feedback_range.Value); }
+       }
+
 
        /* JUMPS */
        public bool TfTcBest {
diff --git a/src/gui/runEncoder.cs b/src/gui/runEncoder.cs
index 035afe15..54132222 100644
--- a/src/gui/runEncoder.cs
+++ b/src/gui/runEncoder.cs
@@ -43,11 +43,8 @@ public partial class ChronoJumpWindow
        [Widget] Gtk.ComboBox combo_run_encoder_exercise;
        [Widget] Gtk.SpinButton race_analyzer_spinbutton_distance;
        [Widget] Gtk.SpinButton race_analyzer_spinbutton_temperature;
-       [Widget] Gtk.TextView textview_race_analyzer_comment;
        [Widget] Gtk.ComboBox combo_race_analyzer_device;
        [Widget] Gtk.Image image_run_encoder_graph;
-       [Widget] Gtk.Button button_run_encoder_recalculate;
-       [Widget] Gtk.Button button_race_analyzer_save_comment;
        [Widget] Gtk.Viewport viewport_run_encoder_graph;
 
        int race_analyzer_distance;
@@ -247,11 +244,10 @@ public partial class ChronoJumpWindow
 
        private void runEncoderCapturePre3_GTK_cameraCalled()
        {
-               textview_race_analyzer_comment.Buffer.Text = "";
+               textview_contacts_signal_comment.Buffer.Text = "";
                assignCurrentRunEncoderExercise();
                raceEncoderReadWidgets();
-               button_run_encoder_recalculate.Sensitive = false;
-               button_race_analyzer_save_comment.Sensitive = false;
+               button_contacts_recalculate.Sensitive = false;
 
                bool connected = runEncoderCapturePre4_GTK();
                if(! connected)
@@ -266,9 +262,8 @@ public partial class ChronoJumpWindow
        {
                currentRunEncoder = new RunEncoder();
 
-               button_run_encoder_recalculate.Sensitive = false;
-               textview_race_analyzer_comment.Buffer.Text = "";
-               button_race_analyzer_save_comment.Sensitive = false;
+               button_contacts_recalculate.Sensitive = false;
+               textview_contacts_signal_comment.Buffer.Text = "";
 
                button_delete_last_test.Sensitive = false;
        }
@@ -635,7 +630,7 @@ public partial class ChronoJumpWindow
                 return dataRow;
         }
 
-       private void on_button_run_encoder_load_clicked (object o, EventArgs args)
+       private void run_encoder_load ()
        {
                ArrayList data = SqliteRunEncoder.Select(false, -1, currentPerson.UniqueID, 
currentSession.UniqueID);
 
@@ -738,16 +733,16 @@ public partial class ChronoJumpWindow
 
                raceEncoderSetDevice(re.Device);
                raceEncoderSetDistanceAndTemp(re.Distance, re.Temperature);
-               textview_race_analyzer_comment.Buffer.Text = re.Comments;
+///            textview_race_analyzer_comment.Buffer.Text = re.Comments;
+               textview_contacts_signal_comment.Buffer.Text = re.Comments;
 
                raceEncoderReadWidgets(); //needed to be able to do R graph
 
                raceEncoderCopyTempAndDoGraphs();
 
-               button_run_encoder_recalculate.Sensitive = true;
-               button_race_analyzer_save_comment.Sensitive = true;
+               button_contacts_recalculate.Sensitive = true;
 
-               button_video_play_this_test.Sensitive = (re.VideoURL != "");
+               button_video_play_this_test_contacts.Sensitive = (re.VideoURL != "");
                sensitiveLastTestButtons(true);
 
                event_execute_label_message.Text = "Loaded: " + Util.GetLastPartOfPath(re.Filename);
@@ -880,7 +875,7 @@ public partial class ChronoJumpWindow
        // --- end of runEncoderDeleteTest stuff -------
 
 
-       private void on_button_run_encoder_recalculate_clicked (object o, EventArgs args)
+       private void run_encoder_recalculate ()
        {
                if(! Util.FileExists(lastRunEncoderFullPath))
                {
@@ -894,12 +889,12 @@ public partial class ChronoJumpWindow
                if(lastRunEncoderFullPath != null && lastRunEncoderFullPath != "")
                        raceEncoderCopyTempAndDoGraphs();
 
-               button_run_encoder_recalculate.Sensitive = false; //to not be called two times
+               button_contacts_recalculate.Sensitive = false; //to not be called two times
 
                event_execute_label_message.Text = "Recalculated.";
 
                radio_mode_contacts_analyze.Active = true;
-               button_run_encoder_recalculate.Sensitive = true;
+               button_contacts_recalculate.Sensitive = true;
 
                //update SQL with exercise, device, distance, temperature, comments
                currentRunEncoder.ExerciseID = currentRunEncoderExercise.UniqueID;
@@ -907,17 +902,12 @@ public partial class ChronoJumpWindow
                currentRunEncoder.Device = raceEncoderGetDevice();
                currentRunEncoder.Distance = Convert.ToInt32(race_analyzer_spinbutton_distance.Value);
                currentRunEncoder.Temperature = Convert.ToInt32(race_analyzer_spinbutton_temperature.Value);
-               currentRunEncoder.Comments = 
UtilGtk.TextViewGetCommentValidSQL(textview_race_analyzer_comment);
+               //currentRunEncoder.Comments = 
UtilGtk.TextViewGetCommentValidSQL(textview_race_analyzer_comment);
+               currentRunEncoder.Comments = 
UtilGtk.TextViewGetCommentValidSQL(textview_contacts_signal_comment);
 
                currentRunEncoder.UpdateSQL(false);
        }
 
-       private void on_button_race_analyzer_save_comment_clicked (object o, EventArgs args)
-       {
-               currentRunEncoder.Comments = 
UtilGtk.TextViewGetCommentValidSQL(textview_race_analyzer_comment);
-               currentRunEncoder.UpdateSQLJustComments(false);
-       }
-
        private void raceEncoderCopyTempAndDoGraphs()
        {
                File.Copy(lastRunEncoderFullPath, RunEncoder.GetCSVFileName(), true); //can be overwritten
@@ -1027,7 +1017,7 @@ LogB.Information(" re B ");
                if(! runEncoderCaptureThread.IsAlive || runEncoderProcessFinish || runEncoderProcessCancel || 
runEncoderProcessError)
                {
 LogB.Information(" re C ");
-                       button_video_play_this_test.Sensitive = false;
+                       button_video_play_this_test_contacts.Sensitive = false;
                        if(runEncoderProcessFinish)
                        {
 LogB.Information(" re C finish");
@@ -1062,7 +1052,7 @@ LogB.Information(" re C finish");
                                                                currentRunEncoder.UniqueID);
                                                currentRunEncoder.UpdateSQL(false);
                                                label_video_feedback.Text = "";
-                                               button_video_play_this_test.Sensitive = true;
+                                               button_video_play_this_test_contacts.Sensitive = true;
                                        }
 
                                        Thread.Sleep (250); //Wait a bit to ensure is copied
@@ -1071,8 +1061,7 @@ LogB.Information(" re C finish");
                                        runEncoderAnalyzeOpenImage();
                                        notebook_analyze.CurrentPage = 
Convert.ToInt32(notebook_analyze_pages.RACEENCODER);
                                        radio_mode_contacts_analyze.Active = true;
-                                       button_run_encoder_recalculate.Sensitive = true;
-                                       button_race_analyzer_save_comment.Sensitive = true;
+                                       button_contacts_recalculate.Sensitive = true;
                                        button_delete_last_test.Sensitive = true;
 
                                        /*
@@ -1186,7 +1175,7 @@ LogB.Information(" re R ");
                hbox_run_encoder_capture_options.Sensitive = sensitive;
                button_execute_test.Sensitive = sensitive;
 
-               vbox_contacts_camera.Sensitive = sensitive;
+               hbox_contacts_camera.Sensitive = sensitive;
 
                //other gui buttons
                main_menu.Sensitive = sensitive;
diff --git a/src/gui/webcam.cs b/src/gui/webcam.cs
index b0c63983..34660ea9 100644
--- a/src/gui/webcam.cs
+++ b/src/gui/webcam.cs
@@ -28,28 +28,32 @@ using Mono.Unix;
 
 public partial class ChronoJumpWindow 
 {
-       [Widget] Gtk.Notebook notebook_last_test_buttons;
+       //[Widget] Gtk.Notebook notebook_last_test_buttons; page1: delete, play, inspect, page2: 
progressbar_video_generating
        [Widget] Gtk.ProgressBar progressbar_video_generating;
-       [Widget] Gtk.VSeparator vseparator_force_sensor_camera_space;
-       [Widget] Gtk.VBox vbox_contacts_camera;
-       [Widget] Gtk.CheckButton checkbutton_video;
+       [Widget] Gtk.HBox hbox_contacts_camera;
+       [Widget] Gtk.CheckButton checkbutton_video_contacts;
        [Widget] Gtk.CheckButton checkbutton_video_encoder;
-       //[Widget] Gtk.HBox hbox_video_capture;
+       //[Widget] Gtk.HBox hbox_video_contacts;
+       [Widget] Gtk.Notebook notebook_video_contacts;
+       [Widget] Gtk.HBox hbox_video_contacts_no_capturing;
+       [Widget] Gtk.HBox hbox_video_contacts_capturing;
        [Widget] Gtk.HBox hbox_video_encoder;
        [Widget] Gtk.HBox hbox_video_encoder_no_capturing;
        [Widget] Gtk.HBox hbox_video_encoder_capturing;
        [Widget] Gtk.Label label_video_feedback;
        [Widget] Gtk.Label label_video_encoder_feedback;
-       [Widget] Gtk.Button button_video_preview;
+       [Widget] Gtk.Button button_video_contacts_preview;
        [Widget] Gtk.Button button_video_encoder_preview;
        //[Widget] Gtk.Label label_video;
-       [Widget] Gtk.Image image_video_yes;
-       [Widget] Gtk.Image image_video_no;
+       [Widget] Gtk.Image image_video_contacts_yes;
+       [Widget] Gtk.Image image_video_contacts_yes1;
+       [Widget] Gtk.Image image_video_contacts_no;
        [Widget] Gtk.Image image_video_encoder_yes;
        [Widget] Gtk.Image image_video_encoder_yes1;
        [Widget] Gtk.Image image_video_encoder_no;
+       [Widget] Gtk.Label label_video_contacts_tests_will_be_filmed;
        [Widget] Gtk.Label label_video_encoder_tests_will_be_filmed;
-       [Widget] Gtk.Button button_video_play_this_test;
+       [Widget] Gtk.Button button_video_play_this_test_contacts;
        [Widget] Gtk.Button button_video_play_this_test_encoder;
        [Widget] Gtk.ProgressBar pulsebar_webcam;
 
@@ -63,9 +67,8 @@ public partial class ChronoJumpWindow
        //but we need database stuff first
        public void showWebcamCaptureContactsControls (bool show)
        {
-               vseparator_force_sensor_camera_space.Visible = false; //extra space before camera on force 
sensor
-               vbox_contacts_camera.Visible = show;
-               button_video_play_this_test.Visible = show;
+               hbox_contacts_camera.Visible = show;
+               button_video_play_this_test_contacts.Visible = show;
        }
 
        /* ---------------------------------------------------------
@@ -117,7 +120,7 @@ public partial class ChronoJumpWindow
                        hbox_video_encoder_capturing.Visible = true;
                }
 
-               button_video_preview_visible (guiContactsEncoder, false);
+               button_video_contacts_preview_visible (guiContactsEncoder, false);
 
                string errorMessage = "";
                if(ncams == 1)
@@ -199,6 +202,7 @@ public partial class ChronoJumpWindow
                        {
                                webcamManage.ReallyStarted = true;
                                label_video_feedback_text (WebcamManage.GuiContactsEncoder.CONTACTS, 
Catalog.GetString("Recording ..."));
+                               notebook_video_contacts.CurrentPage = 1;
                        }
 
                        if(current_menuitem_mode == Constants.Menuitem_modes.FORCESENSOR)
@@ -218,10 +222,10 @@ public partial class ChronoJumpWindow
                return true;
        }
 
-       private void button_video_preview_visible (WebcamManage.GuiContactsEncoder guiContactsEncoder, bool 
visible)
+       private void button_video_contacts_preview_visible (WebcamManage.GuiContactsEncoder 
guiContactsEncoder, bool visible)
        {
                if(guiContactsEncoder == WebcamManage.GuiContactsEncoder.CONTACTS)
-                       button_video_preview.Visible = visible;
+                       button_video_contacts_preview.Visible = visible;
                else
                        button_video_encoder_preview.Visible = visible;
        }
@@ -232,13 +236,13 @@ public partial class ChronoJumpWindow
                else
                        label_video_encoder_feedback.Text = text;
        }
-       private void button_video_play_this_test_sensitive (WebcamManage.GuiContactsEncoder 
guiContactsEncoder, bool s)
+       private void button_video_play_this_test_contacts_sensitive (WebcamManage.GuiContactsEncoder 
guiContactsEncoder, bool s)
        {
-               LogB.Information("button_video_play_this_test_sensitive: " + s.ToString());
+               LogB.Information("button_video_play_this_test_contacts_sensitive: " + s.ToString());
                if(guiContactsEncoder == WebcamManage.GuiContactsEncoder.CONTACTS)
-                       button_video_play_this_test.Sensitive = s;
+                       button_video_play_this_test_contacts.Sensitive = s;
                else
-                       //button_video_encoder_play_this_test.Sensitive = s;
+                       //button_video_encoder_play_this_test_contacts.Sensitive = s;
                        button_video_play_this_test_encoder.Sensitive = s; //TODO:jugar amb la sensitivitat 
de aixo quan hi ha o no signalUniqueID 
        }
 
@@ -353,8 +357,11 @@ public partial class ChronoJumpWindow
                                //call it later to be able to have some video on a short test like a jump.
                                LogB.Information(string.Format("Preparing to call webcamEndDo() in {0} s", 
preferences.videoStopAfter));
 
-                               notebook_last_test_buttons.CurrentPage = 1;
+                               //notebook_last_test_buttons.CurrentPage = 1;
+                               //hbox_video_contacts_no_capturing.Visible = false;
+                               notebook_video_contacts.CurrentPage = 2;
                                progressbar_video_generating.Text = Catalog.GetString("Ending video");
+                               //progressbar_video_generating.Visible = true;
 
                                //GLib.Timeout.Add(Convert.ToUInt32(preferences.videoStopAfter * 1000), new 
GLib.TimeoutHandler(webcamEndDo));
                                //do not done the above method because now we call webcamEndDo to update the 
progressbar, until preferences.videoStopAfter end
@@ -389,14 +396,17 @@ public partial class ChronoJumpWindow
                if(webcamEndParams.uniqueID != -1 && ! resultExit.success)
                        new DialogMessage(Constants.MessageTypes.WARNING, resultExit.error);
 
-               button_video_preview_visible (webcamEndParams.guiContactsEncoder, true);
-               LogB.Information(string.Format("calling button_video_play_this_test_sensitive {0}-{1}-{2}",
+               button_video_contacts_preview_visible (webcamEndParams.guiContactsEncoder, true);
+               LogB.Information(string.Format("calling button_video_play_this_test_contacts_sensitive 
{0}-{1}-{2}",
                                        webcamEndParams.guiContactsEncoder, webcamManage.ReallyStarted, 
resultExit.success));
-               button_video_play_this_test_sensitive (webcamEndParams.guiContactsEncoder, 
webcamManage.ReallyStarted && resultExit.success);
+               button_video_play_this_test_contacts_sensitive (webcamEndParams.guiContactsEncoder, 
webcamManage.ReallyStarted && resultExit.success);
                button_video_play_selected_test(current_menuitem_mode);
 
                sensitiveGuiEventDone();
-               notebook_last_test_buttons.CurrentPage = 0;
+               //notebook_last_test_buttons.CurrentPage = 0;
+               //progressbar_video_generating.Visible = false;
+               //hbox_video_contacts_no_capturing.Visible = true;
+               notebook_video_contacts.CurrentPage = 0;
 
                return false; //do not call this Timeout routine again
        }
@@ -431,8 +441,8 @@ public partial class ChronoJumpWindow
                        label_video_encoder_feedback.Text = "";
                }
 
-               //button_video_play_this_test.Sensitive = false;
-               //button_video_play_this_test_sensitive (guiContactsEncoder, false);
+               //button_video_play_this_test_contacts.Sensitive = false;
+               //button_video_play_this_test_contacts_sensitive (guiContactsEncoder, false);
 
                if(! preferences.videoOn || webcamManage == null)
                        return;
@@ -462,8 +472,8 @@ public partial class ChronoJumpWindow
                if(errorMessage != "")
                        new DialogMessage(Constants.MessageTypes.WARNING, errorMessage);
 
-               //button_video_play_this_test.Sensitive = (uniqueID != -1 && errorMessage == "");
-               button_video_play_this_test_sensitive (guiContactsEncoder, (uniqueID != -1 && errorMessage == 
""));
+               //button_video_play_this_test_contacts.Sensitive = (uniqueID != -1 && errorMessage == "");
+               button_video_play_this_test_contacts_sensitive (guiContactsEncoder, (uniqueID != -1 && 
errorMessage == ""));
                button_video_play_selected_test(current_menuitem_mode);
        }
 
@@ -488,9 +498,9 @@ public partial class ChronoJumpWindow
                {
                        //first stop showing video
                        bool wasActive = false;
-                       if(checkbutton_video.Active) {
+                       if(checkbutton_video_contacts.Active) {
                                wasActive = true;
-                               checkbutton_video.Active = false;
+                               checkbutton_video_contacts.Active = false;
                        }
 
                        if(notebook_sup.CurrentPage == 0) {
@@ -521,7 +531,7 @@ public partial class ChronoJumpWindow
                        }
 
                        if(wasActive)
-                               checkbutton_video.Active = true;
+                               checkbutton_video_contacts.Active = true;
 
                        video_capture_notebook_sup = notebook_sup.CurrentPage;
                }
@@ -576,8 +586,8 @@ public partial class ChronoJumpWindow
 
                capturer.CaptureProperties = s;
 
-               //checkbutton_video and checkbutton_video_encoder are synchronized
-               if(checkbutton_video.Active)
+               //checkbutton_video_contacts and checkbutton_video_encoder are synchronized
+               if(checkbutton_video_contacts.Active)
                        capturer.Type = CapturerType.Live;
                else
                        capturer.Type = CapturerType.Fake;
@@ -594,34 +604,38 @@ public partial class ChronoJumpWindow
 
        private void changeVideoButtons(bool myVideo)
        {
-               image_video_yes.Visible = myVideo;
-               image_video_no.Visible = ! myVideo;
+               image_video_contacts_yes.Visible = myVideo;
+               image_video_contacts_no.Visible = ! myVideo;
 
                image_video_encoder_yes.Visible = myVideo;
                image_video_encoder_no.Visible = ! myVideo;
 
-               button_video_preview.Visible = myVideo;
+               button_video_contacts_preview.Visible = myVideo;
                button_video_encoder_preview.Visible = myVideo;
        }
 
-       private void on_checkbutton_video_clicked(object o, EventArgs args)
+       private void on_checkbutton_video_contacts_clicked(object o, EventArgs args)
        {
-               if(checkbutton_video.Active)
+               if(checkbutton_video_contacts.Active)
                {
                        if(! preferences.IsVideoConfigured())
                        {
                                new DialogMessage(Constants.MessageTypes.WARNING, Catalog.GetString("Video 
device is not configured. Check Preferences / Multimedia."));
-                               checkbutton_video.Active = false;
+                               checkbutton_video_contacts.Active = false;
                                return;
                        }
 
                        preferences.videoOn = true;
                        SqlitePreferences.Update("videoOn", "True", false);
-                       event_execute_label_message.Text = Catalog.GetString("Tests will be filmed");
+
+                       //this allows to see the label during 500 ms
+                       //hbox_video_contacts_no_capturing.Visible = false;
+                       notebook_video_contacts.CurrentPage = 1;
+                       label_video_contacts_tests_will_be_filmed.Visible = true;
+                       GLib.Timeout.Add(1000, new 
GLib.TimeoutHandler(checkbutton_video_contacts_active_end));
                } else {
                        preferences.videoOn = false;
                        SqlitePreferences.Update("videoOn", "False", false);
-                       event_execute_label_message.Text = "";
                }
                //change encoder checkbox but don't raise the signal
                checkbutton_video_encoder.Clicked -= new EventHandler(on_checkbutton_video_encoder_clicked);
@@ -656,9 +670,9 @@ public partial class ChronoJumpWindow
                        SqlitePreferences.Update("videoOn", "False", false);
                }
                //change contacts checkbox but don't raise the signal
-               checkbutton_video.Clicked -= new EventHandler(on_checkbutton_video_clicked);
-               checkbutton_video.Active = preferences.videoOn;
-               checkbutton_video.Clicked += new EventHandler(on_checkbutton_video_clicked);
+               checkbutton_video_contacts.Clicked -= new EventHandler(on_checkbutton_video_contacts_clicked);
+               checkbutton_video_contacts.Active = preferences.videoOn;
+               checkbutton_video_contacts.Clicked += new EventHandler(on_checkbutton_video_contacts_clicked);
 
                changeVideoButtons(preferences.videoOn);
 
@@ -666,6 +680,15 @@ public partial class ChronoJumpWindow
                videoCapturePrepare(true); //if error, show message
        }
 
+       private bool checkbutton_video_contacts_active_end()
+       {
+               //hbox_video_contacts_no_capturing.Visible = true;
+               notebook_video_contacts.CurrentPage = 0;
+               label_video_contacts_tests_will_be_filmed.Visible = false;
+
+               return false; //do not call this again
+       }
+
        private bool checkbutton_video_encoder_active_end()
        {
                hbox_video_encoder_no_capturing.Visible = true;
@@ -682,7 +705,7 @@ public partial class ChronoJumpWindow
        //TODO: manage different playVideo. Playing is very different than capturing, separate it.
        Webcam webcamPlay;
 
-       private void on_button_video_preview_clicked (object o, EventArgs args)
+       private void on_button_video_contacts_preview_clicked (object o, EventArgs args)
        {
                playPreview();
        }
@@ -698,6 +721,7 @@ public partial class ChronoJumpWindow
                Webcam.Result result = webcamPlay.PlayPreviewNoBackground ();
        }
 
+       /*
        private void on_button_video_debug_clicked (object o, EventArgs args)
        {
                string executable = "debug";
@@ -708,6 +732,7 @@ public partial class ChronoJumpWindow
                ExecuteProcess.Result execute_result = ExecuteProcess.run (executable, true, true);
                LogB.Information("Called debug.");
        }
+       */
 
        //Not used on encoder
        private void playVideo (string fileName)
@@ -742,7 +767,7 @@ public partial class ChronoJumpWindow
        }
 
 
-       private void on_video_play_last_test_clicked (object o, EventArgs args)
+       private void on_button_video_play_this_test_contacts_clicked (object o, EventArgs args)
        {
                if(current_menuitem_mode == Constants.Menuitem_modes.FORCESENSOR)
                {
diff --git a/src/preferences.cs b/src/preferences.cs
index 29d3e638..78a9c0a7 100644
--- a/src/preferences.cs
+++ b/src/preferences.cs
@@ -132,11 +132,15 @@ public class Preferences
        public int encoderRhythmRepsCluster;
        public double encoderRhythmRestClustersSeconds;
 
+       //forceSensor
        public string forceSensorTareDateTime;
        public double forceSensorTare;
        public string forceSensorCalibrationDateTime;
        public double forceSensorCalibrationWeight;
        public double forceSensorCalibrationFactor;
+       public bool forceSensorCaptureFeedbackActive;
+       public int forceSensorCaptureFeedbackAt;
+       public int forceSensorCaptureFeedbackRange;
                                
        public int encoderCaptureTimeIM = 180; //hardcoded 3 minutes.
 



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