[chronojump] force sensor: Loading set selects the person if at session and more params



commit 67f039ed75b7094881f5083f3e0b9be634f595e6
Author: Xavier de Blas <xaviblas gmail com>
Date:   Wed Jul 17 13:37:22 2019 +0200

    force sensor: Loading set selects the person if at session and more params

 src/constants.cs       |  7 ++++-
 src/forceSensor.cs     | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++
 src/gui/forceSensor.cs | 40 +++++++++++++++++++++++--
 src/sqlite/person.cs   |  3 ++
 4 files changed, 127 insertions(+), 4 deletions(-)
---
diff --git a/src/constants.cs b/src/constants.cs
index 553daa3e..0db2712c 100644
--- a/src/constants.cs
+++ b/src/constants.cs
@@ -940,7 +940,12 @@ public class Constants
                
        public enum Encoder1RMMethod { NONWEIGHTED, WEIGHTED, WEIGHTED2, WEIGHTED3 }
        public enum ContextMenu { NONE, EDITDELETE, DELETE }
-       
+
+       //on glade/app1 using the same names
+       public const string ForceSensorLateralityBoth = "Both";
+       public const string ForceSensorLateralityLeft = "Left";
+       public const string ForceSensorLateralityRight = "Right";
+
        public enum EncoderAutoSaveCurve { ALL, NONE, BEST, FROM4TOPENULTIMATE } //note last mode not need to 
be 4 because DB 1.63 introduces the config of this value
 
        //BIGGEST_TC will be the default mode.
diff --git a/src/forceSensor.cs b/src/forceSensor.cs
index 82888bbf..a00b1d0c 100644
--- a/src/forceSensor.cs
+++ b/src/forceSensor.cs
@@ -1029,3 +1029,84 @@ public class ForceSensorAnalyzeInstant
        }
 
 }
