src/EditRecipe.cpp

changeset 117
84eda8ff3b60
parent 116
6f415bf6340a
child 118
c57771e40ca8
equal deleted inserted replaced
116:6f415bf6340a 117:84eda8ff3b60
26 QSqlQuery query; 26 QSqlQuery query;
27 27
28 qDebug() << "EditRecipe record:" << id; 28 qDebug() << "EditRecipe record:" << id;
29 recipe = new Recipe; 29 recipe = new Recipe;
30 ui->setupUi(this); 30 ui->setupUi(this);
31 recipe->fermentables_current = recipe->hops_current = recipe->misc_current = recipe->yeasts_current = recipe->mashs_current = -1; 31 recipe->fermentables_row = recipe->hops_row = recipe->misc_row = recipe->yeasts_row = recipe->mashs_row = -1;
32 recipe->fermentables_use100 = false; 32 recipe->fermentables_use100 = false;
33 this->recno = id; 33 this->recno = id;
34 34
35 WindowTitle(); 35 WindowTitle();
36 36
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) {

mercurial