# HG changeset patch # User Michiel Broek # Date 1652704692 -7200 # Node ID 8b84dd3579ef8662589784c97436e7e802f7c5d4 # Parent bec0386b1df131f72b04e12b90885d8eaf2eefea Added calculation tools to measure volume in the boil kettle using measured centimeters. diff -r bec0386b1df1 -r 8b84dd3579ef src/EditProduct.cpp --- a/src/EditProduct.cpp Mon May 16 09:22:28 2022 +0200 +++ b/src/EditProduct.cpp Mon May 16 14:38:12 2022 +0200 @@ -1091,9 +1091,11 @@ connect(ui->brew_preboilphEdit, QOverload::of(&QDoubleSpinBox::valueChanged), this, &EditProduct::brew_preboilph_changed); connect(ui->brew_preboilsgEdit, QOverload::of(&QDoubleSpinBox::valueChanged), this, &EditProduct::brew_preboilsg_changed); connect(ui->brew_preboilvolEdit, QOverload::of(&QDoubleSpinBox::valueChanged), this, &EditProduct::brew_preboilvol_changed); + connect(ui->brew_preboilButton, SIGNAL(clicked()), this, SLOT(brew_preboil_button())); connect(ui->brew_aboilphEdit, QOverload::of(&QDoubleSpinBox::valueChanged), this, &EditProduct::brew_aboilph_changed); connect(ui->brew_aboilsgEdit, QOverload::of(&QDoubleSpinBox::valueChanged), this, &EditProduct::brew_aboilsg_changed); connect(ui->brew_aboilvolEdit, QOverload::of(&QDoubleSpinBox::valueChanged), this, &EditProduct::brew_aboilvol_changed); + connect(ui->brew_aboilButton, SIGNAL(clicked()), this, SLOT(brew_aboil_button())); connect(ui->brew_coolwithEdit, QOverload::of(&QComboBox::currentIndexChanged), this, &EditProduct::brew_cooling_method_changed); connect(ui->brew_cooltoEdit, QOverload::of(&QDoubleSpinBox::valueChanged), this, &EditProduct::brew_cooling_to_changed); connect(ui->brew_cooltimeEdit, QOverload::of(&QDoubleSpinBox::valueChanged), this, &EditProduct::brew_cooling_time_changed); diff -r bec0386b1df1 -r 8b84dd3579ef src/EditProduct.h --- a/src/EditProduct.h Mon May 16 09:22:28 2022 +0200 +++ b/src/EditProduct.h Mon May 16 14:38:12 2022 +0200 @@ -151,9 +151,13 @@ void brew_preboilph_changed(double val); void brew_preboilsg_changed(double val); void brew_preboilvol_changed(double val); + void brew_preboil_cm_changed(double val); + void brew_preboil_button(); void brew_aboilph_changed(double val); void brew_aboilsg_changed(double val); void brew_aboilvol_changed(double val); + void brew_aboil_cm_changed(double val); + void brew_aboil_button(); void brew_cooling_method_changed(int val); void brew_cooling_to_changed(double val); void brew_cooling_time_changed(double val); @@ -240,6 +244,7 @@ void updateBrewday(); void calcEfficiencyBeforeBoil(); void calcEfficiencyAfterBoil(); + void brew_volume_calc(double volume, double kettle_volume, double kettle_height, double est_volume, bool aboil); }; #endif diff -r bec0386b1df1 -r 8b84dd3579ef src/EditProductTab9.cpp --- a/src/EditProductTab9.cpp Mon May 16 09:22:28 2022 +0200 +++ b/src/EditProductTab9.cpp Mon May 16 14:38:12 2022 +0200 @@ -120,6 +120,55 @@ } +void EditProduct::brew_volume_calc(double volume, double kettle_volume, double kettle_height, double est_volume, bool aboil) +{ + double k_cm; + + if (volume > 0) + k_cm = Utils::kettle_cm(volume, kettle_volume, kettle_height); + else + k_cm = Utils::kettle_cm(est_volume, kettle_volume, kettle_height); + + QDialog* dialog = new QDialog(this); + dialog->resize(320, 110); + QDialogButtonBox *buttonBox = new QDialogButtonBox(dialog); + buttonBox->setObjectName(QString::fromUtf8("buttonBox")); + buttonBox->setGeometry(QRect(40, 65, 240, 32)); + buttonBox->setLayoutDirection(Qt::LeftToRight); + buttonBox->setOrientation(Qt::Horizontal); + buttonBox->setStandardButtons(QDialogButtonBox::Ok); + buttonBox->setCenterButtons(true); + + QLabel *cmLabel = new QLabel(dialog); + cmLabel->setObjectName(QString::fromUtf8("cmLabel")); + cmLabel->setText(tr("Distance from top:")); + cmLabel->setGeometry(QRect(10, 20, 141, 20)); + cmLabel->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + + QDoubleSpinBox *cmEdit = new QDoubleSpinBox(dialog); + cmEdit->setObjectName(QString::fromUtf8("cmEdit")); + cmEdit->setGeometry(QRect(160, 20, 121, 24)); + cmEdit->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + cmEdit->setAccelerated(true); + cmEdit->setDecimals(1); + cmEdit->setSuffix(tr(" cm")); + cmEdit->setMaximum(kettle_height * 100); + cmEdit->setSingleStep(0.1); + cmEdit->setValue(k_cm); + + if (aboil) + connect(cmEdit, QOverload::of(&QDoubleSpinBox::valueChanged), this, &EditProduct::brew_aboil_cm_changed); + else + connect(cmEdit, QOverload::of(&QDoubleSpinBox::valueChanged), this, &EditProduct::brew_preboil_cm_changed); + connect(buttonBox, SIGNAL(rejected()), dialog, SLOT(reject())); + connect(buttonBox, SIGNAL(accepted()), dialog, SLOT(accept())); + + dialog->setModal(true); + dialog->exec(); + disconnect(cmEdit, nullptr, nullptr, nullptr); +} + + void EditProduct::brew_preboilph_changed(double val) { if (product->brew_preboil_ph == 0) { @@ -185,6 +234,23 @@ } +void EditProduct::brew_preboil_cm_changed(double val) +{ + double vol = Utils::kettle_vol(val, product->eq_kettle_volume, product->eq_kettle_height); + product->brew_preboil_volume = vol; + const QSignalBlocker blocker1(ui->brew_preboilvolEdit); + ui->brew_preboilvolEdit->setValue(vol); + is_changed(); + calcEfficiencyBeforeBoil(); +} + + +void EditProduct::brew_preboil_button() +{ + brew_volume_calc(product->brew_preboil_volume, product->eq_kettle_volume, product->eq_kettle_height, product->boil_size * 1.04, false); +} + + void EditProduct::brew_aboilph_changed(double val) { if (product->brew_aboil_ph == 0) { @@ -252,6 +318,23 @@ } +void EditProduct::brew_aboil_cm_changed(double val) +{ + double vol = Utils::kettle_vol(val, product->eq_kettle_volume, product->eq_kettle_height); + product->brew_aboil_volume = vol; + const QSignalBlocker blocker1(ui->brew_aboilvolEdit); + ui->brew_aboilvolEdit->setValue(vol); + is_changed(); + calcEfficiencyAfterBoil(); +} + + +void EditProduct::brew_aboil_button() +{ + brew_volume_calc(product->brew_aboil_volume, product->eq_kettle_volume, product->eq_kettle_height, product->batch_size * 1.04, true); +} + + void EditProduct::brew_cooling_method_changed(int val) { product->brew_cooling_method = val; diff -r bec0386b1df1 -r 8b84dd3579ef src/Utils.cpp --- a/src/Utils.cpp Mon May 16 09:22:28 2022 +0200 +++ b/src/Utils.cpp Mon May 16 14:38:12 2022 +0200 @@ -524,3 +524,19 @@ } +double Utils::kettle_cm(double volume, double kettle_volume, double kettle_height) +{ + if ((volume > 0) && (kettle_volume > 0) && (volume <= kettle_volume)) + return round(100 * ((1 - volume / kettle_volume) * kettle_height) * 10.0) / 10.0; + return 0; +} + + +double Utils::kettle_vol(double cm, double kettle_volume, double kettle_height) +{ + if ((cm >= 0) && (kettle_volume > 0) && (cm <= (kettle_height * 100))) + return round(((kettle_height - (cm / 100)) / kettle_height) * kettle_volume * 10.0) / 10.0; + return 0; +} + + diff -r bec0386b1df1 -r 8b84dd3579ef src/Utils.h --- a/src/Utils.h Mon May 16 09:22:28 2022 +0200 +++ b/src/Utils.h Mon May 16 14:38:12 2022 +0200 @@ -37,6 +37,8 @@ double hopFlavourContribution(double bt, double vol, int use, double amount); double hopAromaContribution(double bt, double vol, int use, double amount); QString hours_to_string(int hours); + double kettle_cm(double volume, double kettle_volume, double kettle_height); + double kettle_vol(double cm, double kettle_volume, double kettle_height); /** * @brief Map SRM color to RGB and return as QColor.