Changed xCal array to a QList. Added sort on angle. Added save data. Added quit/save dialog.

Sun, 15 Oct 2023 17:37:08 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Sun, 15 Oct 2023 17:37:08 +0200
changeset 510
080524ab2fe8
parent 509
af4a8649245e
child 511
c6fa5be47634

Changed xCal array to a QList. Added sort on angle. Added save data. Added quit/save dialog.

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
--- a/src/CalibrateiSpindel.cpp	Sun Oct 15 13:30:24 2023 +0200
+++ b/src/CalibrateiSpindel.cpp	Sun Oct 15 17:37:08 2023 +0200
@@ -57,6 +57,7 @@
 	_node = query.value("node").toString();
 	_alias = query.value("alias").toString();
 	ui->nameEdit->setText(_node+"/"+_alias);
+	qDebug() << query.value("calibrate").toString();
 
 	QJsonParseError parseError;
         const auto& json = query.value("calibrate").toString();
@@ -83,9 +84,12 @@
 		oldtotal = 0;
 		for (int i = 0; i < calData.size(); i++) {
 		    QJsonObject calObj = calData.at(i).toObject();
-		    oCal[i].plato = nCal[i].plato = calObj["plato"].toDouble();
-		    oCal[i].angle = nCal[i].angle = calObj["angle"].toDouble();
-		    oCal[i].sg = nCal[i].sg = Utils::plato_to_sg(oCal[i].plato);
+		    Calibrate c;
+		    c.plato = calObj["plato"].toDouble();
+		    c.angle = calObj["angle"].toDouble();
+		    c.sg = Utils::plato_to_sg(c.plato);
+		    nCal.append(c);
+		    oCal.append(c);
 		    oldtotal++;
 		}
 		newtotal = oldtotal;
@@ -129,6 +133,10 @@
 	x[i] = y[i] = 0;
     }
 
+    std::sort(nCal.begin() , nCal.end(), [=]( const Calibrate& test1 , const Calibrate& test2 )->bool {
+	return test2.angle < test1.angle;
+    });
+
     for (int i = 0; i < newtotal; i++) {
 	qDebug() << i << nCal[i].sg << nCal[i].plato << nCal[i].angle;
 
@@ -174,6 +182,7 @@
     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();
@@ -228,6 +237,20 @@
 
 void CalibrateiSpindel::on_quitButton_clicked()
 {
+    if (this->textIsChanged) {
+        int rc = QMessageBox::warning(this, tr("iSpindel calibrate changed"), tr("The calibration data has been modified. Save changes?"),
+                                QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Save);
+        switch (rc) {
+            case QMessageBox::Save:
+                        on_saveButton_clicked();
+                        break;  /* Saved and then Quit */
+            case QMessageBox::Discard:
+                        break;  /* Quit without Save */
+            case QMessageBox::Cancel:
+                        return; /* Return to the editor page */
+        }
+    }
+
     this->close();
     this->setResult(1);
 }
@@ -235,6 +258,42 @@
 
 void CalibrateiSpindel::on_saveButton_clicked()
 {
+    QSqlQuery query;
+
+    if (this->textIsChanged) {
+	/*
+	 * Build json data
+	 */
+	QJsonObject calObj;
+	QJsonArray coeff, poly;
+
+	for (int i = 0; i < 4; i++) {
+	    coeff.append(New[i]);
+	}
+	calObj.insert("polyData", coeff);
+	for (int i = 0; i < newtotal; i++) {
+	    QJsonObject obj;
+	    obj.insert("plato", nCal[i].plato);
+	    obj.insert("angle", nCal[i].angle);
+	    poly.append(obj);
+	}
+	calObj.insert("calData", poly);
+
+	query.prepare("UPDATE mon_ispindels SET calibrate=:calibrate WHERE record = :recno");
+	query.bindValue(":calibrate", QJsonDocument(calObj).toJson(QJsonDocument::Compact) );
+	query.bindValue(":recno", this->recno);
+	query.exec();
+	if (query.lastError().isValid()) {
+            qWarning() << "CalibrateiSpindel" << query.lastError();
+            QMessageBox::warning(this, tr("Database error"),
+                        tr("MySQL error: %1\n%2\n%3")
+                        .arg(query.lastError().nativeErrorCode())
+                        .arg(query.lastError().driverText())
+                        .arg(query.lastError().databaseText()));
+        } else {
+            qDebug() << "CalibrateiSpindel Saved";
+        }
+    }
 }
 
 
--- a/src/CalibrateiSpindel.h	Sun Oct 15 13:30:24 2023 +0200
+++ b/src/CalibrateiSpindel.h	Sun Oct 15 17:37:08 2023 +0200
@@ -45,8 +45,10 @@
     bool ignoreChanges = false;
     bool textIsChanged = false;
     double Old[4], New[4];
-    Calibrate oCal[12], nCal[12];
+    QList<Calibrate> oCal;
+    QList<Calibrate> nCal;
 
+    bool sort_test(const Calibrate &D1, const Calibrate &D2);
     void WindowTitle();
 };
 
