[chronojump] RunEncoder exercise edit/delete done!



commit 1fff0f5348237ddeb62f58a3fa4174a98a8ae436
Author: Xavier de Blas <xaviblas gmail com>
Date:   Tue Sep 17 18:08:11 2019 +0200

    RunEncoder exercise edit/delete done!

 glade/app1.glade         |   1 +
 src/gui/runEncoder.cs    | 102 +++++++++++++++++++++++++++++++++++++++++++++++
 src/sqlite/runEncoder.cs |  38 ++++++++++++++++++
 3 files changed, 141 insertions(+)
---
diff --git a/glade/app1.glade b/glade/app1.glade
index ea6d2659..84c5d9c3 100644
--- a/glade/app1.glade
+++ b/glade/app1.glade
@@ -7142,6 +7142,7 @@ EncoderInertialCapture</property>
                                                             <property name="receives_default">True</property>
                                                             <property name="has_tooltip">True</property>
                                                             <property name="tooltip" translatable="yes">Edit 
exercise type</property>
+                                                            <signal name="clicked" 
handler="on_button_run_encoder_exercise_edit_clicked" swapped="no"/>
                                                             <child>
                                                             <widget class="GtkImage" 
id="image_run_encoder_exercise_edit">
                                                             <property name="visible">True</property>
diff --git a/src/gui/runEncoder.cs b/src/gui/runEncoder.cs
index b03f7758..cbb4adc6 100644
--- a/src/gui/runEncoder.cs
+++ b/src/gui/runEncoder.cs
@@ -932,6 +932,8 @@ LogB.Information(" fc R ");
                if(runEncoderExercises.Count == 0)
                {
                        runEncoderComboExercisesString = new String [0];
+                       UtilGtk.ComboUpdate(combo_run_encoder_exercise, new String[0], "");
+
                        return;
                }
 
@@ -952,6 +954,48 @@ LogB.Information(" fc R ");
                        combo_run_encoder_exercise.Active = 
UtilGtk.ComboMakeActive(combo_run_encoder_exercise, name);
        }
 
