[chronojump] ForceSensorExercise window recursivity WIP



commit 77bc9c4bd3d384b81e306e104591086b553a5559
Author: Xavier de Blas <xaviblas gmail com>
Date:   Tue Oct 1 14:28:21 2019 +0200

    ForceSensorExercise window recursivity WIP

 glade/force_sensor_exercise.glade |  54 +++++++++++-----
 src/gui/forceSensorExercise.cs    | 131 +++++++++++++++++++++++++++-----------
 2 files changed, 132 insertions(+), 53 deletions(-)
---
diff --git a/glade/force_sensor_exercise.glade b/glade/force_sensor_exercise.glade
index 21ff7061..3b324688 100644
--- a/glade/force_sensor_exercise.glade
+++ b/glade/force_sensor_exercise.glade
@@ -87,6 +87,7 @@
               <widget class="GtkTable" id="table1">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
+                <property name="resize_mode">queue</property>
                 <property name="n_rows">7</property>
                 <property name="n_columns">3</property>
                 <property name="column_spacing">16</property>
@@ -141,8 +142,8 @@
                     <property name="can_focus">False</property>
                     <property name="spacing">12</property>
                     <child>
-                      <widget class="GtkRadioButton" id="radio_string_rope">
-                        <property name="label" translatable="yes">Rope</property>
+                      <widget class="GtkRadioButton" id="radio_string_rigid">
+                        <property name="label" translatable="yes">Rigid, (eg. rope)</property>
                         <property name="can_focus">True</property>
                         <property name="receives_default">False</property>
                         <property name="active">True</property>
@@ -156,13 +157,13 @@
                       </packing>
                     </child>
                     <child>
-                      <widget class="GtkRadioButton" id="radio_string_rubber_band">
-                        <property name="label" translatable="yes">Rubber band</property>
+                      <widget class="GtkRadioButton" id="radio_string_elastic">
+                        <property name="label" translatable="yes">Elastic (eg. rubber band)</property>
                         <property name="can_focus">True</property>
                         <property name="receives_default">False</property>
                         <property name="active">True</property>
                         <property name="draw_indicator">True</property>
-                        <property name="group">radio_string_rope</property>
+                        <property name="group">radio_string_rigid</property>
                         <signal name="toggled" handler="on_radio_string_toggled" swapped="no"/>
                       </widget>
                       <packing>
@@ -191,6 +192,7 @@
                         <property name="receives_default">False</property>
                         <property name="active">True</property>
                         <property name="draw_indicator">True</property>
+                        <signal name="toggled" handler="on_radio_cdg_displ_toggled" swapped="no"/>
                       </widget>
                       <packing>
                         <property name="expand">False</property>
@@ -206,6 +208,7 @@
                         <property name="active">True</property>
                         <property name="draw_indicator">True</property>
                         <property name="group">radio_cdg_displ_yes</property>
+                        <signal name="toggled" handler="on_radio_cdg_displ_toggled" swapped="no"/>
                       </widget>
                       <packing>
                         <property name="expand">False</property>
@@ -233,6 +236,7 @@
                         <property name="receives_default">False</property>
                         <property name="active">True</property>
                         <property name="draw_indicator">True</property>
+                        <signal name="toggled" handler="on_radio_sensor_affected_bw_toggled" swapped="no"/>
                       </widget>
                       <packing>
                         <property name="expand">False</property>
@@ -248,6 +252,7 @@
                         <property name="active">True</property>
                         <property name="draw_indicator">True</property>
                         <property name="group">radio_sensor_affected_bw_yes</property>
+                        <signal name="toggled" handler="on_radio_sensor_affected_bw_toggled" swapped="no"/>
                       </widget>
                       <packing>
                         <property name="expand">False</property>
@@ -275,6 +280,7 @@
                         <property name="receives_default">False</property>
                         <property name="active">True</property>
                         <property name="draw_indicator">True</property>
+                        <signal name="toggled" handler="on_radio_tare_before_capture_toggled" swapped="no"/>
                       </widget>
                       <packing>
                         <property name="expand">False</property>
@@ -290,6 +296,7 @@
                         <property name="active">True</property>
                         <property name="draw_indicator">True</property>
                         <property name="group">radio_tare_before_capture_yes</property>
+                        <signal name="toggled" handler="on_radio_tare_before_capture_toggled" swapped="no"/>
                       </widget>
                       <packing>
                         <property name="expand">False</property>
@@ -455,18 +462,6 @@
                     <property name="x_options"/>
                   </packing>
                 </child>
-                <child>
-                  <widget class="GtkLabel" id="label_string">
-                    <property name="can_focus">False</property>
-                    <property name="xalign">0</property>
-                    <property name="label" translatable="yes">String type</property>
-                  </widget>
-                  <packing>
-                    <property name="top_attach">1</property>
-                    <property name="bottom_attach">2</property>
-                    <property name="x_options">GTK_FILL</property>
-                  </packing>
-                </child>
                 <child>
                   <widget class="GtkLabel" id="label_cdg_displ">
                     <property name="can_focus">False</property>
