diff -r 3b9abdae181e -r 84091b9cb800 src/EditProductTab8.cpp --- a/src/EditProductTab8.cpp Sat Jun 01 21:10:54 2024 +0200 +++ b/src/EditProductTab8.cpp Sat Jun 08 15:54:30 2024 +0200 @@ -146,13 +146,13 @@ void EditProduct::setButtons(bool locked) { if (locked) { - /* - * If the brew is done, disable the buttons and that's it. - */ - ui->w1_spButton->setDisabled(true); - ui->w2_spButton->setDisabled(true); - ui->wg_spButton->setDisabled(true); - return; + /* + * If the brew is done, disable the buttons and that's it. + */ + ui->w1_spButton->setDisabled(true); + ui->w2_spButton->setDisabled(true); + ui->wg_spButton->setDisabled(true); + return; } ui->w1_spButton->setDisabled(false); @@ -161,13 +161,13 @@ const QSignalBlocker blocker3(ui->wg_spButton); if (product->w2_name != "") { - ui->w2_spButton->setDisabled(false); - if (product->w2_amount > 0.1 && product->w2_ph > 5) { + ui->w2_spButton->setDisabled(false); + if (product->w2_amount > 0.1 && product->w2_ph > 5) { /* * Water 2 is valid and used for mash, mixed is available. */ ui->wg_spButton->setDisabled(false); - } else { + } else { /* * No mixed water for mash. We can still sparge with source 2. */ @@ -179,16 +179,17 @@ product->sparge_source = 1; ui->w2_spButton->setChecked(true); } - } + } } else { ui->w2_spButton->setDisabled(true); ui->wg_spButton->setDisabled(true); product->sparge_source = 0; // Fallback to source 1 - ui->w1_spButton->setChecked(true); + ui->w1_spButton->setChecked(true); } } + void EditProduct::calcBU() { if (product->stage < PROD_STAGE_WAIT) @@ -303,6 +304,7 @@ /* Save mixed water ions for later */ double wg_calcium = calcium; + double wg_magnesium = magnesium; double wg_sodium = sodium; double wg_total_alkalinity = total_alkalinity; double wg_chloride = chloride; @@ -494,6 +496,31 @@ ui->wb_hco3Edit->setStyleSheet((bicarbonate > 250) ? "background-color: red":"background-color: green"); ui->wb_caco3Edit->setStyleSheet((bicarbonate > 250) ? "background-color: red":"background-color: green"); + /* Calculate Actual Adjustments */ + product->aa_calcium = calcium - product->wg_calcium; + product->aa_magnesium = magnesium - product->wg_magnesium; + product->aa_bicarbonate = bicarbonate - wg_bicarbonate; + product->aa_sodium = sodium - product->wg_sodium; + product->aa_chloride = chloride - product->wg_chloride; + product->aa_sulfate = sulfate - product->wg_sulfate; + product->aa_hardness = Utils::Hardness(calcium, magnesium) - Utils::Hardness(wg_calcium, wg_magnesium); + + if (product->tw_name != "") { + /* Calculate Target Adjustments */ + product->ta_calcium = product->tw_calcium - product->wg_calcium; + product->ta_magnesium = product->tw_magnesium - product->wg_magnesium; + product->ta_bicarbonate = Utils::Bicarbonate(product->tw_total_alkalinity, product->tw_ph) - wg_bicarbonate; + product->ta_sodium = product->tw_sodium - product->wg_sodium; + product->ta_chloride = product->tw_chloride - product->wg_chloride; + product->ta_sulfate = product->tw_sulfate - product->wg_sulfate; + product->ta_hardness = Utils::Hardness(product->tw_calcium, product->tw_magnesium) - Utils::Hardness(product->wg_calcium, product->wg_magnesium); + } else { + product->ta_calcium = product->ta_magnesium = product->ta_bicarbonate = product->ta_sodium = 0; + product->ta_chloride = product->ta_sulfate = product->ta_hardness = 0; + } + + waterTreated_Show(ui->wx_Select->isChecked()); + waterAdjust_Show(false); calcSparge(); } @@ -545,17 +572,7 @@ ui->ss_mgcl2Edit->value() * MMCl / MMMgCl2 * 1000) / product->sparge_volume; } - /* Show the spargewater with salt additions. */ - ui->sp_caEdit->setValue(product->ws_calcium); - ui->sp_mgEdit->setValue(product->ws_magnesium); - ui->sp_hco3Edit->setValue(Utils::Bicarbonate(product->ws_total_alkalinity, Source_pH)); - ui->sp_caco3Edit->setValue(product->ws_total_alkalinity); - ui->sp_naEdit->setValue(product->ws_sodium); - ui->sp_clEdit->setValue(product->ws_chloride); - ui->sp_so4Edit->setValue(product->ws_sulfate); - ui->sp_phShow->setValue(product->sparge_ph); - ui->sp_hardnessEdit->setValue(Utils::Hardness(product->ws_calcium, product->ws_magnesium)); - ui->sp_raEdit->setValue(Utils::ResidualAlkalinity(product->ws_total_alkalinity, product->ws_calcium, product->ws_magnesium)); + waterTreated_Show(ui->wx_Select->isChecked()); int AT = product->sparge_acid_type; if (AT < 0 || AT >= my_acids.size()) { @@ -630,16 +647,110 @@ } + void EditProduct::sp_group_changed(int val) { if (val != product->sparge_source) { product->sparge_source = val; - calcSparge(); - is_changed(); + calcSparge(); + is_changed(); + } +} + + + +void EditProduct::waterAdjust_Show(bool val) +{ + if (val) { + ui->waterAdjust->setText(tr("Target Water Adjustment")); + ui->aa_caEdit->setValue(product->ta_calcium); + ui->aa_mgEdit->setValue(product->ta_magnesium); + ui->aa_hco3Edit->setValue(product->ta_bicarbonate); + ui->aa_naEdit->setValue(product->ta_sodium); + ui->aa_clEdit->setValue(product->ta_chloride); + ui->aa_so4Edit->setValue(product->ta_sulfate); + ui->aa_hardnessEdit->setValue(product->ta_hardness); + } else { + ui->waterAdjust->setText(tr("Actual Water Adjustment")); + ui->aa_caEdit->setValue(product->aa_calcium); + ui->aa_mgEdit->setValue(product->aa_magnesium); + ui->aa_hco3Edit->setValue(product->aa_bicarbonate); + ui->aa_naEdit->setValue(product->aa_sodium); + ui->aa_clEdit->setValue(product->aa_chloride); + ui->aa_so4Edit->setValue(product->aa_sulfate); + ui->aa_hardnessEdit->setValue(product->aa_hardness); } } + +void EditProduct::waterTreated_Show(bool val) +{ + double calcium, magnesium, total_alkalinity, sodium; + double chloride, sulfate, ph, volume, bicarbonate; + + qDebug() << " wx_Select->isChecked()" << ui->wx_Select->isChecked(); + + if (val) { + ui->wx_Select->setText(tr("Treated Sparge Water")); + calcium = product->ws_calcium; + magnesium = product->ws_magnesium; + total_alkalinity = product->ws_total_alkalinity; + sodium = product->ws_sodium; + chloride = product->ws_chloride; + sulfate = product->ws_sulfate; + ph = product->sparge_ph; + volume = product->sparge_volume; + } else { + ui->wx_Select->setText(tr("Treated Mash Water")); + calcium = product->wb_calcium; + magnesium = product->wb_magnesium; + total_alkalinity = product->wb_total_alkalinity; + sodium = product->wb_sodium; + chloride = product->wb_chloride; + sulfate = product->wb_sulfate; + ph = product->wb_ph; + volume = product->wg_amount; + } + + bicarbonate = Utils::Bicarbonate(total_alkalinity, ph); + ui->wx_caEdit->setValue(calcium); + ui->wx_mgEdit->setValue(magnesium); + ui->wx_hco3Edit->setValue(bicarbonate); + ui->wx_caco3Edit->setValue(total_alkalinity); + ui->wx_naEdit->setValue(sodium); + ui->wx_clEdit->setValue(chloride); + ui->wx_so4Edit->setValue(sulfate); + ui->wx_hardnessEdit->setValue(Utils::Hardness(calcium, magnesium)); + ui->wx_raEdit->setValue(Utils::ResidualAlkalinity(total_alkalinity, calcium, magnesium)); + ui->wx_phEdit->setValue(ph); + ui->wx_volEdit->setValue(volume); + + ui->wx_caEdit->setStyleSheet((calcium < 40 || calcium > 150) ? "background-color: red":"background-color: green"); + ui->wx_mgEdit->setStyleSheet((magnesium < 5 || magnesium > 40) ? "background-color: red":"background-color: green"); + ui->wx_naEdit->setStyleSheet((sodium > 150) ? "background-color: red":"background-color: green"); + + /* + * Both chloride and sulfate should be above 50 according to + * John Palmer. So the Cl/SO4 ratio calculation will work. + */ + ui->wx_clEdit->setStyleSheet((chloride <= 50 || chloride > 150) ? "background-color: red":"background-color: green"); + ui->wx_so4Edit->setStyleSheet((sulfate <= 50 || sulfate > 400) ? "background-color: red":"background-color: green"); + + /* + * (cloride + sulfate) > 500 is too high + */ + if ((chloride + sulfate) > 500) { + ui->wx_clEdit->setStyleSheet("background-color: red"); + ui->wx_so4Edit->setStyleSheet("background-color: red"); + } + ui->wx_phEdit->setStyleSheet((ph < 5.2 || ph > 5.6) ? "background-color: red":"background-color: green"); + ui->wx_hco3Edit->setStyleSheet((bicarbonate > 250) ? "background-color: red":"background-color: green"); + ui->wx_caco3Edit->setStyleSheet((bicarbonate > 250) ? "background-color: red":"background-color: green"); +} + + + void EditProduct::sp_volume_changed(double val) { if (! product->calc_acid) { @@ -798,7 +909,7 @@ const QSignalBlocker blocker1(ui->sp_phEdit); product->sparge_ph = round(TargetpH * 100) / 100; ui->sp_phEdit->setValue(product->sparge_ph); - ui->sp_phShow->setValue(product->sparge_ph); +// ui->sp_phShow->setValue(product->sparge_ph); QString w = my_acids[AT].name_en + ' ' + my_acids[AT].name_nl; set_brewing_salt(w, val, MISC_USES_SPARGE); @@ -825,9 +936,9 @@ double EditProduct::GetOptSO4Clratio() { - if (ui->wt_so4Edit->value() > 0 && ui->wt_clEdit->value()) { + if (ui->tw_so4Edit->value() > 0 && ui->tw_clEdit->value()) { /* If target water is selected .. */ - return (ui->wt_so4Edit->value() / ui->wt_clEdit->value()); + return (ui->tw_so4Edit->value() / ui->tw_clEdit->value()); } double BUGU = GetBUGU(); return (-1.2 * BUGU + 1.4); @@ -956,7 +1067,7 @@ qDebug() << "w2_amount too low"; } ui->w2_spButton->setEnabled(true); - ui->wg_spButton->setEnabled(true); + ui->wg_spButton->setEnabled(true); } } else { /* @@ -1081,15 +1192,17 @@ if (val == 0) { /* Clear values */ - ui->wt_caEdit->setValue(0); - ui->wt_mgEdit->setValue(0); - ui->wt_hco3Edit->setValue(0); - ui->wt_caco3Edit->setValue(0); - ui->wt_naEdit->setValue(0); - ui->wt_clEdit->setValue(0); - ui->wt_so4Edit->setValue(0); - ui->wt_hardnessEdit->setValue(0); - ui->wt_raEdit->setValue(0); + product->tw_name = ""; + product->tw_calcium = 0; + product->tw_sulfate = 0; + product->tw_chloride = 0; + product->tw_sodium = 0; + product->tw_magnesium = 0; + product->tw_total_alkalinity = 0; + product->tw_ph = 7; + ui->tw_hco3Edit->setValue(0); + ui->tw_hardnessEdit->setValue(0); + ui->tw_raEdit->setValue(0); } else { query.prepare("SELECT * FROM profile_water ORDER BY name"); query.exec(); @@ -1097,16 +1210,28 @@ for (int i = 0; i < (val - 1); i++) { query.next(); } - ui->wt_caEdit->setValue(query.value("calcium").toDouble()); - ui->wt_mgEdit->setValue(query.value("magnesium").toDouble()); - ui->wt_hco3Edit->setValue(query.value("bicarbonate").toDouble()); - ui->wt_caco3Edit->setValue(query.value("total_alkalinity").toDouble()); - ui->wt_naEdit->setValue(query.value("sodium").toDouble()); - ui->wt_clEdit->setValue(query.value("chloride").toDouble()); - ui->wt_so4Edit->setValue(query.value("sulfate").toDouble()); - ui->wt_hardnessEdit->setValue(Utils::Hardness(query.value("calcium").toDouble(), query.value("magnesium").toDouble())); - ui->wt_raEdit->setValue(Utils::ResidualAlkalinity(query.value("total_alkalinity").toDouble(), query.value("calcium").toDouble(), query.value("magnesium").toDouble())); + product->tw_name = query.value("name").toString(); + product->tw_calcium = query.value("calcium").toDouble(); + product->tw_sulfate = query.value("sulfate").toDouble(); + product->tw_chloride = query.value("chloride").toDouble(); + product->tw_sodium = query.value("sodium").toDouble(); + product->tw_magnesium = query.value("magnesium").toDouble(); + product->tw_total_alkalinity = query.value("total_alkalinity").toDouble(); + product->tw_ph = query.value("ph").toDouble(); + ui->tw_hco3Edit->setValue(query.value("bicarbonate").toDouble()); + ui->tw_hardnessEdit->setValue(Utils::Hardness(query.value("calcium").toDouble(), query.value("magnesium").toDouble())); + ui->tw_raEdit->setValue(Utils::ResidualAlkalinity(query.value("total_alkalinity").toDouble(), query.value("calcium").toDouble(), query.value("magnesium").toDouble())); } + + ui->tw_caEdit->setValue(product->tw_calcium); + ui->tw_mgEdit->setValue(product->tw_magnesium); + ui->tw_caco3Edit->setValue(product->tw_total_alkalinity); + ui->tw_naEdit->setValue(product->tw_sodium); + ui->tw_clEdit->setValue(product->tw_chloride); + ui->tw_so4Edit->setValue(product->tw_sulfate); + ui->tw_phEdit->setValue(product->tw_ph); + + is_changed(); calcWater(); }