[chronojump] Deleting signals deletes related curves (both SQL and files)



commit c068f1f8fe962f13c9c3019d86892d5f4255125e
Author: Xavier de Blas <xaviblas gmail com>
Date:   Tue May 20 19:07:37 2014 +0200

    Deleting signals deletes related curves (both SQL and files)

 src/gui/encoder.cs    |   75 ++++++++++++++++++++++++++++++++++---------------
 src/sqlite/encoder.cs |    1 +
 src/sqlite/main.cs    |   15 ++++++++++
 src/util.cs           |    8 ++++-
 4 files changed, 74 insertions(+), 25 deletions(-)
---
diff --git a/src/gui/encoder.cs b/src/gui/encoder.cs
index 36c14b3..1035a05 100644
--- a/src/gui/encoder.cs
+++ b/src/gui/encoder.cs
@@ -1315,7 +1315,7 @@ public partial class ChronoJumpWindow
        protected void on_encoder_load_signal_row_delete_pre (object o, EventArgs args) {
                if(askDeletion) {
                        ConfirmWindow confirmWin = ConfirmWindow.Show(Catalog.GetString(
-                                               "Are you sure you want to delete this signal?"), "", "");
+                                               "Are you sure you want to delete this signal?"), 
Catalog.GetString("Related curves will also be deleted."), "");
                        confirmWin.Button_accept.Clicked += new 
EventHandler(on_encoder_load_signal_row_delete);
                } else
                        on_encoder_load_signal_row_delete (o, args);
@@ -1324,25 +1324,55 @@ public partial class ChronoJumpWindow
        protected void on_encoder_load_signal_row_delete (object o, EventArgs args) {
                Log.WriteLine("row delete at load signal");
 
-               int uniqueID = genericWin.TreeviewSelectedUniqueID;
-               Log.WriteLine(uniqueID.ToString());
+               int signalID = genericWin.TreeviewSelectedUniqueID;
+               Log.WriteLine(signalID.ToString());
 
                //if it's current signal use the delete signal from the gui interface that updates gui
-               if(uniqueID == Convert.ToInt32(encoderSignalUniqueID))
+               if(signalID == Convert.ToInt32(encoderSignalUniqueID))
                        on_button_encoder_delete_signal_accepted (o, args);
                else {
                        EncoderSQL eSQL = (EncoderSQL) SqliteEncoder.Select(
-                                       false, uniqueID, 0, 0, "", false, true)[0];
-                       //remove the file
-                       bool deletedOk = Util.FileDelete(eSQL.GetFullURL(false));       //don't convertPathToR
-                       if(deletedOk)  
-                               Sqlite.Delete(false, Constants.EncoderTable, Convert.ToInt32(uniqueID));
+                                       false, signalID, 0, 0, "signal", false, true)[0];
+               
+                       //delete signal and related curves (both from SQL and files)
+                       encoderSignalDelete(eSQL.GetFullURL(false), signalID);  //don't convertPathToR
 
                        //genericWin selected row is deleted, unsensitive the "load" button
                        genericWin.SetButtonAcceptSensitive(false);
                }
                genericWin.Delete_row_accepted();
        }
+
+       void encoderSignalDelete (string signalURL, int signalID) 
+       {
+               //remove signal file
+               bool deletedOk = Util.FileDelete(signalURL);
+
+               //delete signal from encoder table
+               Sqlite.Delete(false, Constants.EncoderTable, signalID);
+
+               //find related curves using encoderSignalCurve table
+               ArrayList linkedCurves = SqliteEncoder.SelectSignalCurve(
+                               false, signalID, -1, -1, -1);   //DBopened, signal, curve, msStart, msEnd
+               
+               //delete related curves: files and records from encoder table
+               foreach(EncoderSignalCurve esc in linkedCurves) 
+               {
+                       //select related curves to find URL
+                       EncoderSQL eSQL = (EncoderSQL) SqliteEncoder.Select(
+                                       false, esc.curveID, -1, -1, "curve", false, true)[0];
+                       
+                       //delete file
+                       Util.FileDelete(eSQL.GetFullURL(false));        //don't convertPathToR
+
+                       //delete curve from encoder table
+                       Sqlite.Delete(false, Constants.EncoderTable, esc.curveID);
+               }
+               
+               //delete related records from encoderSignalCurve table
+               Sqlite.DeleteSelectingField(false, Constants.EncoderSignalCurveTable, 
+                               "signalID", signalID.ToString());
+       }
        
        void on_button_encoder_export_all_curves_clicked (object o, EventArgs args) 
        {
@@ -1516,7 +1546,7 @@ public partial class ChronoJumpWindow
        {
                if(askDeletion) {
                        ConfirmWindow confirmWin = ConfirmWindow.Show(Catalog.GetString(
-                                               "Are you sure you want to delete this signal?"), "", "");
+                                               "Are you sure you want to delete this signal?"), 
Catalog.GetString("Related curves will also be deleted."), "");
                        confirmWin.Button_accept.Clicked += new 
EventHandler(on_button_encoder_delete_signal_accepted);
                } else
                        on_button_encoder_delete_signal_accepted (o, args);