@@ -544,6 +539,7 @@ by body weight</property>
                         <property name="adjustment">0 0 100 1 10 0</property>
                         <property name="snap_to_ticks">True</property>
                         <property name="numeric">True</property>
+                        <signal name="value_changed" handler="on_spin_bw_added_value_changed" swapped="no"/>
                       </widget>
                       <packing>
                         <property name="expand">False</property>
@@ -606,6 +602,18 @@ by body weight</property>
                         <property name="position">1</property>
                       </packing>
                     </child>
+                    <child>
+                      <widget class="GtkLabel" id="label_angle_use">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                      </widget>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="padding">12</property>
+                        <property name="position">2</property>
+                      </packing>
+                    </child>
                   </widget>
                   <packing>
                     <property name="left_attach">1</property>
@@ -614,6 +622,18 @@ by body weight</property>
                     <property name="bottom_attach">7</property>
                   </packing>
                 </child>
+                <child>
+                  <widget class="GtkLabel" id="label_string">
+                    <property name="can_focus">False</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">Fixation</property>
+                  </widget>
+                  <packing>
+                    <property name="top_attach">1</property>
+                    <property name="bottom_attach">2</property>
+                    <property name="x_options">GTK_FILL</property>
+                  </packing>
+                </child>
               </widget>
               <packing>
                 <property name="expand">False</property>
diff --git a/src/gui/forceSensorExercise.cs b/src/gui/forceSensorExercise.cs
index 9976202f..4513783b 100644
--- a/src/gui/forceSensorExercise.cs
+++ b/src/gui/forceSensorExercise.cs
@@ -45,8 +45,8 @@ public class ForceSensorExerciseWindow
        [Widget] Gtk.Button button_help_force;
 
        [Widget] Gtk.Label label_string;
-       [Widget] Gtk.RadioButton radio_string_rope;
-       [Widget] Gtk.RadioButton radio_string_rubber_band;
+       [Widget] Gtk.RadioButton radio_string_rigid;
+       [Widget] Gtk.RadioButton radio_string_elastic;
        [Widget] Gtk.Button button_help_string;
 
        [Widget] Gtk.Label label_cdg_displ;
@@ -72,10 +72,12 @@ public class ForceSensorExerciseWindow
        [Widget] Gtk.Label label_angle;
        [Widget] Gtk.HBox hbox_angle;
        [Widget] Gtk.SpinButton spin_angle;
+       [Widget] Gtk.Label label_angle_use;
        [Widget] Gtk.Button button_help_angle;
 
        //lists of widgets to play with visibility
-       List<Widget> lw_string;
+       List<Widget> lw_force;
+       List<Widget> lw_elastic;
        List<Widget> lw_cdg_displ;
        List<Widget> lw_sensor_affected_bw;
        List<Widget> lw_tare_before_capture;
@@ -119,7 +121,7 @@ public class ForceSensorExerciseWindow
                        ForceSensorExerciseWindowBox.label_header.Text = textHeader;
                }
 
-               ForceSensorExerciseWindowBox.hideWidgets();
+               ForceSensorExerciseWindowBox.initializeVisibilityOfWidgets();
                ForceSensorExerciseWindowBox.force_sensor_exercise.Show ();
 
                return ForceSensorExerciseWindowBox;
@@ -133,8 +135,10 @@ public class ForceSensorExerciseWindow
 
        private void createListsOfWidgets()
        {
-               lw_string = new List<Widget> {
-                       label_string, radio_string_rope, radio_string_rubber_band, button_help_string };
+               lw_force = new List<Widget> {
+                       label_force, radio_force_sensor, radio_force_resultant, button_help_force };
+               lw_elastic = new List<Widget> {
+                       label_string, radio_string_rigid, radio_string_elastic, button_help_string };
                lw_cdg_displ = new List<Widget> {
                        label_cdg_displ, radio_cdg_displ_yes, radio_cdg_displ_no, button_help_cdg_displ };
                lw_sensor_affected_bw = new List<Widget> {
@@ -144,53 +148,108 @@ public class ForceSensorExerciseWindow
                lw_bw_added = new List<Widget> {
                        label_bw_added, hbox_bw_added, button_help_bw_added }; 
                lw_angle = new List<Widget> {
-                       label_angle, hbox_angle, button_help_angle }; 
+                       label_angle, hbox_angle, label_angle_use, button_help_angle };
        }
 
-       private void hideWidgets()
+       private void initializeVisibilityOfWidgets()
        {
-               showHideWidget(lw_string, false);
-               showHideWidget(lw_cdg_displ, false);
-               showHideWidget(lw_sensor_affected_bw, false);
-               showHideWidget(lw_tare_before_capture, false);
-               showHideWidget(lw_bw_added, false);
-               showHideWidget(lw_angle, false);
+               showHideWidgets(lw_elastic, false);
+               showHideWidgets(lw_cdg_displ, false);
+               showHideWidgets(lw_sensor_affected_bw, false);
+               showHideWidgets(lw_tare_before_capture, false);
+               showHideWidgets(lw_bw_added, false);
+
+               if(radio_force_sensor.Active)
+                       label_angle_use.Text = "Just informative";
+               showHideWidgets(lw_angle, true);
        }
 
