src/EditRecipe.cpp

changeset 105
e79079bf013d
parent 104
c02dfb7bb2f9
child 106
2924fb71dce9
--- a/src/EditRecipe.cpp	Sun Apr 03 22:11:45 2022 +0200
+++ b/src/EditRecipe.cpp	Mon Apr 04 16:21:38 2022 +0200
@@ -302,18 +302,40 @@
      * triggers the cellChanged signal. The QTableWidget has no better signal to use. */
     this->ignoreChanges = true;
 
-    const QStringList labels({tr("Fermentable"), tr("EBC"), tr("Type"), tr("Graintype"), tr("When"), tr("Yield"), tr("Amount"), tr("Procent"), tr("100%"), tr("Button")});
-    ui->fermentablesTable->setColumnCount(10);
-    ui->fermentablesTable->setColumnWidth(0, 350);     /* Fermentable	*/
-    ui->fermentablesTable->setColumnWidth(1,  50);     /* Color		*/
-    ui->fermentablesTable->setColumnWidth(2,  75);     /* Type		*/
-    ui->fermentablesTable->setColumnWidth(3,  75);     /* Graintype	*/
-    ui->fermentablesTable->setColumnWidth(4,  75);     /* Added		*/
-    ui->fermentablesTable->setColumnWidth(5,  75);     /* Yield		*/
-    ui->fermentablesTable->setColumnWidth(6,  75);     /* Amount	*/
-    ui->fermentablesTable->setColumnWidth(7,  60);     /* Procent	*/
-    ui->fermentablesTable->setColumnWidth(8,  50);     /* 100%		*/
-    ui->fermentablesTable->setColumnWidth(9,  80);     /* Button	*/
+    const QStringList labels({tr("Supplier"), tr("Fermentable"), tr("EBC"), tr("Type"), tr("Graintype"), tr("When"), tr("Yield"),
+		    	      tr("Amount"), tr("Procent"), tr("100%"), tr("Delete"), tr("Edit"), "13", "14", "15", "16", "17",
+			      "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30" });
+    ui->fermentablesTable->setColumnCount(30);
+    ui->fermentablesTable->setColumnWidth(0, 150);     /* Supplier	*/
+    ui->fermentablesTable->setColumnWidth(1, 200);     /* Fermentable	*/
+    ui->fermentablesTable->setColumnWidth(2,  50);     /* Color		*/
+    ui->fermentablesTable->setColumnWidth(3,  75);     /* Type		*/
+    ui->fermentablesTable->setColumnWidth(4,  75);     /* Graintype	*/
+    ui->fermentablesTable->setColumnWidth(5,  75);     /* Added		*/
+    ui->fermentablesTable->setColumnWidth(6,  75);     /* Yield		*/
+    ui->fermentablesTable->setColumnWidth(7,  75);     /* Amount	*/
+    ui->fermentablesTable->setColumnWidth(8,  60);     /* Procent	*/
+    ui->fermentablesTable->setColumnWidth(9,  50);     /* 100%		*/
+    ui->fermentablesTable->setColumnWidth(10, 80);     /* Delete	*/
+    ui->fermentablesTable->setColumnWidth(11, 80);     /* Edit		*/
+    ui->fermentablesTable->setColumnHidden(12, true);
+    ui->fermentablesTable->setColumnHidden(13, true);
+    ui->fermentablesTable->setColumnHidden(14, true);
+    ui->fermentablesTable->setColumnHidden(15, true);
+    ui->fermentablesTable->setColumnHidden(16, true);
+    ui->fermentablesTable->setColumnHidden(17, true);
+    ui->fermentablesTable->setColumnHidden(18, true);
+    ui->fermentablesTable->setColumnHidden(19, true);
+    ui->fermentablesTable->setColumnHidden(20, true);
+    ui->fermentablesTable->setColumnHidden(21, true);
+    ui->fermentablesTable->setColumnHidden(22, true);
+    ui->fermentablesTable->setColumnHidden(23, true);
+    ui->fermentablesTable->setColumnHidden(24, true);
+    ui->fermentablesTable->setColumnHidden(25, true);
+    ui->fermentablesTable->setColumnHidden(26, true);
+    ui->fermentablesTable->setColumnHidden(27, true);
+    ui->fermentablesTable->setColumnHidden(28, true);
+    ui->fermentablesTable->setColumnHidden(29, true);
     ui->fermentablesTable->setHorizontalHeaderLabels(labels);
     ui->fermentablesTable->verticalHeader()->hide();
     ui->fermentablesTable->setRowCount(this->fermentables.array().size());