+       //info is now info and edit (all values can be changed), and detete (there's delete button)
+       void on_button_run_encoder_exercise_edit_clicked (object o, EventArgs args)
+       {
+               if(UtilGtk.ComboGetActive(combo_run_encoder_exercise) == "")
+               {
+                       new DialogMessage(Constants.MessageTypes.WARNING, Catalog.GetString("Need to 
create/select an exercise."));
+                       return;
+               }
+
+               RunEncoderExercise ex = (RunEncoderExercise) SqliteRunEncoderExercise.Select (
+                                false, getExerciseIDFromAnyCombo(combo_run_encoder_exercise, 
forceSensorComboExercisesString, false), false)[0];
+
+               LogB.Information("selected exercise: " + ex.ToString());
+
+               ArrayList bigArray = new ArrayList();
+
+               ArrayList a1 = new ArrayList();
+               ArrayList a2 = new ArrayList();
+
+               //0 is the widgget to show; 1 is the editable; 2 id default value
+               a1.Add(Constants.GenericWindowShow.ENTRY); a1.Add(true); a1.Add(ex.Name); //name can be 
changed (opposite to encoder), because we use always the uniqueID
+               bigArray.Add(a1);
+
+               a2.Add(Constants.GenericWindowShow.ENTRY2); a2.Add(true); a2.Add(ex.Description);
+               bigArray.Add(a2);
+
+               genericWin = GenericWindow.Show(Catalog.GetString("Exercise"), false,   //don't show now
+                               Catalog.GetString("Force sensor exercise:"), bigArray);
+               genericWin.LabelEntry2 = Catalog.GetString("Description");
+
+               genericWin.ShowButtonCancel(false);
+
+               genericWin.ShowButtonDelete(true);
+               genericWin.Button_delete.Clicked += new EventHandler(on_button_run_encoder_exercise_delete);
+
+               genericWin.nameUntranslated = ex.Name;
+               genericWin.uniqueID = ex.UniqueID;
+
+               genericWin.Button_accept.Clicked += new 
EventHandler(on_button_run_encoder_exercise_edit_accepted);
+               genericWin.ShowNow();
+       }
+
        private void on_button_run_encoder_exercise_add_clicked (object o, EventArgs args)
        {
                ArrayList bigArray = new ArrayList();
@@ -978,6 +1022,14 @@ LogB.Information(" fc R ");
                genericWin.ShowNow();
        }
 
+       void on_button_run_encoder_exercise_edit_accepted (object o, EventArgs args)
+       {
+               if(run_encoder_exercise_do_add_or_edit(false))
+               {
+                       genericWin.Button_accept.Clicked -= new 
EventHandler(on_button_run_encoder_exercise_edit_accepted);
+                       genericWin.HideAndNull();
+               }
+       }
        void on_button_run_encoder_exercise_add_accepted (object o, EventArgs args)
        {
                if(run_encoder_exercise_do_add_or_edit(true))
@@ -1019,6 +1071,56 @@ LogB.Information(" fc R ");
                return false;
        }
 
+       //based on: on_button_encoder_exercise_delete
+       //maybe unify them on the future
+       void on_button_run_encoder_exercise_delete (object o, EventArgs args)
+       {
+               int exerciseID = genericWin.uniqueID;
+
+               //1st find if there are sets with this exercise
+               ArrayList array = SqliteRunEncoder.SelectRowsOfAnExercise(false, exerciseID);
+
+               if(array.Count > 0) {
+                       //there are some records of this exercise on encoder table, do not delete
+                       genericWin.SetTextview(
+                                       Catalog.GetString("Sorry, this exercise cannot be deleted until these 
tests are deleted:"));
+
+                       ArrayList nonSensitiveRows = new ArrayList();
+                       for(int i=0; i < array.Count; i ++)
+                               nonSensitiveRows.Add(i);
+
+                       genericWin.SetTreeview(
+                                       new string [] {
+                                       "count",        //not shown, unused
+                                       Catalog.GetString("Sets"), Catalog.GetString("Person"),
+                                       Catalog.GetString("Session"), Catalog.GetString("Date") },
+                                       false, array, nonSensitiveRows, GenericWindow.EditActions.NONE, 
false);
+
+                       genericWin.ShowTextview();
+                       genericWin.ShowTreeview();
+                       genericWin.ShowButtonDelete(false);
+                       genericWin.DeletingExerciseHideSomeWidgets();
+
+                       genericWin.Button_accept.Clicked -= new 
EventHandler(on_button_run_encoder_exercise_edit_accepted);
+                       genericWin.Button_accept.Clicked += new 
EventHandler(on_button_run_encoder_exercise_do_not_delete);
+               } else {
+                       //forceSensor table has not records of this exercise. Delete exercise
+                       SqliteRunEncoderExercise.Delete(false, exerciseID);
+
+                       genericWin.HideAndNull();
+
+                       fillRunEncoderExerciseCombo("");
+                       combo_run_encoder_exercise.Active = 0;
+
+                       new DialogMessage(Constants.MessageTypes.INFO, Catalog.GetString("Exercise 
deleted."));
+               }
+       }
+
+       //accept does not save changes, just closes window
+       void on_button_run_encoder_exercise_do_not_delete (object o, EventArgs args) {
+               genericWin.Button_accept.Clicked -= new 
EventHandler(on_button_run_encoder_exercise_do_not_delete);
+               genericWin.HideAndNull();
+       }
        // -------------------------------- end of exercise stuff --------------------
 
 }
diff --git a/src/sqlite/runEncoder.cs b/src/sqlite/runEncoder.cs
index a9bbaf3c..ef129f00 100644
--- a/src/sqlite/runEncoder.cs
+++ b/src/sqlite/runEncoder.cs
@@ -167,6 +167,44 @@ class SqliteRunEncoder : Sqlite
                return array;
        }
 
+       public static ArrayList SelectRowsOfAnExercise(bool dbconOpened, int exerciseID)
+       {
+               openIfNeeded(dbconOpened);
+
+               dbcmd.CommandText = "select count(*), " +
+                       Constants.PersonTable + ".name, " +
+                       Constants.SessionTable + ".name, " +
+                       Constants.SessionTable + ".date " +
+                       " FROM " + table + ", " + Constants.PersonTable + ", " + Constants.SessionTable +
+                       " WHERE exerciseID == " + exerciseID +
+                       " AND " + Constants.PersonTable + ".uniqueID == " + table + ".personID " +
+                       " AND " + Constants.SessionTable + ".uniqueID == " + table + ".sessionID " +
+                       " GROUP BY sessionID, personID";
+
+               LogB.SQL(dbcmd.CommandText.ToString());
+               dbcmd.ExecuteNonQuery();
+               SqliteDataReader reader;
+               reader = dbcmd.ExecuteReader();
+
+               ArrayList array = new ArrayList();
+               int count = 0;
+               while(reader.Read()) {
+                       array.Add(new string [] {
+                                       count.ToString(),
+                                       reader[0].ToString(), //count
+                                       reader[1].ToString(), //person name
+                                       reader[2].ToString(), //session name
+                                       reader[3].ToString()  //session date
+                       });
+                       count ++;
+               }
+
+               reader.Close();
+               closeIfNeeded(dbconOpened);
+
+               return array;
+       }
+
        protected internal static void import_from_1_70_to_1_71() //database is opened
        {
                LogB.PrintAllThreads = true; //TODO: remove this


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