--- a/src/EditProfileWater.cpp Tue Jul 12 16:01:49 2022 +0200 +++ b/src/EditProfileWater.cpp Sat Jul 16 15:06:40 2022 +0200 @@ -16,6 +16,8 @@ */ #include "EditProfileWater.h" #include "../ui/ui_EditProfileWater.h" +#include "global.h" +#include "Utils.h" #include "MainWindow.h" @@ -35,34 +37,43 @@ query.exec(); query.next(); - ui->nameEdit->setText(query.value(1).toString()); - ui->caEdit->setValue(query.value(2).toDouble()); - ui->hcoEdit->setValue(query.value(3).toDouble()); - ui->so4Edit->setValue(query.value(4).toDouble()); - ui->clEdit->setValue(query.value(5).toDouble()); - ui->naEdit->setValue(query.value(6).toDouble()); - ui->mgEdit->setValue(query.value(7).toDouble()); - ui->phEdit->setValue(query.value(8).toDouble()); - ui->notesEdit->setPlainText(query.value(9).toString()); - ui->alkalinityEdit->setValue(query.value(10).toDouble()); + ui->nameEdit->setText(query.value("name").toString()); + calcium = query.value("calcium").toDouble(); + ui->caEdit->setValue(query.value("calcium").toDouble()); + bicarbonate = query.value("bicarbonate").toDouble(); + ui->hcoEdit->setValue(query.value("bicarbonate").toDouble()); + sulfate = query.value("sulfate").toDouble(); + ui->so4Edit->setValue(query.value("sulfate").toDouble()); + chloride = query.value("chloride").toDouble(); + ui->clEdit->setValue(query.value("chloride").toDouble()); + sodium = query.value("sodium").toDouble(); + ui->naEdit->setValue(query.value("sodium").toDouble()); + magnesium = query.value("magnesium").toDouble(); + ui->mgEdit->setValue(query.value("magnesium").toDouble()); + ph = query.value("ph").toDouble(); + ui->phEdit->setValue(query.value("ph").toDouble()); + ui->notesEdit->setPlainText(query.value("notes").toString()); + total_alkalinity = query.value("total_alkalinity").toDouble(); + ui->alkalinityEdit->setValue(query.value("total_alkalinity").toDouble()); } else { /* Set some defaults */ + calcium = bicarbonate = sulfate = chloride = 0; + sodium = magnesium = total_alkalinity = 0; + ph = 7.0; ui->phEdit->setValue(7.0); } + ui->saveButton->setEnabled(false); + ui->deleteButton->setEnabled((id >= 0) ? true:false); WaterSet(); connect(ui->nameEdit, &QLineEdit::textChanged, this, &EditProfileWater::is_changed); - connect(ui->caEdit, &QDoubleSpinBox::textChanged, this, &EditProfileWater::water_changed); - connect(ui->hcoEdit, &QDoubleSpinBox::textChanged, this, &EditProfileWater::hco_changed); - connect(ui->so4Edit, &QDoubleSpinBox::textChanged, this, &EditProfileWater::water_changed); - connect(ui->clEdit, &QDoubleSpinBox::textChanged, this, &EditProfileWater::water_changed); - connect(ui->naEdit, &QDoubleSpinBox::textChanged, this, &EditProfileWater::water_changed); - connect(ui->mgEdit, &QDoubleSpinBox::textChanged, this, &EditProfileWater::water_changed); - connect(ui->phEdit, &QDoubleSpinBox::textChanged, this, &EditProfileWater::water_changed); - connect(ui->alkalinityEdit, &QDoubleSpinBox::textChanged, this, &EditProfileWater::alkalinity_changed); + connect(ui->caEdit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditProfileWater::calcium_changed); + connect(ui->so4Edit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditProfileWater::sulfate_changed); + connect(ui->clEdit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditProfileWater::chloride_changed); + connect(ui->naEdit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditProfileWater::sodium_changed); + connect(ui->mgEdit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditProfileWater::magnesium_changed); + connect(ui->phEdit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditProfileWater::ph_changed); + connect(ui->alkalinityEdit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditProfileWater::total_alkalinity_changed); connect(ui->notesEdit, SIGNAL(textChanged()), this, SLOT(is_changed())); - - ui->saveButton->setEnabled(false); - ui->deleteButton->setEnabled((id >= 0) ? true:false); } @@ -81,10 +92,10 @@ { QString txt; - if (this->recno < 0) { + if (recno < 0) { txt = QString(tr("BMSapp - Add new brewing water")); } else { - txt = QString(tr("BMSapp - Edit brewing water %1").arg(this->recno)); + txt = QString(tr("BMSapp - Edit brewing water %1").arg(recno)); } if (this->textIsChanged) { @@ -105,7 +116,7 @@ } if (this->textIsChanged) { - if (this->recno == -1) { + if (recno == -1) { query.prepare("INSERT INTO profile_water SET name=:name, calcium=:ca, " "bicarbonate=:hco, sulfate=:so4, chloride=:cl, sodium=:na, magnesium=:mg, ph=:ph, notes=:notes, " "total_alkalinity=:alkalinity, uuid = :uuid"); @@ -115,16 +126,16 @@ "total_alkalinity=:alkalinity WHERE record = :recno"); } query.bindValue(":name", ui->nameEdit->text()); - query.bindValue(":ca", QString("%1").arg(ui->caEdit->value(), 2, 'f', 1, '0')); - query.bindValue(":hco", QString("%1").arg(ui->hcoEdit->value(), 2, 'f', 1, '0')); - query.bindValue(":so4", QString("%1").arg(ui->so4Edit->value(), 2, 'f', 1, '0')); - query.bindValue(":cl", QString("%1").arg(ui->clEdit->value(), 2, 'f', 1, '0')); - query.bindValue(":na", QString("%1").arg(ui->naEdit->value(), 2, 'f', 1, '0')); - query.bindValue(":mg", QString("%1").arg(ui->mgEdit->value(), 2, 'f', 1, '0')); - query.bindValue(":ph", QString("%1").arg(ui->phEdit->value(), 3, 'f', 2, '0')); + query.bindValue(":ca", round(calcium * 1000) / 1000); + query.bindValue(":hco", round(bicarbonate * 1000) / 1000); + query.bindValue(":so4", round(sulfate * 1000) / 1000); + query.bindValue(":cl", round(chloride * 1000) / 1000); + query.bindValue(":na", round(sodium * 1000) / 1000); + query.bindValue(":mg", round(magnesium * 1000) / 1000); + query.bindValue(":ph", round(ph * 1000) / 1000); query.bindValue(":notes", ui->notesEdit->toPlainText()); - query.bindValue(":alkalinity", QString("%1").arg(ui->alkalinityEdit->value(), 2, 'f', 1, '0')); - if (this->recno == -1) { + query.bindValue(":alkalinity", round(total_alkalinity * 1000) / 1000); + if (recno == -1) { query.bindValue(":uuid", QUuid::createUuid().toString().mid(1, 36)); } else { query.bindValue(":recno", this->recno); @@ -173,12 +184,21 @@ void EditProfileWater::WaterSet() { - double cations, anions, balance; + double CO3 = total_alkalinity * pow(10, ph - 10.33) / (1+2* pow(10, ph - 10.33)) * MMCO3 / (MMCaCO3 / 2); + double t_bicarbonate = Utils::Bicarbonate(total_alkalinity, ph); + qDebug() << t_bicarbonate << bicarbonate; + if ((round(t_bicarbonate * 1000) / 1000) != bicarbonate) + is_changed(); + bicarbonate = t_bicarbonate; + ui->hcoEdit->setValue(bicarbonate); - cations = (ui->caEdit->value() / 20.039) + (ui->mgEdit->value() / 12.1525) + (ui->naEdit->value() / 22.989); - anions = (ui->hcoEdit->value() / 61.016) + (ui->so4Edit->value() / 48.031) + (ui->clEdit->value() / 35.4527); - balance = round((cations - anions) * 100) / 100; + double cations = (2*calcium / MMCa) + (2*magnesium / MMMg) + (sodium / MMNa); + double anions = (bicarbonate / MMHCO3) + (2*CO3 / MMCO3) + (2*sulfate / MMSO4) + (chloride / MMCl); + double balance = round((cations - anions) * 100) / 100; ui->balanceEdit->setValue(balance); + ui->co3Edit->setValue(CO3); + ui->hardnessEdit->setValue(Utils::Hardness(calcium, magnesium)); + ui->raEdit->setValue(Utils::ResidualAlkalinity(total_alkalinity, calcium, magnesium)); if (balance <= 0.1 && balance >= -0.1) { ui->balanceIcon->setPixmap(QPixmap(":icons/silk/tick.png")); @@ -206,16 +226,51 @@ } -void EditProfileWater::hco_changed() +void EditProfileWater::calcium_changed(double val) +{ + calcium = val; + water_changed(); +} + + +void EditProfileWater::total_alkalinity_changed(double val) { - ui->alkalinityEdit->setValue(ui->hcoEdit->value() * 50 / 61); + total_alkalinity = val; + water_changed(); +} + + +void EditProfileWater::sulfate_changed(double val) +{ + sulfate = val; water_changed(); } -void EditProfileWater::alkalinity_changed() +void EditProfileWater::chloride_changed(double val) +{ + chloride = val; + water_changed(); +} + + +void EditProfileWater::sodium_changed(double val) { - ui->hcoEdit->setValue(ui->alkalinityEdit->value() * 1.22); + sodium = val; + water_changed(); +} + + +void EditProfileWater::magnesium_changed(double val) +{ + magnesium = val; + water_changed(); +} + + +void EditProfileWater::ph_changed(double val) +{ + ph = val; water_changed(); }