src/CalibrateiSpindel.cpp

changeset 505
7ae4d022cf8f
parent 504
ea7cf64c9a6c
child 506
ea07f6c97a69
--- a/src/CalibrateiSpindel.cpp	Fri Oct 13 15:36:15 2023 +0200
+++ b/src/CalibrateiSpindel.cpp	Sat Oct 14 11:23:24 2023 +0200
@@ -15,6 +15,7 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 #include "CalibrateiSpindel.h"
+#include "../ui/ui_CalibrateiSpindel.h"
 #include "global.h"
 #include "Utils.h"
 #include "MainWindow.h"
@@ -29,31 +30,10 @@
     qDebug() << "CalibrateiSpindel record:" << id;
 #endif
 
-    gridLayout = new QGridLayout(this);
-    gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
-    tableCalData = new QTableWidget(this);
-    tableCalData->setObjectName(QString::fromUtf8("tableCalData"));
-    tableCalData->setEnabled(true);
-    QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
-    sizePolicy.setHorizontalStretch(0);
-    sizePolicy.setVerticalStretch(0);
-    tableCalData->setSizePolicy(sizePolicy);
-    tableCalData->setMinimumSize(QSize(1024, 0));
-    gridLayout->addWidget(tableCalData, 0, 0, 1, 1);
-
-//    ui->setupUi(this);
-//    this->recno = id;
-//    setWindowFlags(Qt::Window | Qt::WindowTitleHint | Qt::CustomizeWindowHint);
-//    setWindowTitle(tr("BMSapp - Calibrate iSpindel"));
-
-//    connect(parent, SIGNAL(updateiSpindel(QString)), this, SLOT(refreshiSpindel(QString)));
-//    emit refreshTable();
-}
-
-
-void CalibrateiSpindel::refreshTable()
-{
-    QSqlQuery query;
+    ui->setupUi(this);
+    this->recno = id;
+    setWindowFlags(Qt::Window | Qt::WindowTitleHint | Qt::CustomizeWindowHint);
+    WindowTitle();
 
     query.prepare("SELECT node,alias,calibrate FROM mon_ispindels WHERE record = :recno");
     query.bindValue(":recno", this->recno);
@@ -62,17 +42,115 @@
 
 	_node = query.value("node").toString();
 	_alias = query.value("alias").toString();
-	_data_old = query.value("calibrate").toString();
-	_data_new = query.value("calibrate").toString();
+	ui->nameEdit->setText(_node+"/"+_alias);
+
+	QJsonParseError parseError;
+        const auto& json = query.value("calibrate").toString();
+
+	if (!json.trimmed().isEmpty()) {
+	    const auto& formattedJson = QString("%1").arg(json);
+	    QJsonDocument jsonResponse = QJsonDocument::fromJson(formattedJson.toUtf8(),  &parseError);
+	    if (parseError.error != QJsonParseError::NoError) {
+                qWarning() << "Parse error: " << parseError.errorString() << "at" << parseError.offset ;
+            } else {
+
+	    	QJsonObject jsonObj = jsonResponse.object();
+//	    	qDebug() << "polyData: " << jsonObj["polyData"].toArray();
+		QJsonArray polyData = jsonObj.value("polyData").toArray();
+//		qDebug() << polyData;
+		for (int i = 0; i < polyData.size(); i++) {
+		    Old[i] = New[i] = polyData.at(i).toDouble();
+		    qDebug() << i << New[i];
+		}
+		_data_old = QString("(%1 * x^3) + (%2 * x^2) + (%3 * x) + %4").arg(Old[0], 0, 'f', 9, '0').arg(Old[1], 0, 'f', 9, '0').arg(Old[2], 0, 'f', 9, '0').arg(Old[3], 0, 'f', 9, '0');
+		ui->oldEdit->setText(_data_old);
+
+	    	qDebug() << "calData:  " << jsonObj["calData"].toArray();
+		QJsonArray calData = jsonObj.value("calData").toArray();
+		qDebug() << calData;
+		totaldata = 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);
+		    totaldata++;
+		}
+
+	    }
+	}
 
     }
 
