Added error checks on calibration data

Mon, 16 Oct 2023 11:39:20 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Mon, 16 Oct 2023 11:39:20 +0200
changeset 511
c6fa5be47634
parent 510
080524ab2fe8
child 512
1dfae8de6ca9

Added error checks on calibration data

src/CalibrateiSpindel.cpp file | annotate | diff | comparison | revisions
src/CalibrateiSpindel.h file | annotate | diff | comparison | revisions
translations/bmsapp_en.ts file | annotate | diff | comparison | revisions
translations/bmsapp_nl.ts file | annotate | diff | comparison | revisions
ui/CalibrateiSpindel.ui file | annotate | diff | comparison | revisions
--- a/src/CalibrateiSpindel.cpp	Sun Oct 15 17:37:08 2023 +0200
+++ b/src/CalibrateiSpindel.cpp	Mon Oct 16 11:39:20 2023 +0200
@@ -110,6 +110,7 @@
     QWidget* pWidget;
     QHBoxLayout* pLayout;
     double  d, x[12], y[12];
+    bool gerror, aerror;
 
     qDebug() << "refreshTable" << oldtotal << newtotal;
 
@@ -136,6 +137,7 @@
     std::sort(nCal.begin() , nCal.end(), [=]( const Calibrate& test1 , const Calibrate& test2 )->bool {
 	return test2.angle < test1.angle;
     });
+    this->dataHasErrors = false;
 
     for (int i = 0; i < newtotal; i++) {
 	qDebug() << i << nCal[i].sg << nCal[i].plato << nCal[i].angle;
@@ -143,19 +145,41 @@
 	y[i] = nCal[i].plato;
 	x[i] = nCal[i].angle;
 
+	gerror = aerror = false;
+	if ((nCal[i].angle < 10) || (nCal[i].angle > 80))
+	    aerror = true;
+	if (i == 0) {
+	    if (nCal[0].plato <= nCal[1].plato)
+	    	gerror = true;
+	} else if (i == (newtotal -1)) {
+	    if (nCal[i].plato != 0)
+	    	gerror = true;
+	} else {
+	    if ((nCal[i].plato <= nCal[i + 1].plato) || (nCal[i].plato >= nCal[i - 1].plato))
+		gerror = true;
+	}
+	if (gerror || aerror)
+	    this->dataHasErrors = true;
+
 	w = QString("%1").arg(nCal[i].sg, 1, 'f', 4, '0');
 	QTableWidgetItem *item = new QTableWidgetItem(w);
 	item->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
+	if (gerror)
+	    item->setForeground(QBrush(QColor(Qt::red)));
 	ui->dataTable->setItem(i, 0, item);
 
 	w = QString("%1").arg(nCal[i].plato, 1, 'f', 3, '0');
         item = new QTableWidgetItem(w);
         item->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
+	if (gerror)
+	    item->setForeground(QBrush(QColor(Qt::red)));
         ui->dataTable->setItem(i, 1, item);
 
 	w = QString("%1").arg(nCal[i].angle, 1, 'f', 5, '0');
         item = new QTableWidgetItem(w);
         item->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
+	if (aerror)
+	    item->setForeground(QBrush(QColor(Qt::red)));
         ui->dataTable->setItem(i, 2, item);
 
 	/* Add the Delete row button */
@@ -182,7 +206,6 @@
     this->textIsChanged = (_data_old.compare(_data_new) == 0) ? false:true;
     qDebug() << "changed" << this->textIsChanged << _data_old.compare(_data_new);
     CalibrateiSpindel::WindowTitle();
-    ui->saveButton->setEnabled(this->textIsChanged);
 
     new_plot = new QLineSeries();
     old_plot = new QLineSeries();
@@ -242,7 +265,12 @@
                                 QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Save);
         switch (rc) {
             case QMessageBox::Save:
-                        on_saveButton_clicked();
+		    	if (this->dataHasErrors) {
+			    QMessageBox::warning(this, tr("iSpindel calibrate"), tr("Data is changed but has errors, not saving."));
+			    return;	/* Return to the editor page */
+			} else {
+                            SaveData();
+			}
                         break;  /* Saved and then Quit */
             case QMessageBox::Discard:
                         break;  /* Quit without Save */
@@ -256,7 +284,7 @@
 }
 
 