+
+//we need this class because we started using foresensor without database (only text files)
+public class ForceSensorLoadTryToAssignPersonAndMore
+{
+       private string filename; //filename comes without extension
+       private int currentSessionID; //we get a person if already exists on that session
+       public string Exercise;
+       public string Laterality;
+       public string Comment;
+
+       public ForceSensorLoadTryToAssignPersonAndMore(string filename, int currentSessionID)
+       {
+               this.filename = filename;
+               this.currentSessionID = currentSessionID;
+
+               Exercise = "";
+               Laterality = "";
+               Comment = "";
+       }
+
+       public Person GetPerson()
+       {
+               string personName = getNameAndMore();
+               if(personName == "")
+                       return new Person(-1);
+
+               Person p = SqlitePerson.SelectByName(personName);
+               if(SqlitePersonSession.PersonSelectExistsInSession(p.UniqueID, currentSessionID))
+                       return p;
+
+               return new Person(-1);
+       }
+
+       private string getNameAndMore()
+       {
+               string [] strFull = filename.Split(new char[] {'_'});
+
+               /*
+                * At 1.8.1-95 filename was: personName_date_hour
+                * Later filename was:
+                *      personName_exercisename_laterality_date_hour
+                *      or
+                *      personName_exercisename_laterality_comment_date_hour
+                *      note comment can have more _ so it can be
+                *      personName_exercisename_laterality_mycomment_with_some_underscores_date_hour
+                */
+               if(strFull.Length == 3)
+                       return strFull[0];
+               else if(strFull.Length >= 5)
+               {
+                       //strFull[1] is the exercise, but check that it existst on database
+                       if(Sqlite.Exists(false, Constants.ForceSensorExerciseTable, strFull[1]))
+                               Exercise = strFull[1];
+
+                       if(
+                                       strFull[2] == Catalog.GetString(Constants.ForceSensorLateralityBoth) 
||
+                                       strFull[2] == Catalog.GetString(Constants.ForceSensorLateralityLeft) 
||
+                                       strFull[2] == Catalog.GetString(Constants.ForceSensorLateralityRight) 
)
+                               Laterality = strFull[2];
+
+                       if(strFull.Length == 6)
+                               Comment = strFull[3];
+                       else if(strFull.Length > 6) //comments with underscores
+                       {
+                               string myComment = "";
+                               string sep = "";
+                               for(int i = 3; i <= strFull.Length -3; i ++)
+                               {
+                                       myComment += sep + strFull[i];
+                                       sep = "_";
+                               }
+
+                               Comment = myComment;
+                       }
+
+                       return strFull[0];
+               }
+
+               return "";
+       }
+}
diff --git a/src/gui/forceSensor.cs b/src/gui/forceSensor.cs
index 7bf62c74..d1122148 100644
--- a/src/gui/forceSensor.cs
+++ b/src/gui/forceSensor.cs
@@ -1204,6 +1204,31 @@ LogB.Information(" re R ");
                if (filechooser.Run () == (int)ResponseType.Accept)
                {
                        lastForceSensorFile = 
Util.RemoveExtension(Util.GetLastPartOfPath(filechooser.Filename));
+
+                       //try to change currentPerson on loading set
+                       ForceSensorLoadTryToAssignPersonAndMore fslt = new 
ForceSensorLoadTryToAssignPersonAndMore(lastForceSensorFile, currentSession.UniqueID);
+                       Person p = fslt.GetPerson();
+                       if(p.UniqueID != -1)
+                       {
+                               currentPerson = p;
+                               currentPersonSession = SqlitePersonSession.Select(currentPerson.UniqueID, 
currentSession.UniqueID);
+                               if(fslt.Exercise != "")
+                                       combo_force_sensor_exercise.Active = 
UtilGtk.ComboMakeActive(combo_force_sensor_exercise, fslt.Exercise);
+                               if(fslt.Laterality != "")
+                                       setLaterality(fslt.Laterality);
+                               if(fslt.Comment != "")
+                                       textview_force_sensor_capture_comment.Buffer.Text = fslt.Comment;
+
+                               int rowToSelect = myTreeViewPersons.FindRow(p.UniqueID);
+                               if(rowToSelect != -1) {
+                                       //this will update also currentPerson
+                                       selectRowTreeView_persons(treeview_persons, rowToSelect);
+                               }
+
+                               label_person_change();
+                               personChanged();
+                       }
+
                        lastForceSensorFullPath = filechooser.Filename; //used on recalculate
 
                        forceSensorCopyTempAndDoGraphs();
@@ -1924,11 +1949,20 @@ LogB.Information(" re R ");
        private string getLaterality()
        {
                if(radio_force_sensor_laterality_both.Active)
-                       return Catalog.GetString("Both");
+                       return Catalog.GetString(Constants.ForceSensorLateralityBoth);
                else if(radio_force_sensor_laterality_l.Active)
-                       return Catalog.GetString("Left");
+                       return Catalog.GetString(Constants.ForceSensorLateralityLeft);
                else //if(radio_force_sensor_laterality_r.Active)
-                       return Catalog.GetString("Right");
+                       return Catalog.GetString(Constants.ForceSensorLateralityRight);
+       }
+       private void setLaterality(string s)
+       {
+               if(s == Catalog.GetString(Constants.ForceSensorLateralityBoth))
+                       radio_force_sensor_laterality_both.Active = true;
+               else if(s == Catalog.GetString(Constants.ForceSensorLateralityLeft))
+                       radio_force_sensor_laterality_l.Active = true;
+               else if(s == Catalog.GetString(Constants.ForceSensorLateralityRight))
+                       radio_force_sensor_laterality_r.Active = true;
        }
 
        private string getCaptureComment()
diff --git a/src/sqlite/person.cs b/src/sqlite/person.cs
index e1bb6891..3659c813 100644
--- a/src/sqlite/person.cs
+++ b/src/sqlite/person.cs
@@ -94,6 +94,9 @@ class SqlitePerson : Sqlite
        public static Person Select(int uniqueID) {
                return Select(false, " WHERE uniqueID = " + uniqueID);
        }
+       public static Person SelectByName(string name) {
+               return Select(false, " WHERE name = \"" + name + "\"");
+       }
        public static Person SelectByRFID(string rfid) {
                return Select(false, " WHERE future1 = \"" + rfid + "\"");
        }


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