--- a/translations/bmsapp_en.ts	Sun Oct 15 13:30:24 2023 +0200
+++ b/translations/bmsapp_en.ts	Sun Oct 15 17:37:08 2023 +0200
@@ -90,72 +90,94 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="105"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="122"/>
         <source>SG</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="105"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="122"/>
         <source>°Plato</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="105"/>
-        <location filename="../src/CalibrateiSpindel.cpp" line="187"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="122"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="209"/>
         <source>Angle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="105"/>
-        <location filename="../src/CalibrateiSpindel.cpp" line="144"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="122"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="165"/>
         <source>Del</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="175"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="197"/>
         <source>Old</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="176"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="198"/>
         <source>New</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="179"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="201"/>
         <source>Calibration plot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="235"/>
-        <location filename="../src/CalibrateiSpindel.cpp" line="274"/>
-        <location filename="../src/CalibrateiSpindel.cpp" line="283"/>
-        <location filename="../src/CalibrateiSpindel.cpp" line="292"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="241"/>
+        <source>iSpindel calibrate changed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/CalibrateiSpindel.cpp" line="241"/>
+        <source>The calibration data has been modified. Save changes?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/CalibrateiSpindel.cpp" line="288"/>
+        <source>Database error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/CalibrateiSpindel.cpp" line="289"/>
+        <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"/>
         <source>iSpindel calibrate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="235"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="307"/>
         <source>You cannot delete too many rows.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="274"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="346"/>
         <source>The SG must be between 1.000 and 1.100.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="283"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="355"/>
         <source>Plato must be between 0 and 25.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="292"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="364"/>
         <source>The tilt angles must be between 10 and 80.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="309"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="381"/>
         <source>BMSapp - Calibrate iSpindel %1</source>
         <translation type="unfinished"></translation>
     </message>
--- a/translations/bmsapp_nl.ts	Sun Oct 15 13:30:24 2023 +0200
+++ b/translations/bmsapp_nl.ts	Sun Oct 15 17:37:08 2023 +0200
@@ -144,72 +144,96 @@
         <translation type="unfinished">Terug</translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="105"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="122"/>
         <source>SG</source>
         <translation type="unfinished">SG</translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="105"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="122"/>
         <source>°Plato</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="105"/>
-        <location filename="../src/CalibrateiSpindel.cpp" line="187"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="122"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="209"/>
         <source>Angle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="105"/>
-        <location filename="../src/CalibrateiSpindel.cpp" line="144"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="122"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="165"/>
         <source>Del</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="175"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="197"/>
         <source>Old</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="176"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="198"/>
         <source>New</source>
         <translation type="unfinished">Nieuw</translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="179"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="201"/>
         <source>Calibration plot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="235"/>
-        <location filename="../src/CalibrateiSpindel.cpp" line="274"/>
-        <location filename="../src/CalibrateiSpindel.cpp" line="283"/>
-        <location filename="../src/CalibrateiSpindel.cpp" line="292"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="241"/>
+        <source>iSpindel calibrate changed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/CalibrateiSpindel.cpp" line="241"/>
+        <source>The calibration data has been modified. Save changes?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/CalibrateiSpindel.cpp" line="288"/>
+        <source>Database error</source>
+        <translation type="unfinished">Database fout</translation>
+    </message>
+    <message>
+        <location filename="../src/CalibrateiSpindel.cpp" line="289"/>
+        <source>MySQL error: %1
+%2
+%3</source>
+        <translation type="unfinished">MySQL fout: %1
+%2
+%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"/>
         <source>iSpindel calibrate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="235"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="307"/>
         <source>You cannot delete too many rows.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="274"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="346"/>
         <source>The SG must be between 1.000 and 1.100.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="283"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="355"/>
         <source>Plato must be between 0 and 25.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="292"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="364"/>
         <source>The tilt angles must be between 10 and 80.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/CalibrateiSpindel.cpp" line="309"/>
+        <location filename="../src/CalibrateiSpindel.cpp" line="381"/>
         <source>BMSapp - Calibrate iSpindel %1</source>
         <translation type="unfinished"></translation>
     </message>

mercurial