@@ -322,85 +344,93 @@
 	for (int i = 0; i < this->fermentables.array().size(); i++) {
             QJsonObject obj = this->fermentables.array().at(i).toObject();
 
-	    w = obj["f_supplier"].toString()+" / "+obj["f_name"].toString();
-            ui->fermentablesTable->setItem(i, 0, new QTableWidgetItem(w));
+            ui->fermentablesTable->setItem(i, 0, new QTableWidgetItem(obj["f_supplier"].toString()));
+            ui->fermentablesTable->setItem(i, 1, new QTableWidgetItem(obj["f_name"].toString()));
 
-	    if (obj["f_color"].isString())
-                d = QString(obj["f_color"].toString()).toDouble();
-            else
-                d = obj["f_color"].toDouble();
-            w = QString("%1").arg(d, 1, 'f', 0, '0');
+            w = QString("%1").arg(obj["f_color"].toDouble(), 1, 'f', 0, '0');
             item = new QTableWidgetItem(w);
             item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter);
-            ui->fermentablesTable->setItem(i, 1, item);
-
-	    if (obj["f_type"].isString())
-                j = QString(obj["f_type"].toString()).toInt();
-            else
-                j = obj["f_type"].toInt();
-	    item = new QTableWidgetItem(f_types[j]);
-	    item->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
-	    ui->fermentablesTable->setItem(i, 2, item);
+	    item->setFlags(item->flags() & ~Qt::ItemIsEditable);
+            ui->fermentablesTable->setItem(i, 2, item);
 
-	    if (obj["f_graintype"].isString())
-                j = QString(obj["f_graintype"].toString()).toInt();
-            else
-                j = obj["f_graintype"].toInt();
-            item = new QTableWidgetItem(f_graintypes[j]);
+	    item = new QTableWidgetItem(f_types[obj["f_type"].toInt()]);
+	    item->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
+	    item->setFlags(item->flags() & ~Qt::ItemIsEditable);
+	    ui->fermentablesTable->setItem(i, 3, item);
+
+            item = new QTableWidgetItem(f_graintypes[obj["f_graintype"].toInt()]);
             item->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
-            ui->fermentablesTable->setItem(i, 3, item);
-
-	    if (obj["f_added"].isString())
-                j = QString(obj["f_added"].toString()).toInt();
-            else
-                j = obj["f_added"].toInt();
-            item = new QTableWidgetItem(f_added[j]);
-            item->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
+	    item->setFlags(item->flags() & ~Qt::ItemIsEditable);
             ui->fermentablesTable->setItem(i, 4, item);
 
-	    if (obj["f_yield"].isString())
-                d = QString(obj["f_yield"].toString()).toDouble();
-            else
-                d = obj["f_yield"].toDouble();
-            w = QString("%1%").arg(d, 2, 'f', 1, '0');
-            item = new QTableWidgetItem(w);
-            item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter);
+            item = new QTableWidgetItem(f_added[obj["f_added"].toInt()]);
+            item->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
             ui->fermentablesTable->setItem(i, 5, item);
 
-	    if (obj["f_amount"].isString())
-                d = QString(obj["f_amount"].toString()).toDouble();
-            else
-                d = obj["f_amount"].toDouble();
-            w = QString("%1 Kg").arg(d, 4, 'f', 3, '0');
+            w = QString("%1%").arg(obj["f_yield"].toDouble(), 2, 'f', 1, '0');
             item = new QTableWidgetItem(w);
             item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter);
