src/EditRecipe.cpp

changeset 105
e79079bf013d
parent 104
c02dfb7bb2f9
child 106
2924fb71dce9
equal deleted inserted replaced
104:c02dfb7bb2f9 105:e79079bf013d
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.
834 930
835 void EditRecipe::on_deleteFermentRow_clicked() 931 void EditRecipe::on_deleteFermentRow_clicked()
836 { 932 {
837 QPushButton *pb = qobject_cast<QPushButton *>(QObject::sender()); 933 QPushButton *pb = qobject_cast<QPushButton *>(QObject::sender());
838 int row = pb->objectName().toInt(); 934 int row = pb->objectName().toInt();
839 qDebug() << "Delete row" << row; 935 qDebug() << "Delete fermentable row" << row;
936
937 QJsonObject obj = this->fermentables.array().at(row).toObject();
938 qDebug() << obj;
939
940 int rc = QMessageBox::warning(this, tr("Delete fermentable"), tr("Delete %1").arg(obj["f_name"].toString()),
941 QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
942 if (rc == QMessageBox::No)
943 return;
944
840 ui->fermentablesTable->removeRow(row); 945 ui->fermentablesTable->removeRow(row);
841 // make_Json(); 946 // recalculate percentages
947 fermentable_Json();
948 }
949
950
951 void EditRecipe::on_editFermentRow_clicked()
952 {
953 QPushButton *pb = qobject_cast<QPushButton *>(QObject::sender());
954 int row = pb->objectName().toInt();
955 qDebug() << "Edit fermentable row" << row;
956 // init fermentrow and fermentbackup.
957 // connect popup to refreshfermentables and calcFermentables
958 // popup editor
959 // on abort, restore fermentbackup
960 // on accept, fermentrow to final
961 // disconnect
962 // return
842 } 963 }
843 964
844 965
845 void EditRecipe::on_quitButton_clicked() 966 void EditRecipe::on_quitButton_clicked()
846 { 967 {

mercurial