-void CalibrateiSpindel::on_saveButton_clicked()
+void CalibrateiSpindel::SaveData()
 {
     QSqlQuery query;
 
--- a/src/CalibrateiSpindel.h	Sun Oct 15 17:37:08 2023 +0200
+++ b/src/CalibrateiSpindel.h	Mon Oct 16 11:39:20 2023 +0200
@@ -28,7 +28,6 @@
 
 private slots:
     void on_quitButton_clicked();
-    void on_saveButton_clicked();
     void refreshTable(void);
     void on_addButton_clicked();
     void on_deleteRow_clicked();
@@ -44,12 +43,13 @@
     QJsonDocument data;
     bool ignoreChanges = false;
     bool textIsChanged = false;
+    bool dataHasErrors = false;
     double Old[4], New[4];
     QList<Calibrate> oCal;
     QList<Calibrate> nCal;
 
-    bool sort_test(const Calibrate &D1, const Calibrate &D2);
     void WindowTitle();
+    void SaveData();
 };
 
 #endif
--- a/translations/bmsapp_en.ts	Sun Oct 15 17:37:08 2023 +0200
+++ b/translations/bmsapp_en.ts	Mon Oct 16 11:39:20 2023 +0200
@@ -60,22 +60,22 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ui/CalibrateiSpindel.ui" line="114"/>
+        <location filename="../ui/CalibrateiSpindel.ui" line="94"/>
         <source>Data:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ui/CalibrateiSpindel.ui" line="130"/>
+        <location filename="../ui/CalibrateiSpindel.ui" line="110"/>
         <source>Add</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ui/CalibrateiSpindel.ui" line="147"/>
+        <location filename="../ui/CalibrateiSpindel.ui" line="127"/>
         <source>Old formula:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ui/CalibrateiSpindel.ui" line="163"/>
+        <location filename="../ui/CalibrateiSpindel.ui" line="143"/>
         <source>New formula:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -85,99 +85,100 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ui/CalibrateiSpindel.ui" line="87"/>
-        <source>Save</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="122"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="123"/>
         <source>SG</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="122"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="123"/>
         <source>°Plato</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="122"/>
-        <location filename="../src/CalibrateiSpindel.cpp" line="209"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="123"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="232"/>
         <source>Angle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="122"/>
-        <location filename="../src/CalibrateiSpindel.cpp" line="165"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="123"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="189"/>
         <source>Del</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="197"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="220"/>
         <source>Old</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="198"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="221"/>
         <source>New</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="201"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="224"/>
         <source>Calibration plot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="241"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="264"/>
         <source>iSpindel calibrate changed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="241"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="264"/>
         <source>The calibration data has been modified. Save changes?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="288"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="269"/>
+        <source>Data is changed but has errors, not saving.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/CalibrateiSpindel.cpp" line="316"/>
         <source>Database error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="289"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="317"/>
         <source>MySQL error: %1
 %2
 %3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="307"/>
-        <location filename="../src/CalibrateiSpindel.cpp" line="346"/>
-        <location filename="../src/CalibrateiSpindel.cpp" line="355"/>
-        <location filename="../src/CalibrateiSpindel.cpp" line="364"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="269"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="335"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="374"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="383"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="392"/>
         <source>iSpindel calibrate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="307"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="335"/>
         <source>You cannot delete too many rows.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="346"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="374"/>
         <source>The SG must be between 1.000 and 1.100.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="355"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="383"/>
         <source>Plato must be between 0 and 25.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="364"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="392"/>
         <source>The tilt angles must be between 10 and 80.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="381"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="409"/>
         <source>BMSapp - Calibrate iSpindel %1</source>
         <translation type="unfinished"></translation>
     </message>
--- a/translations/bmsapp_nl.ts	Sun Oct 15 17:37:08 2023 +0200
+++ b/translations/bmsapp_nl.ts	Mon Oct 16 11:39:20 2023 +0200
@@ -90,22 +90,22 @@
         <translation type="unfinished">Naam:</translation>
     </message>
     <message>
-        <location filename="../ui/CalibrateiSpindel.ui" line="114"/>
+        <location filename="../ui/CalibrateiSpindel.ui" line="94"/>
         <source>Data:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ui/CalibrateiSpindel.ui" line="130"/>
+        <location filename="../ui/CalibrateiSpindel.ui" line="110"/>
         <source>Add</source>
         <translation type="unfinished">Nieuw</translation>
     </message>
     <message>
