1350 double total = 0, perc; |
1350 double total = 0, perc; |
1351 |
1351 |
1352 if (recipe->fermentables_use100) |
1352 if (recipe->fermentables_use100) |
1353 return; |
1353 return; |
1354 |
1354 |
1355 qDebug() << "ferment_amount_changed()" << editrow << val; |
1355 qDebug() << "ferment_amount_changed()" << recipe->fermentables_row << val; |
1356 this->ignoreChanges = true; |
1356 this->ignoreChanges = true; |
1357 |
1357 |
1358 recipe->fermentables[editrow].f_amount = val; |
1358 recipe->fermentables[recipe->fermentables_row].f_amount = val; |
1359 item = new QTableWidgetItem(QString("%1 Kg").arg(val, 4, 'f', 3, '0')); |
1359 item = new QTableWidgetItem(QString("%1 Kg").arg(val, 4, 'f', 3, '0')); |
1360 item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter); |
1360 item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter); |
1361 ui->fermentablesTable->setItem(editrow, 7, item); |
1361 ui->fermentablesTable->setItem(recipe->fermentables_row, 7, item); |
1362 |
1362 |
1363 for (int i = 0; i < recipe->fermentables.size(); i++) |
1363 for (int i = 0; i < recipe->fermentables.size(); i++) |
1364 total += recipe->fermentables.at(i).f_amount; |
1364 if (recipe->fermentables.at(i).f_added < 4) // Only before bottle/kegging |
1365 |
1365 total += recipe->fermentables.at(i).f_amount; |
1366 /* |
1366 /* |
1367 * Recalculate the percentages |
1367 * Recalculate the percentages |
1368 */ |
1368 */ |
1369 for (int i = 0; i < recipe->fermentables.size(); i++) { |
1369 for (int i = 0; i < recipe->fermentables.size(); i++) { |
1370 perc = recipe->fermentables.at(i).f_amount / total * 100; |
1370 if (recipe->fermentables.at(i).f_added < 4) { |
1371 recipe->fermentables[i].f_percentage = perc; |
1371 perc = recipe->fermentables.at(i).f_amount / total * 100; |
1372 item = new QTableWidgetItem(QString("%1%").arg(perc, 2, 'f', 1, '0')); |
1372 recipe->fermentables[i].f_percentage = perc; |
1373 item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter); |
1373 item = new QTableWidgetItem(QString("%1%").arg(perc, 2, 'f', 1, '0')); |
1374 ui->fermentablesTable->setItem(i, 8, item); |
1374 item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter); |
1375 if (i == editrow) |
1375 ui->fermentablesTable->setItem(i, 8, item); |
1376 this->pctEdit->setValue(perc); |
1376 if (i == recipe->fermentables_row) |
|
1377 this->pctEdit->setValue(perc); |
|
1378 } |
1377 } |
1379 } |
1378 this->ignoreChanges = false; |
1380 this->ignoreChanges = false; |
1379 is_changed(); |
1381 is_changed(); |
1380 } |
1382 } |
1381 |
1383 |
1382 void EditRecipe::ferment_pct_changed(double val) |
1384 void EditRecipe::ferment_pct_changed(double val) |
1383 { |
1385 { |
|
1386 QTableWidgetItem *item; |
|
1387 double total = 0, row100 = -1; |
|
1388 |
1384 if (! recipe->fermentables_use100) |
1389 if (! recipe->fermentables_use100) |
1385 return; |
1390 return; |
1386 |
1391 |
1387 qDebug() << "ferment_pct_changed()" << val; |
1392 qDebug() << "ferment_pct_changed()" << recipe->fermentables_row << val; |
|
1393 /* |
|
1394 * Since we have arrived here, adjust_to_100 is active and |
|
1395 * this is not the entry to be adjusted to 100. |
|
1396 */ |
|
1397 for (int i = 0; i < recipe->fermentables.size(); i++) { |
|
1398 if (recipe->fermentables.at(i).f_added < 4) // Only before bottle/kegging |
|
1399 total += recipe->fermentables.at(i).f_amount; |
|
1400 if (recipe->fermentables.at(i).f_adjust_to_total_100) |
|
1401 row100 = i; |
|
1402 } |
|
1403 double oldperc = recipe->fermentables.at(recipe->fermentables_row).f_percentage; |
|
1404 double diffp = val - oldperc; |
|
1405 double diffw = (diffp / 100) * total; |
|
1406 qDebug() << "row100" << row100 << "total" << total << "diff kg" << diffw << "diff %" << diffp; |
|
1407 |
|
1408 this->ignoreChanges = true; |
|
1409 recipe->fermentables[recipe->fermentables_row].f_percentage += diffp; |
|
1410 recipe->fermentables[recipe->fermentables_row].f_amount += diffw; |
|
1411 recipe->fermentables[row100].f_percentage -= diffp; |
|
1412 recipe->fermentables[row100].f_amount -= diffw; |
|
1413 |
|
1414 item = new QTableWidgetItem(QString("%1 Kg").arg(recipe->fermentables[recipe->fermentables_row].f_amount, 4, 'f', 3, '0')); |
|
1415 item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter); |
|
1416 ui->fermentablesTable->setItem(recipe->fermentables_row, 7, item); |
|
1417 this->amountEdit->setValue(recipe->fermentables[recipe->fermentables_row].f_amount); |
|
1418 |
|
1419 item = new QTableWidgetItem(QString("%1%").arg(recipe->fermentables[recipe->fermentables_row].f_percentage, 2, 'f', 1, '0')); |
|
1420 item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter); |
|
1421 ui->fermentablesTable->setItem(recipe->fermentables_row, 8, item); |
|
1422 |
|
1423 item = new QTableWidgetItem(QString("%1 Kg").arg(recipe->fermentables[row100].f_amount, 4, 'f', 3, '0')); |
|
1424 item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter); |
|
1425 ui->fermentablesTable->setItem(row100, 7, item); |
|
1426 |
|
1427 item = new QTableWidgetItem(QString("%1%").arg(recipe->fermentables[row100].f_percentage, 2, 'f', 1, '0')); |
|
1428 item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter); |
|
1429 ui->fermentablesTable->setItem(row100, 8, item); |
|
1430 |
|
1431 this->ignoreChanges = false; |
|
1432 is_changed(); |
1388 } |
1433 } |
1389 |
1434 |
1390 |
1435 |
1391 void EditRecipe::on_editFermentRow_clicked() |
1436 void EditRecipe::on_editFermentRow_clicked() |
1392 { |
1437 { |
1393 QPushButton *pb = qobject_cast<QPushButton *>(QObject::sender()); |
1438 QPushButton *pb = qobject_cast<QPushButton *>(QObject::sender()); |
1394 editrow = pb->objectName().toInt(); |
1439 recipe->fermentables_row = pb->objectName().toInt(); |
1395 qDebug() << "Edit fermentable row" << editrow; |
1440 qDebug() << "Edit fermentable row" << recipe->fermentables_row; |
1396 Fermentables backup = recipe->fermentables.at(editrow); |
1441 Fermentables backup = recipe->fermentables.at(recipe->fermentables_row); |
1397 |
1442 |
1398 QDialog* dialog = new QDialog(this); |
1443 QDialog* dialog = new QDialog(this); |
1399 dialog->resize(738, 287); |
1444 dialog->resize(738, 287); |
1400 QDialogButtonBox *buttonBox = new QDialogButtonBox(dialog); |
1445 QDialogButtonBox *buttonBox = new QDialogButtonBox(dialog); |
1401 buttonBox->setObjectName(QString::fromUtf8("buttonBox")); |
1446 buttonBox->setObjectName(QString::fromUtf8("buttonBox")); |
1453 selectEdit = new QComboBox(dialog); |
1498 selectEdit = new QComboBox(dialog); |
1454 selectEdit->setObjectName(QString::fromUtf8("selectEdit")); |
1499 selectEdit->setObjectName(QString::fromUtf8("selectEdit")); |
1455 selectEdit->setGeometry(QRect(160, 70, 251, 23)); |
1500 selectEdit->setGeometry(QRect(160, 70, 251, 23)); |
1456 nameEdit = new QLineEdit(dialog); |
1501 nameEdit = new QLineEdit(dialog); |
1457 nameEdit->setObjectName(QString::fromUtf8("nameEdit")); |
1502 nameEdit->setObjectName(QString::fromUtf8("nameEdit")); |
1458 nameEdit->setText(recipe->fermentables.at(editrow).f_name); |
1503 nameEdit->setText(recipe->fermentables.at(recipe->fermentables_row).f_name); |
1459 nameEdit->setGeometry(QRect(160, 10, 511, 23)); |
1504 nameEdit->setGeometry(QRect(160, 10, 511, 23)); |
1460 nameEdit->setReadOnly(true); |
1505 nameEdit->setReadOnly(true); |
1461 supplierEdit = new QLineEdit(dialog); |
1506 supplierEdit = new QLineEdit(dialog); |
1462 supplierEdit->setObjectName(QString::fromUtf8("supplierEdit")); |
1507 supplierEdit->setObjectName(QString::fromUtf8("supplierEdit")); |
1463 supplierEdit->setText(recipe->fermentables.at(editrow).f_supplier); |
1508 supplierEdit->setText(recipe->fermentables.at(recipe->fermentables_row).f_supplier); |
1464 supplierEdit->setGeometry(QRect(160, 40, 511, 23)); |
1509 supplierEdit->setGeometry(QRect(160, 40, 511, 23)); |
1465 supplierEdit->setReadOnly(true); |
1510 supplierEdit->setReadOnly(true); |
1466 amountEdit = new QDoubleSpinBox(dialog); |
1511 amountEdit = new QDoubleSpinBox(dialog); |
1467 amountEdit->setObjectName(QString::fromUtf8("amountEdit")); |
1512 amountEdit->setObjectName(QString::fromUtf8("amountEdit")); |
1468 amountEdit->setGeometry(QRect(160, 100, 121, 24)); |
1513 amountEdit->setGeometry(QRect(160, 100, 121, 24)); |
1470 amountEdit->setAccelerated(true); |
1515 amountEdit->setAccelerated(true); |
1471 amountEdit->setDecimals(3); |
1516 amountEdit->setDecimals(3); |
1472 amountEdit->setReadOnly(recipe->fermentables_use100); |
1517 amountEdit->setReadOnly(recipe->fermentables_use100); |
1473 amountEdit->setMaximum(100000.0); |
1518 amountEdit->setMaximum(100000.0); |
1474 amountEdit->setSingleStep(0.0010); |
1519 amountEdit->setSingleStep(0.0010); |
1475 amountEdit->setValue(recipe->fermentables.at(editrow).f_amount); |
1520 amountEdit->setValue(recipe->fermentables.at(recipe->fermentables_row).f_amount); |
1476 connect(amountEdit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditRecipe::ferment_amount_changed); |
1521 connect(amountEdit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditRecipe::ferment_amount_changed); |
1477 |
1522 |
1478 pctEdit = new QDoubleSpinBox(dialog); |
1523 pctEdit = new QDoubleSpinBox(dialog); |
1479 pctEdit->setObjectName(QString::fromUtf8("pctEdit")); |
1524 pctEdit->setObjectName(QString::fromUtf8("pctEdit")); |
1480 pctEdit->setGeometry(QRect(160, 130, 121, 24)); |
1525 pctEdit->setGeometry(QRect(160, 130, 121, 24)); |
1481 pctEdit->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); |
1526 pctEdit->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); |
1482 pctEdit->setAccelerated(true); |
1527 pctEdit->setAccelerated(true); |
1483 pctEdit->setDecimals(1); |
1528 pctEdit->setDecimals(1); |
1484 if (recipe->fermentables_use100) { |
1529 if (recipe->fermentables_use100) { |
1485 if (recipe->fermentables.at(editrow).f_adjust_to_total_100) |
1530 if (recipe->fermentables.at(recipe->fermentables_row).f_adjust_to_total_100) |
1486 pctEdit->setReadOnly(true); |
1531 pctEdit->setReadOnly(true); |
1487 else |
1532 else |
1488 pctEdit->setReadOnly(false); |
1533 pctEdit->setReadOnly(false); |
1489 } else { |
1534 } else { |
1490 pctEdit->setReadOnly(true); |
1535 pctEdit->setReadOnly(true); |
1491 } |
1536 } |
1492 pctEdit->setMaximum(100.0); |
1537 pctEdit->setMaximum(100.0); |
1493 pctEdit->setSingleStep(0.1); |
1538 pctEdit->setSingleStep(0.1); |
1494 pctEdit->setValue(recipe->fermentables.at(editrow).f_percentage); |
1539 pctEdit->setValue(recipe->fermentables.at(recipe->fermentables_row).f_percentage); |
1495 connect(pctEdit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditRecipe::ferment_pct_changed); |
1540 connect(pctEdit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditRecipe::ferment_pct_changed); |
1496 |
1541 |
1497 addedEdit = new QComboBox(dialog); |
1542 addedEdit = new QComboBox(dialog); |
1498 addedEdit->setObjectName(QString::fromUtf8("addedEdit")); |
1543 addedEdit->setObjectName(QString::fromUtf8("addedEdit")); |
1499 addedEdit->setGeometry(QRect(160, 190, 161, 23)); |
1544 addedEdit->setGeometry(QRect(160, 190, 161, 23)); |
1501 addedEdit->addItem(tr("Boil")); |
1546 addedEdit->addItem(tr("Boil")); |
1502 addedEdit->addItem(tr("Fermentation")); |
1547 addedEdit->addItem(tr("Fermentation")); |
1503 addedEdit->addItem(tr("Lagering")); |
1548 addedEdit->addItem(tr("Lagering")); |
1504 addedEdit->addItem(tr("Bottle")); |
1549 addedEdit->addItem(tr("Bottle")); |
1505 addedEdit->addItem(tr("Kegs")); |
1550 addedEdit->addItem(tr("Kegs")); |
1506 addedEdit->setCurrentIndex(recipe->fermentables.at(editrow).f_added); |
1551 addedEdit->setCurrentIndex(recipe->fermentables.at(recipe->fermentables_row).f_added); |
1507 |
1552 |
1508 to100Edit = new QCheckBox(dialog); |
1553 to100Edit = new QCheckBox(dialog); |
1509 to100Edit->setObjectName(QString::fromUtf8("to100Edit")); |
1554 to100Edit->setObjectName(QString::fromUtf8("to100Edit")); |
1510 to100Edit->setGeometry(QRect(160, 160, 85, 21)); |
1555 to100Edit->setGeometry(QRect(160, 160, 85, 21)); |
1511 to100Edit->setChecked(recipe->fermentables.at(editrow).f_adjust_to_total_100); |
1556 to100Edit->setChecked(recipe->fermentables.at(recipe->fermentables_row).f_adjust_to_total_100); |
1512 |
1557 |
1513 instockEdit = new QCheckBox(dialog); |
1558 instockEdit = new QCheckBox(dialog); |
1514 instockEdit->setObjectName(QString::fromUtf8("instockEdit")); |
1559 instockEdit->setObjectName(QString::fromUtf8("instockEdit")); |
1515 instockEdit->setGeometry(QRect(550, 70, 85, 21)); |
1560 instockEdit->setGeometry(QRect(550, 70, 85, 21)); |
1516 |
1561 |
1519 maxEdit->setGeometry(QRect(550, 130, 121, 24)); |
1564 maxEdit->setGeometry(QRect(550, 130, 121, 24)); |
1520 maxEdit->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); |
1565 maxEdit->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); |
1521 maxEdit->setReadOnly(true); |
1566 maxEdit->setReadOnly(true); |
1522 maxEdit->setButtonSymbols(QAbstractSpinBox::NoButtons); |
1567 maxEdit->setButtonSymbols(QAbstractSpinBox::NoButtons); |
1523 maxEdit->setDecimals(1); |
1568 maxEdit->setDecimals(1); |
1524 maxEdit->setValue(recipe->fermentables.at(editrow).f_max_in_batch); |
1569 maxEdit->setValue(recipe->fermentables.at(recipe->fermentables_row).f_max_in_batch); |
1525 |
1570 |
1526 connect(buttonBox, SIGNAL(rejected()), dialog, SLOT(reject())); |
1571 connect(buttonBox, SIGNAL(rejected()), dialog, SLOT(reject())); |
1527 connect(buttonBox, SIGNAL(accepted()), dialog, SLOT(accept())); |
1572 connect(buttonBox, SIGNAL(accepted()), dialog, SLOT(accept())); |
1528 dialog->exec(); |
1573 dialog->exec(); |
1529 if (dialog->result() == QDialog::Rejected) { |
1574 if (dialog->result() == QDialog::Rejected) { |