224 chloride += (2 * ui->bs_cacl2Edit->value() * MMCl / MMCaCl2 * 1000 + ui->bs_naclEdit->value() * MMCl / MMNaCl * 1000 + |
224 chloride += (2 * ui->bs_cacl2Edit->value() * MMCl / MMCaCl2 * 1000 + ui->bs_naclEdit->value() * MMCl / MMNaCl * 1000 + |
225 ui->bs_mgcl2Edit->value() * MMCl / MMMgCl2 * 1000) / liters; |
225 ui->bs_mgcl2Edit->value() * MMCl / MMMgCl2 * 1000) / liters; |
226 bicarbonate += (ui->bs_nahco3Edit->value() * MMHCO3 / MMNaHCO3 * 1000 + ui->bs_caco3Edit->value() / 3 * MMHCO3 / MMCaCO3 * 1000) / liters; |
226 bicarbonate += (ui->bs_nahco3Edit->value() * MMHCO3 / MMNaHCO3 * 1000 + ui->bs_caco3Edit->value() / 3 * MMHCO3 / MMCaCO3 * 1000) / liters; |
227 } |
227 } |
228 |
228 |
|
229 const QSignalBlocker blocker1(ui->mw_acidPick); |
|
230 const QSignalBlocker blocker2(ui->mw_acidpercEdit); |
|
231 const QSignalBlocker blocker3(ui->mw_acidvolEdit); |
|
232 const QSignalBlocker blocker4(ui->wb_phEdit); |
|
233 const QSignalBlocker blocker5(ui->mw_phEdit); |
|
234 |
229 if (recipe->wa_acid_name < 0 || recipe->wa_acid_name >= my_acids.size()) { |
235 if (recipe->wa_acid_name < 0 || recipe->wa_acid_name >= my_acids.size()) { |
230 recipe->wa_acid_name = 0; |
236 recipe->wa_acid_name = 0; |
231 recipe->wa_acid_perc = my_acids.at(0).AcidPrc; |
237 recipe->wa_acid_perc = my_acids.at(0).AcidPrc; |
232 this->ignoreChanges = true; |
|
233 ui->mw_acidPick->setCurrentIndex(0); |
238 ui->mw_acidPick->setCurrentIndex(0); |
234 ui->mw_acidpercEdit->setValue(my_acids.at(0).AcidPrc); |
239 ui->mw_acidpercEdit->setValue(my_acids.at(0).AcidPrc); |
235 this->ignoreChanges = false; |
|
236 } |
240 } |
237 AT = recipe->wa_acid_name; |
241 AT = recipe->wa_acid_name; |
238 |
242 |
239 /* |
243 /* |
240 * Note that the next calculations do not correct the pH change by the added salts. |
244 * Note that the next calculations do not correct the pH change by the added salts. |
256 Acid = round((Acid / (recipe->wa_acid_perc / 100.0)) * 100.0) / 100.0; |
260 Acid = round((Acid / (recipe->wa_acid_perc / 100.0)) * 100.0) / 100.0; |
257 qDebug() << " Mash auto Acid final ml:" << Acid; |
261 qDebug() << " Mash auto Acid final ml:" << Acid; |
258 |
262 |
259 QString w = my_acids[AT].name_en + ' ' + my_acids[AT].name_nl; |
263 QString w = my_acids[AT].name_en + ' ' + my_acids[AT].name_nl; |
260 brewing_salt_sub(w, Acid); |
264 brewing_salt_sub(w, Acid); |
261 this->ignoreChanges = true; |
|
262 ui->mw_acidvolEdit->setValue(Acid); |
265 ui->mw_acidvolEdit->setValue(Acid); |
263 this->ignoreChanges = false; |
|
264 |
266 |
265 bicarbonate = bicarbonate - protonDeficit * frac / liters; |
267 bicarbonate = bicarbonate - protonDeficit * frac / liters; |
266 total_alkalinity = bicarbonate * 50 / 61; |
268 total_alkalinity = bicarbonate * 50 / 61; |
267 } |
269 } |
268 ph = TpH; |
270 ph = TpH; |
269 this->ignoreChanges = true; |
|
270 ui->wb_phEdit->setValue(ph); |
271 ui->wb_phEdit->setValue(ph); |
271 this->ignoreChanges = false; |
|
272 recipe->mash_ph = ph; |
272 recipe->mash_ph = ph; |
273 } else { // Manual |
273 } else { // Manual |
274 /* |
274 /* |
275 * Manual adjust acid, calculate resulting pH. |
275 * Manual adjust acid, calculate resulting pH. |
276 */ |
276 */ |
304 //qDebug() << " n:" << n << "pd:" << pd << "protonDeficit:" << protonDeficit << "frac:" << frac << "pHa:" << pHa; |
304 //qDebug() << " n:" << n << "pd:" << pd << "protonDeficit:" << protonDeficit << "frac:" << frac << "pHa:" << pHa; |
305 |
305 |
306 bicarbonate = wg_bicarbonate - protonDeficit * frac / liters; |
306 bicarbonate = wg_bicarbonate - protonDeficit * frac / liters; |
307 total_alkalinity = bicarbonate * 50 / 61; |
307 total_alkalinity = bicarbonate * 50 / 61; |
308 ph = pHa; |
308 ph = pHa; |
309 this->ignoreChanges = true; |
|
310 ui->wb_phEdit->setValue(ph); |
309 ui->wb_phEdit->setValue(ph); |
311 ui->mw_phEdit->setValue(ph); |
310 ui->mw_phEdit->setValue(ph); |
312 this->ignoreChanges = false; |
|
313 recipe->mash_ph = ph; |
311 recipe->mash_ph = ph; |
314 } |
312 } |
315 |
313 |
316 if ((AT == 3) && (liters > 0)) { // Sulfuctic / Zwavelzuur |
314 if ((AT == 3) && (liters > 0)) { // Sulfuctic / Zwavelzuur |
317 RA = ui->bs_caso4Edit->value() * MMSO4 / MMCaSO4 + ui->bs_mgso4Edit->value() * MMSO4 / MMMgSO4 + Acidmg / 1000 * MMSO4 / (MMSO4 + 2); |
315 RA = ui->bs_caso4Edit->value() * MMSO4 / MMCaSO4 + ui->bs_mgso4Edit->value() * MMSO4 / MMMgSO4 + Acidmg / 1000 * MMSO4 / (MMSO4 + 2); |
505 void EditRecipe::w1_name_changed(int val) |
503 void EditRecipe::w1_name_changed(int val) |
506 { |
504 { |
507 QSqlQuery query; |
505 QSqlQuery query; |
508 |
506 |
509 qDebug() << "w1_name_changed" << val; |
507 qDebug() << "w1_name_changed" << val; |
|
508 const QSignalBlocker blocker1(ui->w1_nameEdit); |
510 if (val == 0) { |
509 if (val == 0) { |
511 /* |
510 /* |
512 * If no water is selected, take the default water. |
511 * If no water is selected, take the default water. |
513 */ |
512 */ |
514 this->ignoreChanges = true; |
|
515 val = my_default_water; |
513 val = my_default_water; |
516 ui->w1_nameEdit->setCurrentIndex(val); |
514 ui->w1_nameEdit->setCurrentIndex(val); |
517 this->ignoreChanges = false; |
|
518 } |
515 } |
519 |
516 |
520 query.prepare("SELECT * FROM inventory_waters ORDER BY record"); |
517 query.prepare("SELECT * FROM inventory_waters ORDER BY record"); |
521 query.exec(); |
518 query.exec(); |
522 query.first(); |
519 query.first(); |
523 for (int i = 0; i < (val - 1); i++) { |
520 for (int i = 0; i < (val - 1); i++) { |
524 query.next(); |
521 query.next(); |
525 } |
522 } |
526 qDebug() << "set water" << query.value(1).toString(); |
523 qDebug() << "set water" << query.value(1).toString(); |
527 |
524 |
|
525 recipe->w1_name = query.value(1).toString(); |
528 recipe->w1_calcium = query.value(3).toDouble(); |
526 recipe->w1_calcium = query.value(3).toDouble(); |
529 recipe->w1_magnesium = query.value(8).toDouble(); |
527 recipe->w1_magnesium = query.value(8).toDouble(); |
530 recipe->w1_total_alkalinity = query.value(11).toDouble(); |
528 recipe->w1_total_alkalinity = query.value(11).toDouble(); |
531 recipe->w1_sodium = query.value(7).toDouble(); |
529 recipe->w1_sodium = query.value(7).toDouble(); |
532 recipe->w1_chloride = query.value(6).toDouble(); |
530 recipe->w1_chloride = query.value(6).toDouble(); |
552 QSqlQuery query; |
550 QSqlQuery query; |
553 |
551 |
554 qDebug() << "w2_name_changed" << val; |
552 qDebug() << "w2_name_changed" << val; |
555 |
553 |
556 if (val == 0) { // Clear water 2. |
554 if (val == 0) { // Clear water 2. |
|
555 recipe->w2_name = ""; |
557 recipe->w2_calcium = 0; |
556 recipe->w2_calcium = 0; |
558 recipe->w2_magnesium = 0; |
557 recipe->w2_magnesium = 0; |
559 recipe->w2_total_alkalinity = 0; |
558 recipe->w2_total_alkalinity = 0; |
560 recipe->w2_sodium = 0; |
559 recipe->w2_sodium = 0; |
561 recipe->w2_chloride = 0; |
560 recipe->w2_chloride = 0; |
570 for (int i = 0; i < (val - 1); i++) { |
569 for (int i = 0; i < (val - 1); i++) { |
571 query.next(); |
570 query.next(); |
572 } |
571 } |
573 qDebug() << "set water" << query.value(1).toString(); |
572 qDebug() << "set water" << query.value(1).toString(); |
574 |
573 |
|
574 recipe->w2_name = query.value(1).toString(); |
575 recipe->w2_calcium = query.value(3).toDouble(); |
575 recipe->w2_calcium = query.value(3).toDouble(); |
576 recipe->w2_magnesium = query.value(8).toDouble(); |
576 recipe->w2_magnesium = query.value(8).toDouble(); |
577 recipe->w2_total_alkalinity = query.value(11).toDouble(); |
577 recipe->w2_total_alkalinity = query.value(11).toDouble(); |
578 recipe->w2_sodium = query.value(7).toDouble(); |
578 recipe->w2_sodium = query.value(7).toDouble(); |
579 recipe->w2_chloride = query.value(6).toDouble(); |
579 recipe->w2_chloride = query.value(6).toDouble(); |
644 mash_infuse += amount; |
644 mash_infuse += amount; |
645 recipe->mashs[i].step_volume = mash_infuse; |
645 recipe->mashs[i].step_volume = mash_infuse; |
646 } |
646 } |
647 } |
647 } |
648 |
648 |
649 this->ignoreChanges = true; |
649 const QSignalBlocker blocker1(ui->w1_volEdit); |
|
650 const QSignalBlocker blocker2(ui->w2_volEdit); |
|
651 |
650 if (recipe->w2_amount == 0) { |
652 if (recipe->w2_amount == 0) { |
651 recipe->w1_amount = mash_infuse; |
653 recipe->w1_amount = mash_infuse; |
652 ui->w1_volEdit->setValue(mash_infuse); |
654 ui->w1_volEdit->setValue(mash_infuse); |
653 } else { |
655 } else { |
654 double w1 = (recipe->w1_amount / (recipe->w1_amount + recipe->w2_amount)) * mash_infuse; |
656 double w1 = (recipe->w1_amount / (recipe->w1_amount + recipe->w2_amount)) * mash_infuse; |
658 ui->w1_volEdit->setValue(recipe->w1_amount); |
660 ui->w1_volEdit->setValue(recipe->w1_amount); |
659 ui->w2_volEdit->setValue(recipe->w2_amount); |
661 ui->w2_volEdit->setValue(recipe->w2_amount); |
660 } |
662 } |
661 recipe->wg_amount = mash_infuse; |
663 recipe->wg_amount = mash_infuse; |
662 ui->wg_volEdit->setValue(mash_infuse); |
664 ui->wg_volEdit->setValue(mash_infuse); |
663 this->ignoreChanges = false; |
|
664 } |
665 } |
665 |
666 |
666 |
667 |
667 void EditRecipe::wb_cacl2_changed(double val) { set_brewing_salt("CaCl2", val); } |
668 void EditRecipe::wb_cacl2_changed(double val) { set_brewing_salt("CaCl2", val); } |
668 void EditRecipe::wb_caso4_changed(double val) { set_brewing_salt("CaSO4", val); } |
669 void EditRecipe::wb_caso4_changed(double val) { set_brewing_salt("CaSO4", val); } |