@@ -1525,19 +1555,18 @@ public partial class ChronoJumpWindow
        void on_button_encoder_delete_signal_accepted (object o, EventArgs args) 
        {
                EncoderSQL eSQL = (EncoderSQL) SqliteEncoder.Select(
-                               false, Convert.ToInt32(encoderSignalUniqueID), 0, 0, "", false, true)[0];
-               //remove the file
-               bool deletedOk = Util.FileDelete(eSQL.GetFullURL(false));       //don't convertPathToR
-               if(deletedOk) {
-                       Sqlite.Delete(false, Constants.EncoderTable, Convert.ToInt32(encoderSignalUniqueID));
-                       encoderSignalUniqueID = "-1";
-                       image_encoder_capture.Sensitive = false;
-                       treeviewEncoderCaptureRemoveColumns();
-                       UtilGtk.ErasePaint(encoder_capture_curves_bars_drawingarea, 
encoder_capture_curves_bars_pixmap);
-                       encoderButtonsSensitive(encoderSensEnum.DONENOSIGNAL);
-                       encoder_pulsebar_capture.Text = Catalog.GetString("Signal deleted");
-                       //entry_encoder_signal_comment.Text = "";
-               }
+                               false, Convert.ToInt32(encoderSignalUniqueID), 0, 0, "signal", false, 
true)[0];
+
+               //delete signal and related curves (both from SQL and files)
+               encoderSignalDelete(eSQL.GetFullURL(false), Convert.ToInt32(encoderSignalUniqueID));
+
+               encoderSignalUniqueID = "-1";
+               image_encoder_capture.Sensitive = false;
+               treeviewEncoderCaptureRemoveColumns();
+               UtilGtk.ErasePaint(encoder_capture_curves_bars_drawingarea, 
encoder_capture_curves_bars_pixmap);
+               encoderButtonsSensitive(encoderSensEnum.DONENOSIGNAL);
+               encoder_pulsebar_capture.Text = Catalog.GetString("Signal deleted");
+               //entry_encoder_signal_comment.Text = "";
        }
 
        private int getActiveCurvesNum(ArrayList curvesArray) {
diff --git a/src/sqlite/encoder.cs b/src/sqlite/encoder.cs
index e20068b..4d67438 100644
--- a/src/sqlite/encoder.cs
+++ b/src/sqlite/encoder.cs
@@ -140,6 +140,7 @@ class SqliteEncoder : Sqlite
        
        //pass uniqueID value and then will return one record. do like this:
        //EncoderSQL eSQL = (EncoderSQL) SqliteEncoder.Select(false, myUniqueID, 0, 0, "")[0];
+       //don't care for the 0, 0 , because selection will be based on the myUniqueID and only one row will 
be returned
        //or
        //pass uniqueID==-1 and personID, sessionID, signalOrCurve values, and will return some records
        //personID can be -1 to get all on that session
diff --git a/src/sqlite/main.cs b/src/sqlite/main.cs
index 6589a24..377fef7 100644
--- a/src/sqlite/main.cs
+++ b/src/sqlite/main.cs
@@ -2519,6 +2519,21 @@ Console.WriteLine("5" + tableName);
                if( ! dbconOpened)
                        dbcon.Close();
        }
+       
+       public static void DeleteSelectingField(bool dbconOpened, string tableName, string fieldName, string 
id)
+       {
+               if( ! dbconOpened)
+                       dbcon.Open();
+
+               dbcmd.CommandText = "Delete FROM " + tableName +
+                       " WHERE " + fieldName + " == " + id;
+               Log.WriteLine(dbcmd.CommandText.ToString());
+               dbcmd.ExecuteNonQuery();
+               
+               if( ! dbconOpened)
+                       dbcon.Close();
+       }
+
 
        public static void DeleteFromName(bool dbconOpened, string tableName, string name)
        {
diff --git a/src/util.cs b/src/util.cs
index 63a68c7..c815957 100644
--- a/src/util.cs
+++ b/src/util.cs
@@ -15,7 +15,7 @@
  *  along with this program; if not, write to the Free Software
  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- *  Copyright (C) 2004-2012   Xavier de Blas <xaviblas gmail com> 
+ *  Copyright (C) 2004-2014   Xavier de Blas <xaviblas gmail com> 
  */
 
 using System;
@@ -887,10 +887,14 @@ public class Util
        public static bool FileDelete(string fileName) {
                try {
                        if(File.Exists(fileName)) {
+                               Log.WriteLine("Deleting " + fileName + " ...");
                                File.Delete(fileName);
+                               Log.WriteLine("Deleted");
                                return true;
                        }
-               } catch {}
+               } catch {
+                       Log.WriteLine("Problem deleting");
+               }
                return false;
        }
        


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