-       private void showHideWidget(List<Widget> lw, bool show)
+       private void showHideWidgets(List<Widget> lw, bool show)
        {
                foreach(Widget w in lw)
                        w.Visible = show;
+       }
+
+       private void showHideWidgetsRecursively(List<Widget> lw, bool show)
+       {
+               if(lw == lw_elastic)
+               {
+                       LogB.Information("REC string, show: " + show.ToString());
+                       showHideWidgets(lw, show);
+                       showHideWidgetsRecursively(lw_cdg_displ, radio_force_resultant.Active && 
radio_string_elastic.Active);
+               }
+               else if(lw == lw_cdg_displ)
+               {
+                       LogB.Information("REC cdg displ, show: " + show.ToString());
+                       showHideWidgets(lw, show && radio_string_elastic.Active);
+                       showHideWidgetsRecursively(lw_sensor_affected_bw, radio_cdg_displ_yes.Active);
+               }
+               else if(lw == lw_sensor_affected_bw)
+               {
+                       LogB.Information("REC affected bw, show: " + (show && 
radio_force_resultant.Active).ToString());
+                       showHideWidgets(lw, radio_force_resultant.Active &&
+                                       (
+                                        (radio_string_elastic.Active && radio_cdg_displ_yes.Active) ||
+                                        (radio_string_rigid.Active)
+                                        ) );
+                       showHideWidgetsRecursively(lw_tare_before_capture, 
radio_sensor_affected_bw_yes.Active);
+               }
+               else if(lw == lw_tare_before_capture)
+               {
+                       LogB.Information("REC tare before capture, show: " + show.ToString());
+                       showHideWidgets(lw, show && radio_sensor_affected_bw_yes.Visible);
+                       showHideWidgets(lw_bw_added, radio_tare_before_capture_no.Active);
+               }
+
 
-               if(lw == lw_string && show)
-                       showHideWidget(lw_cdg_displ, radio_string_rubber_band.Active);
+               //angle is changed at the end because it can affect many combinations
+               if (radio_force_sensor.Active ||
+                               ( radio_string_elastic.Active && radio_cdg_displ_no.Active ) ||
+                               ( radio_tare_before_capture_yes.Visible && 
radio_tare_before_capture_yes.Active ) ||
+                               ( spin_bw_added.Visible && Convert.ToInt32(spin_bw_added.Value) == 0 ) )
+               {
+                       label_angle_use.Text = "Just informative";
+                       showHideWidgets(lw_angle, true);
+               } else if (spin_bw_added.Visible && Convert.ToInt32(spin_bw_added.Value) > 0)
+               {
+                       label_angle_use.Text = "Used for calculations";
+                       showHideWidgets(lw_angle, true);
+               } else
+                       showHideWidgets(lw_angle, false);
        }
 
+
        private void on_radio_force_toggled (object o, EventArgs args)
        {
-               if (radio_force_resultant.Active)
-                       showHideWidget(lw_string, true);
-               else {
-                       showHideWidget(lw_string, false);
-                       showHideWidget(lw_cdg_displ, false);
-                       showHideWidget(lw_sensor_affected_bw, false);
-                       showHideWidget(lw_tare_before_capture, false);
-                       showHideWidget(lw_bw_added, false);
-                       showHideWidget(lw_angle, false);
-               }
+               showHideWidgetsRecursively(lw_elastic, radio_force_resultant.Active);
        }
 
        private void on_radio_string_toggled (object o, EventArgs args)
        {
-               if(radio_string_rubber_band.Active)
-                       showHideWidget(lw_cdg_displ, true);
-               else {
-                       showHideWidget(lw_cdg_displ, false);
-                       showHideWidget(lw_sensor_affected_bw, false);
-                       showHideWidget(lw_tare_before_capture, false);
-                       showHideWidget(lw_bw_added, false);
-                       showHideWidget(lw_angle, false);
-               }
+               showHideWidgetsRecursively(lw_cdg_displ, radio_string_elastic.Active); //this will manage 
sensor_affected_bw in the two paths
+       }
+
+       private void on_radio_cdg_displ_toggled (object o, EventArgs args)
+       {
+               showHideWidgetsRecursively(lw_sensor_affected_bw, radio_cdg_displ_yes.Active);
+       }
+
+       private void on_radio_sensor_affected_bw_toggled (object o, EventArgs args)
+       {
+               showHideWidgetsRecursively(lw_tare_before_capture, radio_sensor_affected_bw_yes.Active);
+       }
+
+       private void on_radio_tare_before_capture_toggled (object o, EventArgs args)
+       {
+               showHideWidgets(lw_bw_added, radio_tare_before_capture_no.Active);
+       }
+
+       private void on_spin_bw_added_value_changed (object o, EventArgs args)
+       {
+               if(Convert.ToInt32(spin_bw_added.Value) > 0)
+                       label_angle_use.Text = "Used for calculations";
+               else
+                       label_angle_use.Text = "Just informative";
        }
 
        private void on_entries_changed (object o, EventArgs args)


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