+	    item->setFlags(item->flags() & ~Qt::ItemIsEditable);
             ui->fermentablesTable->setItem(i, 6, item);
 
-	    if (obj["f_percentage"].isString())
-                d = QString(obj["f_percentage"].toString()).toDouble();
-            else
-                d = obj["f_percentage"].toDouble();
-            w = QString("%1%").arg(d, 2, 'f', 1, '0');
+            w = QString("%1 Kg").arg(obj["f_amount"].toDouble(), 4, 'f', 3, '0');
             item = new QTableWidgetItem(w);
             item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter);
             ui->fermentablesTable->setItem(i, 7, item);
 
+            w = QString("%1%").arg(obj["f_percentage"].toDouble(), 2, 'f', 1, '0');
+            item = new QTableWidgetItem(w);
+            item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter);
+            ui->fermentablesTable->setItem(i, 8, item);
+
 	    QTableWidgetItem *checkBoxItem = new QTableWidgetItem();
 	    checkBoxItem->setCheckState((obj["f_adjust_to_total_100"].toInt()) ? Qt::Checked : Qt::Unchecked);
 	    checkBoxItem->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
-            ui->fermentablesTable->setItem(i, 8, checkBoxItem);
+            ui->fermentablesTable->setItem(i, 9, checkBoxItem);
 
 	    /* Add the Delete row button */
             pWidget = new QWidget();
-            QPushButton* btn_edit = new QPushButton();
-            btn_edit->setObjectName(QString("%1").arg(i));  /* Send row with the button */
-            btn_edit->setText(tr("Delete"));
-            connect(btn_edit, SIGNAL(clicked()), this, SLOT(on_deleteFermentRow_clicked()));
+            QPushButton* btn_dele = new QPushButton();
+            btn_dele->setObjectName(QString("%1").arg(i));  /* Send row with the button */
+            btn_dele->setText(tr("Delete"));
+            connect(btn_dele, SIGNAL(clicked()), this, SLOT(on_deleteFermentRow_clicked()));
             pLayout = new QHBoxLayout(pWidget);
-            pLayout->addWidget(btn_edit);
+            pLayout->addWidget(btn_dele);
             pLayout->setContentsMargins(5, 0, 5, 0);
             pWidget->setLayout(pLayout);