+    connect(ui->dataTable, SIGNAL(cellChanged(int, int)), this, SLOT(cell_Changed(int, int)));
+//    connect(parent, SIGNAL(updateiSpindel(QString)), this, SLOT(refreshiSpindel(QString)));
+    emit refreshTable();
+}
+
+
+void CalibrateiSpindel::refreshTable()
+{
+    QString w;
+    QWidget* pWidget;
+    QHBoxLayout* pLayout;
+    double  d;
+
+    qDebug() << "refreshTable" << totaldata;
+
+    /*
+     * During filling the table turn off the cellChanged signal because every cell that is filled
+     * triggers the cellChanged signal. The QTableWidget has no better signal to use.
+     */
+    this->ignoreChanges = true;
+
+    const QStringList labels({tr("SG"), tr("°Plato"), tr("Angle"), tr("Del")});
+    ui->dataTable->setColumnCount(4);
+    ui->dataTable->setColumnWidth(0, 100);	/* SG		*/
+    ui->dataTable->setColumnWidth(1, 100);	/* °Plato	*/
+    ui->dataTable->setColumnWidth(2, 100);	/* Tilt angle	*/
+    ui->dataTable->setColumnWidth(3,  55);	/* Del button	*/
+    ui->dataTable->setHorizontalHeaderLabels(labels);
+    ui->dataTable->verticalHeader()->hide();
+    ui->dataTable->setRowCount(totaldata);
+
+    for (int i = 0; i < totaldata; i++) {
+	qDebug() << i << nCal[i].sg << nCal[i].plato << nCal[i].angle;
+
+	w = QString("%1").arg(nCal[i].sg, 1, 'f', 4, '0');
+	QTableWidgetItem *item = new QTableWidgetItem(w);
+	item->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
+	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);
+        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);
+        ui->dataTable->setItem(i, 2, item);
+
+	/* Add the Delete row button */
+        pWidget = new QWidget();
+        QPushButton* btn_del = new QPushButton();
+        btn_del->setObjectName(QString("%1").arg(i));  /* Send row with the button */
+        btn_del->setText(tr("Del"));
+        connect(btn_del, SIGNAL(clicked()), this, SLOT(on_deleteRow_clicked()));
+        pLayout = new QHBoxLayout(pWidget);
+        pLayout->addWidget(btn_del);
+        pLayout->setContentsMargins(5, 0, 5, 0);
+        pWidget->setLayout(pLayout);
+        ui->dataTable->setCellWidget(i, 3, pWidget);
+    }
+
+    this->ignoreChanges = false;
 }
 
 
 CalibrateiSpindel::~CalibrateiSpindel()
 {
-//    delete ui;
+    delete ui;
 }
 
 
@@ -83,3 +161,49 @@
 }
 
 
+void CalibrateiSpindel::on_saveButton_clicked()
+{
+}
+
+
+void CalibrateiSpindel::on_deleteRow_clicked()
+{
+    QPushButton *pb = qobject_cast<QPushButton *>(QObject::sender());
+    int row = pb->objectName().toInt();
+    qDebug() << "Delete row" << row;
+}
+
+
+void CalibrateiSpindel::on_addButton_clicked()
+{
+    qDebug() << "Add row" << totaldata;
+}
+
+
+void CalibrateiSpindel::cell_Changed(int nRow, int nCol)
+{
+    QString w;
+
+    if (this->ignoreChanges)
+        return;
+
+    qDebug() << "Cell at row " + QString::number(nRow) + " column " + QString::number(nCol) + " was changed.";
+
+}
+
+
+/*
+ * Window header, mark any change with '**'
+ */
+void CalibrateiSpindel::WindowTitle()
+{
+    QString txt;
+
+    txt = QString(tr("BMSapp - Calibrate iSpindel %1").arg(this->recno));
+
+    if (this->textIsChanged) {
+        txt.append((QString(" **")));
+    }
+    setWindowTitle(txt);
+}
+

mercurial