[chronojump] ForceSensorExercise gui ready for repetitions detect stuff
- From: Xavier de Blas <xaviblas src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [chronojump] ForceSensorExercise gui ready for repetitions detect stuff
- Date: Tue, 18 Feb 2020 12:37:06 +0000 (UTC)
commit f38ffbd4293c22c899ef70355ad25b4eb919e303
Author: Xavier de Blas <xaviblas gmail com>
Date: Tue Feb 18 13:36:23 2020 +0100
ForceSensorExercise gui ready for repetitions detect stuff
glade/force_sensor_exercise.glade | 397 +++++++++++++++++++++++++++++++++++++-
src/gui/forceSensorExercise.cs | 70 ++++++-
2 files changed, 460 insertions(+), 7 deletions(-)
---
diff --git a/glade/force_sensor_exercise.glade b/glade/force_sensor_exercise.glade
index ebee314b..c2be9169 100644
--- a/glade/force_sensor_exercise.glade
+++ b/glade/force_sensor_exercise.glade
@@ -456,6 +456,399 @@
<property name="type">tab</property>
</packing>
</child>
+ <child>
+ <widget class="GtkVBox" id="vbox8">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">8</property>
+ <property name="spacing">20</property>
+ <child>
+ <widget class="GtkLabel" id="label_detect_repetitions">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Detect repetitions</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkTextView" id="textview_detect_repetitions_explanation">
+ <property name="can_focus">True</property>
+ <property name="editable">False</property>
+ <property name="wrap_mode">word</property>
+ <property name="cursor_visible">False</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkCheckButton" id="check_discard_ecc">
+ <property name="label" translatable="yes">Discard eccentric phase</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="on_check_discard_ecc_toggled" swapped="no"/>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkCheckButton" id="check_detect_repetitions_default">
+ <property name="label" translatable="yes">Use default criteria to detect
repetitions</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="on_check_detect_repetitions_default_toggled"
swapped="no"/>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox_detect_repetitions_elastic">
+ <property name="can_focus">False</property>
+ <property name="spacing">20</property>
+ <child>
+ <widget class="GtkLabel" id="label39">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Minimal range of movement</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox334">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">20</property>
+ <child>
+ <widget class="GtkHBox" id="hbox_force_sensor_elastic_ecc_min_displ">
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <child>
+ <widget class="GtkLabel" id="label414">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Eccentric</property>
+ </widget>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkSpinButton" id="spin_force_sensor_elastic_ecc_min_displ">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="has_tooltip">True</property>
+ <property name="tooltip" translatable="yes">Minimal height</property>
+ <property name="invisible_char">●</property>
+ <property name="width_chars">3</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">0.10000000000000001 0.10000000000000001 10
0.01 0.10000000000000001 0</property>
+ <property name="climb_rate">1</property>
+ <property name="digits">1</property>
+ <property name="snap_to_ticks">True</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="label415">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">m</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">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox337">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <child>
+ <widget class="GtkLabel" id="label416">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Concentric</property>
+ </widget>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkSpinButton" id="spin_force_sensor_elastic_con_min_displ">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="has_tooltip">True</property>
+ <property name="tooltip" translatable="yes">Minimal height</property>
+ <property name="invisible_char">●</property>
+ <property name="width_chars">3</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">0.10000000000000001 0.10000000000000001 10
0.01 0.10000000000000001 0</property>
+ <property name="climb_rate">1</property>
+ <property name="digits">1</property>
+ <property name="snap_to_ticks">True</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="label417">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">m</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">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox_detect_repetitions_not_elastic">
+ <property name="can_focus">False</property>
+ <property name="spacing">20</property>
+ <child>
+ <widget class="GtkLabel" id="label41">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Minimal force</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox56">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">20</property>
+ <child>
+ <widget class="GtkHBox" id="hbox_force_sensor_not_elastic_ecc_min_force">
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <child>
+ <widget class="GtkLabel" id="label42">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Eccentric</property>
+ </widget>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkSpinButton"
id="spin_force_sensor_not_elastic_ecc_min_force">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="has_tooltip">True</property>
+ <property name="tooltip" translatable="yes">Minimal height</property>
+ <property name="invisible_char">●</property>
+ <property name="width_chars">3</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">50 1 999 1 10 0</property>
+ <property name="climb_rate">1</property>
+ <property name="snap_to_ticks">True</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="label55">
+ <property name="visible">True</property>
+ <property name="can_focus">False</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">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox59">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <child>
+ <widget class="GtkLabel" id="label80">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Concentric</property>
+ </widget>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkSpinButton"
id="spin_force_sensor_not_elastic_con_min_force">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="has_tooltip">True</property>
+ <property name="tooltip" translatable="yes">Minimal height</property>
+ <property name="invisible_char">●</property>
+ <property name="width_chars">3</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">50 1 999 1 10 0</property>
+ <property name="climb_rate">1</property>
+ <property name="snap_to_ticks">True</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="label119">
+ <property name="visible">True</property>
+ <property name="can_focus">False</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">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">repetitions</property>
+ </widget>
+ <packing>
+ <property name="position">3</property>
+ <property name="tab_fill">False</property>
+ <property name="type">tab</property>
+ </packing>
+ </child>
<child>
<widget class="GtkVBox" id="vbox7">
<property name="visible">True</property>
@@ -600,7 +993,7 @@
</child>
</widget>
<packing>
- <property name="position">3</property>
+ <property name="position">4</property>
</packing>
</child>
<child>
@@ -610,7 +1003,7 @@
<property name="label">other</property>
</widget>
<packing>
- <property name="position">3</property>
+ <property name="position">4</property>
<property name="tab_fill">False</property>
<property name="type">tab</property>
</packing>
diff --git a/src/gui/forceSensorExercise.cs b/src/gui/forceSensorExercise.cs
index 72061929..6816d9ac 100644
--- a/src/gui/forceSensorExercise.cs
+++ b/src/gui/forceSensorExercise.cs
@@ -56,6 +56,17 @@ public class ForceSensorExerciseWindow
[Widget] Gtk.HBox hbox_body_mass_add;
[Widget] Gtk.SpinButton spin_body_mass_add;
+ [Widget] Gtk.CheckButton check_discard_ecc;
+ [Widget] Gtk.CheckButton check_detect_repetitions_default;
+ [Widget] Gtk.HBox hbox_detect_repetitions_elastic;
+ [Widget] Gtk.HBox hbox_detect_repetitions_not_elastic;
+ [Widget] Gtk.HBox hbox_force_sensor_elastic_ecc_min_displ;
+ [Widget] Gtk.HBox hbox_force_sensor_not_elastic_ecc_min_force;
+ [Widget] Gtk.SpinButton spin_force_sensor_elastic_ecc_min_displ;
+ [Widget] Gtk.SpinButton spin_force_sensor_elastic_con_min_displ;
+ [Widget] Gtk.SpinButton spin_force_sensor_not_elastic_ecc_min_force;
+ [Widget] Gtk.SpinButton spin_force_sensor_not_elastic_con_min_force;
+
[Widget] Gtk.Label label_other;
[Widget] Gtk.TextView textview_other_explanation;
[Widget] Gtk.SpinButton spin_angle;
@@ -82,8 +93,8 @@ public class ForceSensorExerciseWindow
private enum modesEnum { EDIT, ADD }
private modesEnum modeEnum;
- private enum Pages { FORCE, FIXATION, MASS, OTHER }
- private enum Options { FORCE_SENSOR, FORCE_RESULTANT, FIXATION_ELASTIC, FIXATION_NOT_ELASTIC,
MASS_ADD, MASS_SUBTRACT, MASS_NOTHING, OTHER }
+ private enum Pages { FORCE, FIXATION, MASS, REPETITIONS, OTHER }
+ private enum Options { FORCE_SENSOR, FORCE_RESULTANT, FIXATION_ELASTIC, FIXATION_NOT_ELASTIC,
MASS_ADD, MASS_SUBTRACT, MASS_NOTHING, REPETITIONS, OTHER }
static ForceSensorExerciseWindow ForceSensorExerciseWindowBox;
@@ -128,6 +139,8 @@ public class ForceSensorExerciseWindow
ForceSensorExerciseWindowBox.exerciseToGUI();
ForceSensorExerciseWindowBox.force_sensor_exercise.Show ();
+//TODO: fill spins: spin_force_sensor_elastic_ecc_min_displ, ... with preferences
+
return ForceSensorExerciseWindowBox;
}
@@ -146,6 +159,8 @@ public class ForceSensorExerciseWindow
ForceSensorExerciseWindowBox.exercise = null;
ForceSensorExerciseWindowBox.force_sensor_exercise.Show ();
+//TODO: fill spins: spin_force_sensor_elastic_ecc_min_displ, ... with preferences
+
return ForceSensorExerciseWindowBox;
}
@@ -223,6 +238,8 @@ public class ForceSensorExerciseWindow
str = Catalog.GetString("How the force is transmitted to the sensor");
else if(p == Pages.MASS)
str = Catalog.GetString("Depending on the exercise and configuration of the test, the
total mass (mass of the person and the extra load) can affect the sensor measuring. Select how to manage this
effect.");
+ else if(p == Pages.REPETITIONS)
+ str = ""; //not shown
else { //if(p == Pages.OTHER)
if(radio_force_resultant.Active && radio_mass_add.Active)
str = Catalog.GetString("In current exercise configuration, it is necessary
to enter the angle in which the sensor is measuring.");
@@ -250,6 +267,8 @@ public class ForceSensorExerciseWindow
str = Catalog.GetString("In some cases the weight of the mass is supported by the
sensor but it is not a force that the subject is exerting. In this case, the sensor will be tared before
starting the test.");
else if(o == Options.MASS_NOTHING)
str = Catalog.GetString("In some cases the weight is transmitted to the sensor and it
is also supported by the measured limb. If the effect of the mass is not significant, use this option also.");
+ else if(o == Options.REPETITIONS)
+ str = Catalog.GetString("Default is discard eccentric phase");
else //if(o == Options.OTHER)
str = Catalog.GetString("0 means horizontally") + "\n" +
Catalog.GetString("90 means vertically with the person above the sensor") +
"\n" +
@@ -281,6 +300,8 @@ public class ForceSensorExerciseWindow
else if(o == Options.MASS_NOTHING)
str = "1.- " + Catalog.GetString("Nordic hamstring. In a Nordic hamstring with the
sensor attached to the ankle, the weight affects the values of the sensor but this weight is supported by the
hamstrings we are measuring.") +
"\n2.- " + Catalog.GetString("Pulling on a TRX. Pulling from a TRX implies
overcome the body weight. This body weight is also measured by the sensor.");
+ else if(o == Options.REPETITIONS)
+ str = ""; //not shown
else //if(o == Options.OTHER)
str = "";
@@ -305,6 +326,8 @@ public class ForceSensorExerciseWindow
str = Catalog.GetString("Subtract mass");
else if(o == Options.MASS_NOTHING)
str = Catalog.GetString("Mass is included");
+ else if(o == Options.REPETITIONS)
+ str = Catalog.GetString("Discard eccentric phase");
else //if(o == Options.OTHER)
str = Catalog.GetString("Angle explanation");
@@ -345,7 +368,6 @@ public class ForceSensorExerciseWindow
}
else if(p == Pages.FIXATION)
{
-
if(radio_fixation_elastic.Active) {
desc = getDescription(Options.FIXATION_ELASTIC);
ex = getExample(Options.FIXATION_ELASTIC);
@@ -374,6 +396,30 @@ public class ForceSensorExerciseWindow
}
hbox_body_mass_add.Sensitive = radio_mass_add.Active;
}
+ else if(p == Pages.REPETITIONS)
+ {
+ hbox_force_sensor_elastic_ecc_min_displ.Visible = ! check_discard_ecc.Active;
+ hbox_force_sensor_not_elastic_ecc_min_force.Visible = ! check_discard_ecc.Active;
+
+ hbox_detect_repetitions_elastic.Sensitive = ! check_detect_repetitions_default.Active;
+ hbox_detect_repetitions_not_elastic.Sensitive = !
check_detect_repetitions_default.Active;
+
+ if(radio_force_sensor.Active || ! radio_fixation_elastic.Active)
+ {
+ hbox_detect_repetitions_elastic.Visible = false;
+ hbox_detect_repetitions_not_elastic.Visible = true;
+ } else {
+ hbox_detect_repetitions_elastic.Visible = true;
+ hbox_detect_repetitions_not_elastic.Visible = false;
+ }
+
+ desc = getDescription(Options.REPETITIONS);
+ ex = getExample(Options.REPETITIONS);
+ set_notebook_desc_example_labels(Options.REPETITIONS);
+
+ notebook_desc_examples.CurrentPage = 0;
+ notebook_desc_examples.GetNthPage(1).Hide();
+ }
else // if(p == Pages.OTHER)
{
button_next.Visible = false;
@@ -396,7 +442,7 @@ public class ForceSensorExerciseWindow
private void on_button_next_clicked (object o, EventArgs args)
{
if(notebook_main.CurrentPage == Convert.ToInt32(Pages.FORCE) && radio_force_sensor.Active)
- notebook_main.CurrentPage = Convert.ToInt32(Pages.OTHER);
+ notebook_main.CurrentPage = Convert.ToInt32(Pages.REPETITIONS);
else if(notebook_main.CurrentPage < Convert.ToInt32(Pages.OTHER))
notebook_main.CurrentPage ++;
else
@@ -406,7 +452,7 @@ public class ForceSensorExerciseWindow
}
private void on_button_back_clicked (object o, EventArgs args)
{
- if(notebook_main.CurrentPage == Convert.ToInt32(Pages.OTHER) && radio_force_sensor.Active)
+ if(notebook_main.CurrentPage == Convert.ToInt32(Pages.REPETITIONS) &&
radio_force_sensor.Active)
notebook_main.CurrentPage = Convert.ToInt32(Pages.FORCE);
else if(notebook_main.CurrentPage > Convert.ToInt32(Pages.FORCE))
notebook_main.CurrentPage --;
@@ -429,6 +475,16 @@ public class ForceSensorExerciseWindow
managePage(Pages.MASS);
}
+ private void on_check_discard_ecc_toggled (object o, EventArgs args)
+ {
+ managePage(Pages.REPETITIONS);
+ }
+
+ private void on_check_detect_repetitions_default_toggled (object o, EventArgs args)
+ {
+ managePage(Pages.REPETITIONS);
+ }
+
private void on_entry_name_changed (object o, EventArgs args)
{
Gtk.Entry entry = o as Gtk.Entry;
@@ -475,6 +531,10 @@ public class ForceSensorExerciseWindow
}
}
+//TODO: save data of: spin_force_sensor_elastic_ecc_min_displ, ... on SQL and preferences
+//use Preferences.PreferencesChange()
+//store spins as -1 if use preferences
+
//compare exercise (opening window) with exerciseNew (changes maybe done)
//only store percentBodyWeight at SQL if radio_mass_add is active
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]