300 qDebug() << "refreshFermentables" << this->fermentables << this->fermentables.isArray() << this->fermentables.array().size(); |
300 qDebug() << "refreshFermentables" << this->fermentables << this->fermentables.isArray() << this->fermentables.array().size(); |
301 /* During filling the table turn off the cellChanged signal because every cell that is filled |
301 /* During filling the table turn off the cellChanged signal because every cell that is filled |
302 * triggers the cellChanged signal. The QTableWidget has no better signal to use. */ |
302 * triggers the cellChanged signal. The QTableWidget has no better signal to use. */ |
303 this->ignoreChanges = true; |
303 this->ignoreChanges = true; |
304 |
304 |
305 const QStringList labels({tr("Fermentable"), tr("EBC"), tr("Type"), tr("Graintype"), tr("When"), tr("Yield"), tr("Amount"), tr("Procent"), tr("100%"), tr("Button")}); |
305 const QStringList labels({tr("Supplier"), tr("Fermentable"), tr("EBC"), tr("Type"), tr("Graintype"), tr("When"), tr("Yield"), |
306 ui->fermentablesTable->setColumnCount(10); |
306 tr("Amount"), tr("Procent"), tr("100%"), tr("Delete"), tr("Edit"), "13", "14", "15", "16", "17", |
307 ui->fermentablesTable->setColumnWidth(0, 350); /* Fermentable */ |
307 "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30" }); |
308 ui->fermentablesTable->setColumnWidth(1, 50); /* Color */ |
308 ui->fermentablesTable->setColumnCount(30); |
309 ui->fermentablesTable->setColumnWidth(2, 75); /* Type */ |
309 ui->fermentablesTable->setColumnWidth(0, 150); /* Supplier */ |
310 ui->fermentablesTable->setColumnWidth(3, 75); /* Graintype */ |
310 ui->fermentablesTable->setColumnWidth(1, 200); /* Fermentable */ |
311 ui->fermentablesTable->setColumnWidth(4, 75); /* Added */ |
311 ui->fermentablesTable->setColumnWidth(2, 50); /* Color */ |
312 ui->fermentablesTable->setColumnWidth(5, 75); /* Yield */ |
312 ui->fermentablesTable->setColumnWidth(3, 75); /* Type */ |
313 ui->fermentablesTable->setColumnWidth(6, 75); /* Amount */ |
313 ui->fermentablesTable->setColumnWidth(4, 75); /* Graintype */ |
314 ui->fermentablesTable->setColumnWidth(7, 60); /* Procent */ |
314 ui->fermentablesTable->setColumnWidth(5, 75); /* Added */ |
315 ui->fermentablesTable->setColumnWidth(8, 50); /* 100% */ |
315 ui->fermentablesTable->setColumnWidth(6, 75); /* Yield */ |
316 ui->fermentablesTable->setColumnWidth(9, 80); /* Button */ |
316 ui->fermentablesTable->setColumnWidth(7, 75); /* Amount */ |
|
317 ui->fermentablesTable->setColumnWidth(8, 60); /* Procent */ |
|
318 ui->fermentablesTable->setColumnWidth(9, 50); /* 100% */ |
|
319 ui->fermentablesTable->setColumnWidth(10, 80); /* Delete */ |
|
320 ui->fermentablesTable->setColumnWidth(11, 80); /* Edit */ |
|
321 ui->fermentablesTable->setColumnHidden(12, true); |
|
322 ui->fermentablesTable->setColumnHidden(13, true); |
|
323 ui->fermentablesTable->setColumnHidden(14, true); |
|
324 ui->fermentablesTable->setColumnHidden(15, true); |
|
325 ui->fermentablesTable->setColumnHidden(16, true); |
|
326 ui->fermentablesTable->setColumnHidden(17, true); |
|
327 ui->fermentablesTable->setColumnHidden(18, true); |
|
328 ui->fermentablesTable->setColumnHidden(19, true); |
|
329 ui->fermentablesTable->setColumnHidden(20, true); |
|
330 ui->fermentablesTable->setColumnHidden(21, true); |
|
331 ui->fermentablesTable->setColumnHidden(22, true); |
|
332 ui->fermentablesTable->setColumnHidden(23, true); |
|
333 ui->fermentablesTable->setColumnHidden(24, true); |
|
334 ui->fermentablesTable->setColumnHidden(25, true); |
|
335 ui->fermentablesTable->setColumnHidden(26, true); |
|
336 ui->fermentablesTable->setColumnHidden(27, true); |
|
337 ui->fermentablesTable->setColumnHidden(28, true); |
|
338 ui->fermentablesTable->setColumnHidden(29, true); |
317 ui->fermentablesTable->setHorizontalHeaderLabels(labels); |
339 ui->fermentablesTable->setHorizontalHeaderLabels(labels); |
318 ui->fermentablesTable->verticalHeader()->hide(); |
340 ui->fermentablesTable->verticalHeader()->hide(); |
319 ui->fermentablesTable->setRowCount(this->fermentables.array().size()); |
341 ui->fermentablesTable->setRowCount(this->fermentables.array().size()); |
320 |
342 |
321 if (this->fermentables.isArray()) { |
343 if (this->fermentables.isArray()) { |
322 for (int i = 0; i < this->fermentables.array().size(); i++) { |
344 for (int i = 0; i < this->fermentables.array().size(); i++) { |
323 QJsonObject obj = this->fermentables.array().at(i).toObject(); |
345 QJsonObject obj = this->fermentables.array().at(i).toObject(); |
324 |
346 |
325 w = obj["f_supplier"].toString()+" / "+obj["f_name"].toString(); |
347 ui->fermentablesTable->setItem(i, 0, new QTableWidgetItem(obj["f_supplier"].toString())); |
326 ui->fermentablesTable->setItem(i, 0, new QTableWidgetItem(w)); |
348 ui->fermentablesTable->setItem(i, 1, new QTableWidgetItem(obj["f_name"].toString())); |
327 |
349 |
328 if (obj["f_color"].isString()) |
350 w = QString("%1").arg(obj["f_color"].toDouble(), 1, 'f', 0, '0'); |
329 d = QString(obj["f_color"].toString()).toDouble(); |
|
330 else |
|
331 d = obj["f_color"].toDouble(); |
|
332 w = QString("%1").arg(d, 1, 'f', 0, '0'); |
|
333 item = new QTableWidgetItem(w); |
351 item = new QTableWidgetItem(w); |
334 item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter); |
352 item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter); |
335 ui->fermentablesTable->setItem(i, 1, item); |
353 item->setFlags(item->flags() & ~Qt::ItemIsEditable); |
336 |
354 ui->fermentablesTable->setItem(i, 2, item); |
337 if (obj["f_type"].isString()) |
355 |
338 j = QString(obj["f_type"].toString()).toInt(); |
356 item = new QTableWidgetItem(f_types[obj["f_type"].toInt()]); |
339 else |
|
340 j = obj["f_type"].toInt(); |
|
341 item = new QTableWidgetItem(f_types[j]); |
|
342 item->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter); |
357 item->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter); |
343 ui->fermentablesTable->setItem(i, 2, item); |
358 item->setFlags(item->flags() & ~Qt::ItemIsEditable); |
344 |
359 ui->fermentablesTable->setItem(i, 3, item); |
345 if (obj["f_graintype"].isString()) |
360 |
346 j = QString(obj["f_graintype"].toString()).toInt(); |
361 item = new QTableWidgetItem(f_graintypes[obj["f_graintype"].toInt()]); |
347 else |
|
348 j = obj["f_graintype"].toInt(); |
|
349 item = new QTableWidgetItem(f_graintypes[j]); |
|
350 item->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter); |
362 item->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter); |
351 ui->fermentablesTable->setItem(i, 3, item); |
363 item->setFlags(item->flags() & ~Qt::ItemIsEditable); |
352 |
364 ui->fermentablesTable->setItem(i, 4, item); |
353 if (obj["f_added"].isString()) |
365 |
354 j = QString(obj["f_added"].toString()).toInt(); |
366 item = new QTableWidgetItem(f_added[obj["f_added"].toInt()]); |
355 else |
|
356 j = obj["f_added"].toInt(); |
|
357 item = new QTableWidgetItem(f_added[j]); |
|
358 item->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter); |
367 item->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter); |
359 ui->fermentablesTable->setItem(i, 4, item); |
368 ui->fermentablesTable->setItem(i, 5, item); |
360 |
369 |
361 if (obj["f_yield"].isString()) |
370 w = QString("%1%").arg(obj["f_yield"].toDouble(), 2, 'f', 1, '0'); |
362 d = QString(obj["f_yield"].toString()).toDouble(); |
|
363 else |
|
364 d = obj["f_yield"].toDouble(); |
|
365 w = QString("%1%").arg(d, 2, 'f', 1, '0'); |
|
366 item = new QTableWidgetItem(w); |
371 item = new QTableWidgetItem(w); |
367 item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter); |
372 item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter); |
368 ui->fermentablesTable->setItem(i, 5, item); |
373 item->setFlags(item->flags() & ~Qt::ItemIsEditable); |
369 |
|
370 if (obj["f_amount"].isString()) |
|
371 d = QString(obj["f_amount"].toString()).toDouble(); |
|
372 else |
|
373 d = obj["f_amount"].toDouble(); |
|
374 w = QString("%1 Kg").arg(d, 4, 'f', 3, '0'); |
|
375 item = new QTableWidgetItem(w); |
|
376 item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter); |
|
377 ui->fermentablesTable->setItem(i, 6, item); |
374 ui->fermentablesTable->setItem(i, 6, item); |
378 |
375 |
379 if (obj["f_percentage"].isString()) |
376 w = QString("%1 Kg").arg(obj["f_amount"].toDouble(), 4, 'f', 3, '0'); |
380 d = QString(obj["f_percentage"].toString()).toDouble(); |
|
381 else |
|
382 d = obj["f_percentage"].toDouble(); |
|
383 w = QString("%1%").arg(d, 2, 'f', 1, '0'); |
|
384 item = new QTableWidgetItem(w); |
377 item = new QTableWidgetItem(w); |
385 item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter); |
378 item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter); |
386 ui->fermentablesTable->setItem(i, 7, item); |
379 ui->fermentablesTable->setItem(i, 7, item); |
387 |
380 |
|
381 w = QString("%1%").arg(obj["f_percentage"].toDouble(), 2, 'f', 1, '0'); |
|
382 item = new QTableWidgetItem(w); |
|
383 item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter); |
|
384 ui->fermentablesTable->setItem(i, 8, item); |
|
385 |
388 QTableWidgetItem *checkBoxItem = new QTableWidgetItem(); |
386 QTableWidgetItem *checkBoxItem = new QTableWidgetItem(); |
389 checkBoxItem->setCheckState((obj["f_adjust_to_total_100"].toInt()) ? Qt::Checked : Qt::Unchecked); |
387 checkBoxItem->setCheckState((obj["f_adjust_to_total_100"].toInt()) ? Qt::Checked : Qt::Unchecked); |
390 checkBoxItem->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter); |
388 checkBoxItem->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter); |
391 ui->fermentablesTable->setItem(i, 8, checkBoxItem); |
389 ui->fermentablesTable->setItem(i, 9, checkBoxItem); |
392 |
390 |
393 /* Add the Delete row button */ |
391 /* Add the Delete row button */ |
394 pWidget = new QWidget(); |
392 pWidget = new QWidget(); |
395 QPushButton* btn_edit = new QPushButton(); |
393 QPushButton* btn_dele = new QPushButton(); |
396 btn_edit->setObjectName(QString("%1").arg(i)); /* Send row with the button */ |
394 btn_dele->setObjectName(QString("%1").arg(i)); /* Send row with the button */ |
397 btn_edit->setText(tr("Delete")); |
395 btn_dele->setText(tr("Delete")); |
398 connect(btn_edit, SIGNAL(clicked()), this, SLOT(on_deleteFermentRow_clicked())); |
396 connect(btn_dele, SIGNAL(clicked()), this, SLOT(on_deleteFermentRow_clicked())); |
399 pLayout = new QHBoxLayout(pWidget); |
397 pLayout = new QHBoxLayout(pWidget); |
400 pLayout->addWidget(btn_edit); |
398 pLayout->addWidget(btn_dele); |
401 pLayout->setContentsMargins(5, 0, 5, 0); |
399 pLayout->setContentsMargins(5, 0, 5, 0); |
402 pWidget->setLayout(pLayout); |
400 pWidget->setLayout(pLayout); |
403 ui->fermentablesTable->setCellWidget(i, 9, pWidget); |
401 ui->fermentablesTable->setCellWidget(i, 10, pWidget); |
|
402 |
|
403 pWidget = new QWidget(); |
|
404 QPushButton* btn_edit = new QPushButton(); |
|
405 btn_edit->setObjectName(QString("%1").arg(i)); /* Send row with the button */ |
|
406 btn_edit->setText(tr("Edit")); |
|
407 connect(btn_edit, SIGNAL(clicked()), this, SLOT(on_editFermentRow_clicked())); |
|
408 pLayout = new QHBoxLayout(pWidget); |
|
409 pLayout->addWidget(btn_edit); |
|
410 pLayout->setContentsMargins(5, 0, 5, 0); |
|
411 pWidget->setLayout(pLayout); |
|
412 ui->fermentablesTable->setCellWidget(i, 11, pWidget); |
|
413 |
|
414 /* Hidden columns */ |
|
415 ui->fermentablesTable->setItem(i, 12, new QTableWidgetItem(QString("%1").arg(obj["f_acid_to_ph_57"].toDouble(), 6, 'f', 5, '0'))); |
|
416 ui->fermentablesTable->setItem(i, 13, new QTableWidgetItem(QString("%1").arg(obj["f_add_after_boil"].toInt(), 1, 'f', 0, '0'))); |
|
417 ui->fermentablesTable->setItem(i, 14, new QTableWidgetItem(QString("%1").arg(obj["f_coarse_fine_diff"].toDouble(), 2, 'f', 1, '0'))); |
|
418 ui->fermentablesTable->setItem(i, 15, new QTableWidgetItem(QString("%1").arg(obj["f_cost"].toDouble(), 3, 'f', 2, '0'))); |
|
419 ui->fermentablesTable->setItem(i, 16, new QTableWidgetItem(QString("%1").arg(obj["f_di_ph"].toDouble(), 6, 'f', 5, '0'))); |
|
420 ui->fermentablesTable->setItem(i, 17, new QTableWidgetItem(QString("%1").arg(obj["f_diastatic_power"].toDouble(), 6, 'f', 5, '0'))); |
|
421 ui->fermentablesTable->setItem(i, 18, new QTableWidgetItem(QString("%1").arg(obj["f_dissolved_protein"].toDouble(), 2, 'f', 1, '0'))); |
|
422 ui->fermentablesTable->setItem(i, 19, new QTableWidgetItem(QString("%1").arg(obj["f_moisture"].toDouble(), 2, 'f', 1, '0'))); |
|
423 ui->fermentablesTable->setItem(i, 20, new QTableWidgetItem(obj["f_origin"].toString())); |
|
424 ui->fermentablesTable->setItem(i, 21, new QTableWidgetItem(QString("%1").arg(obj["f_protein"].toDouble(), 2, 'f', 1, '0'))); |
|
425 ui->fermentablesTable->setItem(i, 22, new QTableWidgetItem(QString("%1").arg(obj["f_recommend_mash"].toInt(), 1, 'f', 0, '0'))); |
|
426 /* Again these because the visible ones have human readable strings added. */ |
|
427 ui->fermentablesTable->setItem(i, 23, new QTableWidgetItem(QString("%1").arg(obj["f_amount"].toDouble(), 4, 'f', 3, '0'))); |
|
428 ui->fermentablesTable->setItem(i, 24, new QTableWidgetItem(QString("%1").arg(obj["f_percentage"].toDouble(), 2, 'f', 1, '0'))); |
|
429 ui->fermentablesTable->setItem(i, 25, new QTableWidgetItem(QString("%1").arg(obj["f_yield"].toDouble(), 2, 'f', 1, '0'))); |
|
430 ui->fermentablesTable->setItem(i, 26, new QTableWidgetItem(QString("%1").arg(obj["f_max_in_batch"].toDouble(), 2, 'f', 1, '0'))); |
|
431 ui->fermentablesTable->setItem(i, 27, new QTableWidgetItem(QString("%1").arg(obj["f_type"].toDouble(), 1, 'f', 0, '0'))); |
|
432 ui->fermentablesTable->setItem(i, 28, new QTableWidgetItem(QString("%1").arg(obj["f_graintype"].toDouble(), 1, 'f', 0, '0'))); |
|
433 ui->fermentablesTable->setItem(i, 29, new QTableWidgetItem(QString("%1").arg(obj["f_added"].toDouble(), 1, 'f', 0, '0'))); |
404 } |
434 } |
405 } |
435 } |
406 |
436 |
407 this->ignoreChanges = false; |
437 this->ignoreChanges = false; |
408 } |
438 } |
795 { |
825 { |
796 is_changed(); |
826 is_changed(); |
797 } |
827 } |
798 |
828 |
799 |
829 |
|
830 void EditRecipe::fermentable_Json() |
|
831 { |
|
832 QTableWidgetItem *item; |
|
833 QJsonArray array; |
|
834 |
|
835 ui->fermentablesTable->sortItems(23, Qt::DescendingOrder); // Sort on amount. |
|
836 |
|
837 for (int i = 0; i < ui->fermentablesTable->rowCount(); i++) { |
|
838 |
|
839 QJsonObject obj; |
|
840 item = ui->fermentablesTable->item(i, 12); |
|
841 obj.insert("f_acid_to_ph_57", item->text().toDouble()); |
|
842 item = ui->fermentablesTable->item(i, 13); |
|
843 obj.insert("f_add_after_boil", item->text().toDouble()); |
|
844 item = ui->fermentablesTable->item(i, 29); |
|
845 obj.insert("f_added", item->text().toDouble()); |
|
846 item = ui->fermentablesTable->item(i, 9); |
|
847 obj.insert("f_adjust_to_total_100", item->text().toDouble()); |
|
848 item = ui->fermentablesTable->item(i, 23); |
|
849 obj.insert("f_amount", item->text().toDouble()); |
|
850 item = ui->fermentablesTable->item(i, 14); |
|
851 obj.insert("f_coarse_fine_diff", item->text().toDouble()); |
|
852 item = ui->fermentablesTable->item(i, 2); |
|
853 obj.insert("f_color", item->text().toDouble()); |
|
854 item = ui->fermentablesTable->item(i, 15); |
|
855 obj.insert("f_cost", item->text().toDouble()); |
|
856 item = ui->fermentablesTable->item(i, 16); |
|
857 obj.insert("f_di_ph", item->text().toDouble()); |
|
858 item = ui->fermentablesTable->item(i, 17); |
|
859 obj.insert("f_diastatic_power", item->text().toDouble()); |
|
860 item = ui->fermentablesTable->item(i, 18); |
|
861 obj.insert("f_dissolved_protein", item->text().toDouble()); |
|
862 item = ui->fermentablesTable->item(i, 28); |
|
863 obj.insert("f_graintype", item->text().toDouble()); |
|
864 item = ui->fermentablesTable->item(i, 26); |
|
865 obj.insert("f_max_in_batch", item->text().toDouble()); |
|
866 item = ui->fermentablesTable->item(i, 19); |
|
867 obj.insert("f_moisture", item->text().toDouble()); |
|
868 item = ui->fermentablesTable->item(i, 1); |
|
869 obj.insert("f_name", item->text()); |
|
870 item = ui->fermentablesTable->item(i, 20); |
|
871 obj.insert("f_origin", item->text()); |
|
872 item = ui->fermentablesTable->item(i, 24); |
|
873 obj.insert("f_percentage", item->text().toDouble()); |
|
874 item = ui->fermentablesTable->item(i, 21); |
|
875 obj.insert("f_protein", item->text().toDouble()); |
|
876 item = ui->fermentablesTable->item(i, 22); |
|
877 obj.insert("f_recommend_mash", item->text().toDouble()); |
|
878 item = ui->fermentablesTable->item(i, 0); |
|
879 obj.insert("f_supplier", item->text()); |
|
880 item = ui->fermentablesTable->item(i, 27); |
|
881 obj.insert("f_type", item->text().toDouble()); |
|
882 item = ui->fermentablesTable->item(i, 25); |
|
883 obj.insert("f_yield", item->text().toDouble()); |
|
884 // qDebug() << "fermentable_Json" << i << obj; |
|
885 array.append(obj); /* Append this object */ |
|
886 } |
|
887 |
|
888 qDebug() << array; |
|
889 /* Copy to the global array and refresh */ |
|
890 this->fermentables.setArray(array); |
|
891 is_changed(); |
|
892 emit refreshAll(); |
|
893 } |
|
894 |
|
895 |
800 void EditRecipe::cell_Fermentable_changed(int nRow, int nCol) |
896 void EditRecipe::cell_Fermentable_changed(int nRow, int nCol) |
801 { |
897 { |
802 if (this->ignoreChanges) |
898 if (this->ignoreChanges) |
803 return; |
899 return; |
804 |
900 |
805 qDebug() << "Cell at row " + QString::number(nRow) + " column " + QString::number(nCol) + " was changed."; |
901 qDebug() << "Cell at row " + QString::number(nRow) + " column " + QString::number(nCol) + " was changed."; |
806 |
902 |
807 if (nCol == 8) { // 100% checkbox |
903 if (nCol == 9) { // 100% checkbox |
808 this->ignoreChanges = true; |
904 this->ignoreChanges = true; |
809 |
905 |
810 if (ui->fermentablesTable->item(nRow, nCol)->checkState() == Qt::Checked) { |
906 if (ui->fermentablesTable->item(nRow, nCol)->checkState() == Qt::Checked) { |
811 /* |
907 /* |
812 * This row is checked. Remove any other checked item. |
908 * This row is checked. Remove any other checked item. |