-            ui->fermentablesTable->setCellWidget(i, 9, pWidget);
+            ui->fermentablesTable->setCellWidget(i, 10, pWidget);
+
+	    pWidget = new QWidget();
+	    QPushButton* btn_edit = new QPushButton();
+	    btn_edit->setObjectName(QString("%1").arg(i));  /* Send row with the button */
+	    btn_edit->setText(tr("Edit"));
+	    connect(btn_edit, SIGNAL(clicked()), this, SLOT(on_editFermentRow_clicked()));
+	    pLayout = new QHBoxLayout(pWidget);
+            pLayout->addWidget(btn_edit);
+	    pLayout->setContentsMargins(5, 0, 5, 0);
+            pWidget->setLayout(pLayout);
+            ui->fermentablesTable->setCellWidget(i, 11, pWidget);
+
+	    /* Hidden columns */
+            ui->fermentablesTable->setItem(i, 12, new QTableWidgetItem(QString("%1").arg(obj["f_acid_to_ph_57"].toDouble(), 6, 'f', 5, '0')));
+            ui->fermentablesTable->setItem(i, 13, new QTableWidgetItem(QString("%1").arg(obj["f_add_after_boil"].toInt(), 1, 'f', 0, '0')));
+            ui->fermentablesTable->setItem(i, 14, new QTableWidgetItem(QString("%1").arg(obj["f_coarse_fine_diff"].toDouble(), 2, 'f', 1, '0')));
+            ui->fermentablesTable->setItem(i, 15, new QTableWidgetItem(QString("%1").arg(obj["f_cost"].toDouble(), 3, 'f', 2, '0')));
+            ui->fermentablesTable->setItem(i, 16, new QTableWidgetItem(QString("%1").arg(obj["f_di_ph"].toDouble(), 6, 'f', 5, '0')));
+            ui->fermentablesTable->setItem(i, 17, new QTableWidgetItem(QString("%1").arg(obj["f_diastatic_power"].toDouble(), 6, 'f', 5, '0')));
+            ui->fermentablesTable->setItem(i, 18, new QTableWidgetItem(QString("%1").arg(obj["f_dissolved_protein"].toDouble(), 2, 'f', 1, '0')));
+            ui->fermentablesTable->setItem(i, 19, new QTableWidgetItem(QString("%1").arg(obj["f_moisture"].toDouble(), 2, 'f', 1, '0')));
+	    ui->fermentablesTable->setItem(i, 20, new QTableWidgetItem(obj["f_origin"].toString()));
+	    ui->fermentablesTable->setItem(i, 21, new QTableWidgetItem(QString("%1").arg(obj["f_protein"].toDouble(), 2, 'f', 1, '0')));
+	    ui->fermentablesTable->setItem(i, 22, new QTableWidgetItem(QString("%1").arg(obj["f_recommend_mash"].toInt(), 1, 'f', 0, '0')));
+	    /* Again these because the visible ones have human readable strings added. */
+	    ui->fermentablesTable->setItem(i, 23, new QTableWidgetItem(QString("%1").arg(obj["f_amount"].toDouble(), 4, 'f', 3, '0')));
+	    ui->fermentablesTable->setItem(i, 24, new QTableWidgetItem(QString("%1").arg(obj["f_percentage"].toDouble(), 2, 'f', 1, '0')));
+	    ui->fermentablesTable->setItem(i, 25, new QTableWidgetItem(QString("%1").arg(obj["f_yield"].toDouble(), 2, 'f', 1, '0')));
+	    ui->fermentablesTable->setItem(i, 26, new QTableWidgetItem(QString("%1").arg(obj["f_max_in_batch"].toDouble(), 2, 'f', 1, '0')));
+	    ui->fermentablesTable->setItem(i, 27, new QTableWidgetItem(QString("%1").arg(obj["f_type"].toDouble(), 1, 'f', 0, '0')));
+	    ui->fermentablesTable->setItem(i, 28, new QTableWidgetItem(QString("%1").arg(obj["f_graintype"].toDouble(), 1, 'f', 0, '0')));
+	    ui->fermentablesTable->setItem(i, 29, new QTableWidgetItem(QString("%1").arg(obj["f_added"].toDouble(), 1, 'f', 0, '0')));
 	}
     }
 
@@ -797,6 +827,72 @@
 }
 
 