-        <location filename="../ui/CalibrateiSpindel.ui" line="147"/>
+        <location filename="../ui/CalibrateiSpindel.ui" line="127"/>
         <source>Old formula:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ui/CalibrateiSpindel.ui" line="163"/>
+        <location filename="../ui/CalibrateiSpindel.ui" line="143"/>
         <source>New formula:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -114,9 +114,8 @@
         <translation type="obsolete">Naam van het vergisting profiel</translation>
     </message>
     <message>
-        <location filename="../ui/CalibrateiSpindel.ui" line="87"/>
         <source>Save</source>
-        <translation type="unfinished">Bewaar</translation>
+        <translation type="obsolete">Bewaar</translation>
     </message>
     <message>
         <source>Steps:</source>
@@ -144,59 +143,64 @@
         <translation type="unfinished">Terug</translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="122"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="123"/>
         <source>SG</source>
         <translation type="unfinished">SG</translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="122"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="123"/>
         <source>°Plato</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="122"/>
-        <location filename="../src/CalibrateiSpindel.cpp" line="209"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="123"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="232"/>
         <source>Angle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="122"/>
-        <location filename="../src/CalibrateiSpindel.cpp" line="165"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="123"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="189"/>
         <source>Del</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="197"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="220"/>
         <source>Old</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="198"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="221"/>
         <source>New</source>
         <translation type="unfinished">Nieuw</translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="201"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="224"/>
         <source>Calibration plot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="241"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="264"/>
         <source>iSpindel calibrate changed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="241"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="264"/>
         <source>The calibration data has been modified. Save changes?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="288"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="269"/>
+        <source>Data is changed but has errors, not saving.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/CalibrateiSpindel.cpp" line="316"/>
         <source>Database error</source>
         <translation type="unfinished">Database fout</translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="289"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="317"/>
         <source>MySQL error: %1
 %2
 %3</source>
@@ -205,35 +209,36 @@
 %3</translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="307"/>
-        <location filename="../src/CalibrateiSpindel.cpp" line="346"/>
-        <location filename="../src/CalibrateiSpindel.cpp" line="355"/>
-        <location filename="../src/CalibrateiSpindel.cpp" line="364"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="269"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="335"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="374"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="383"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="392"/>
         <source>iSpindel calibrate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="307"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="335"/>
         <source>You cannot delete too many rows.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="346"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="374"/>
         <source>The SG must be between 1.000 and 1.100.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="355"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="383"/>
         <source>Plato must be between 0 and 25.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="364"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="392"/>
         <source>The tilt angles must be between 10 and 80.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="381"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="409"/>
         <source>BMSapp - Calibrate iSpindel %1</source>
         <translation type="unfinished"></translation>
     </message>
--- a/ui/CalibrateiSpindel.ui	Sun Oct 15 17:37:08 2023 +0200
+++ b/ui/CalibrateiSpindel.ui	Mon Oct 16 11:39:20 2023 +0200
@@ -51,7 +51,7 @@
      <widget class="QPushButton" name="quitButton">
       <property name="geometry">
        <rect>
-        <x>110</x>
+        <x>462</x>
         <y>510</y>
         <width>80</width>
         <height>23</height>
@@ -71,26 +71,6 @@
         <normaloff>:icons/silk/door_out.png</normaloff>:icons/silk/door_out.png</iconset>
       </property>
      </widget>
-     <widget class="QPushButton" name="saveButton">
-      <property name="enabled">
-       <bool>false</bool>
-      </property>
-      <property name="geometry">
-       <rect>
-        <x>820</x>
-        <y>510</y>
-        <width>80</width>
-        <height>23</height>
-       </rect>
-      </property>
-      <property name="text">
-       <string>Save</string>
-      </property>
-      <property name="icon">
-       <iconset>
-        <normaloff>:icons/silk/disk.png</normaloff>:icons/silk/disk.png</iconset>
-      </property>
-     </widget>
      <widget class="QTableWidget" name="dataTable">
       <property name="geometry">
        <rect>
@@ -225,7 +205,6 @@
  <tabstops>
   <tabstop>nameEdit</tabstop>
   <tabstop>quitButton</tabstop>
-  <tabstop>saveButton</tabstop>
  </tabstops>
  <resources>
   <include location="../../../../../../home/mbroek/MyProjects/bmsapp/resources/icons.qrc"/>

mercurial