+void EditRecipe::fermentable_Json()
+{
+    QTableWidgetItem *item;
+    QJsonArray array;
+
+    ui->fermentablesTable->sortItems(23, Qt::DescendingOrder);   // Sort on amount.
+
+    for (int i = 0; i < ui->fermentablesTable->rowCount(); i++) {
+
+        QJsonObject obj;
+	item = ui->fermentablesTable->item(i, 12);
+	obj.insert("f_acid_to_ph_57", item->text().toDouble());
+	item = ui->fermentablesTable->item(i, 13);
+        obj.insert("f_add_after_boil", item->text().toDouble());
+	item = ui->fermentablesTable->item(i, 29);
+        obj.insert("f_added", item->text().toDouble());
+	item = ui->fermentablesTable->item(i, 9);
+        obj.insert("f_adjust_to_total_100", item->text().toDouble());
+	item = ui->fermentablesTable->item(i, 23);
+        obj.insert("f_amount", item->text().toDouble());
+	item = ui->fermentablesTable->item(i, 14);
+        obj.insert("f_coarse_fine_diff", item->text().toDouble());
+	item = ui->fermentablesTable->item(i, 2);
+        obj.insert("f_color", item->text().toDouble());
+	item = ui->fermentablesTable->item(i, 15);
+        obj.insert("f_cost", item->text().toDouble());
+	item = ui->fermentablesTable->item(i, 16);
+        obj.insert("f_di_ph", item->text().toDouble());
+	item = ui->fermentablesTable->item(i, 17);
+        obj.insert("f_diastatic_power", item->text().toDouble());
+	item = ui->fermentablesTable->item(i, 18);
+        obj.insert("f_dissolved_protein", item->text().toDouble());
+	item = ui->fermentablesTable->item(i, 28);
+        obj.insert("f_graintype", item->text().toDouble());
+	item = ui->fermentablesTable->item(i, 26);
+        obj.insert("f_max_in_batch", item->text().toDouble());
+	item = ui->fermentablesTable->item(i, 19);
+        obj.insert("f_moisture", item->text().toDouble());
+	item = ui->fermentablesTable->item(i, 1);
+        obj.insert("f_name", item->text());
+	item = ui->fermentablesTable->item(i, 20);
+        obj.insert("f_origin", item->text());
+	item = ui->fermentablesTable->item(i, 24);
+        obj.insert("f_percentage", item->text().toDouble());
+	item = ui->fermentablesTable->item(i, 21);
+        obj.insert("f_protein", item->text().toDouble());
+	item = ui->fermentablesTable->item(i, 22);
+        obj.insert("f_recommend_mash", item->text().toDouble());
+	item = ui->fermentablesTable->item(i, 0);
+        obj.insert("f_supplier", item->text());
+	item = ui->fermentablesTable->item(i, 27);
+        obj.insert("f_type", item->text().toDouble());
+	item = ui->fermentablesTable->item(i, 25);
+        obj.insert("f_yield", item->text().toDouble());
+//	qDebug() << "fermentable_Json" << i << obj;
+	array.append(obj);      /* Append this object */
+    }
+
+    qDebug() << array;
+    /* Copy to the global array and refresh */
+    this->fermentables.setArray(array);
+    is_changed();
+    emit refreshAll();
+}
+
+
 void EditRecipe::cell_Fermentable_changed(int nRow, int nCol)
 {
     if (this->ignoreChanges)
@@ -804,7 +900,7 @@
 
     qDebug() << "Cell at row " + QString::number(nRow) + " column " + QString::number(nCol) + " was changed.";
 
-    if (nCol == 8) {	// 100% checkbox
+    if (nCol == 9) {	// 100% checkbox
 	this->ignoreChanges = true;
 
 	if (ui->fermentablesTable->item(nRow, nCol)->checkState() == Qt::Checked) {
@@ -836,9 +932,34 @@
 {
     QPushButton *pb = qobject_cast<QPushButton *>(QObject::sender());
     int row = pb->objectName().toInt();
-    qDebug() << "Delete row" << row;
+    qDebug() << "Delete fermentable row" << row;
+
+    QJsonObject obj = this->fermentables.array().at(row).toObject();
+     qDebug() << obj;
+
+    int rc = QMessageBox::warning(this, tr("Delete fermentable"), tr("Delete %1").arg(obj["f_name"].toString()),
+		    QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
+    if (rc == QMessageBox::No)
+	return;
+
     ui->fermentablesTable->removeRow(row);
-//    make_Json();
+//    recalculate percentages
+    fermentable_Json();
+}
+
+
+void EditRecipe::on_editFermentRow_clicked()
+{
+    QPushButton *pb = qobject_cast<QPushButton *>(QObject::sender());
+    int row = pb->objectName().toInt();
+    qDebug() << "Edit fermentable row" << row;
+    // init fermentrow and fermentbackup.
+    // connect popup to refreshfermentables and calcFermentables
+    // popup editor
+    // on abort, restore fermentbackup
+    // on accept, fermentrow to final
+    // disconnect
+    // return
 }
 
 

mercurial