src/EditProductTab10.cpp

changeset 219
fa7cad488e27
parent 175
f1ed3a2a94e9
child 296
2f4e250cfed9
--- a/src/EditProductTab10.cpp	Wed May 18 08:59:54 2022 +0200
+++ b/src/EditProductTab10.cpp	Wed May 18 17:03:05 2022 +0200
@@ -1,7 +1,7 @@
 /**
  * EditProduct.cpp is part of bmsapp.
  *
- * Tab 2, equipment settings.
+ * Tab 10, fermentation stages.
  *
  * bmsapp is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -18,3 +18,258 @@
  */
 
 
+void EditProduct::brix_changed(double val)
+{
+    ret_fg = Utils::brix_to_fg(Utils::sg_to_plato(product->brew_fermenter_sg), val);
+    //qDebug() << "brix_changed" << val << product->brew_fermenter_sg << ret_fg;
+}
+
+
+double EditProduct::get_fg(double gravity)
+{
+    QDialog* dialog = new QDialog(this);
+    dialog->resize(360, 110);
+    QDialogButtonBox *buttonBox = new QDialogButtonBox(dialog);
+    buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+    buttonBox->setGeometry(QRect(30, 60, 300, 32));
+    buttonBox->setLayoutDirection(Qt::LeftToRight);
+    buttonBox->setOrientation(Qt::Horizontal);
+    buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
+    buttonBox->setCenterButtons(true);
+
+    QLabel *brixLabel = new QLabel(dialog);
+    brixLabel->setObjectName(QString::fromUtf8("brixLabel"));
+    brixLabel->setText(tr("Refractometer Brix:"));
+    brixLabel->setGeometry(QRect(10, 20, 161, 24));
+    brixLabel->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
+
+    QDoubleSpinBox *brixEdit = new QDoubleSpinBox(dialog);
+    brixEdit->setObjectName(QString::fromUtf8("brixEdit"));
+    brixEdit->setGeometry(QRect(180, 20, 101, 24));
+    brixEdit->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
+    brixEdit->setAccelerated(true);
+    brixEdit->setDecimals(1);
+    brixEdit->setMaximum(32.0);
+    brixEdit->setSingleStep(0.1);
+    /*
+     * Search the Brix value that is needed to get this gravity.
+     * Set the found value as preset in the spinbox.
+     */
+    double brix = 0.0;
+    for (brix = 0.0; brix < 32.0; brix += 0.1) {
+	if (Utils::brix_to_fg(Utils::sg_to_plato(product->brew_fermenter_sg), brix) >= gravity)
+	    break;
+    }
+    brixEdit->setValue(brix);
+
+    connect(brixEdit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditProduct::brix_changed);
+    connect(buttonBox, SIGNAL(rejected()), dialog, SLOT(reject()));
+    connect(buttonBox, SIGNAL(accepted()), dialog, SLOT(accept()));
+
+    dialog->setModal(true);
+    dialog->exec();
+    if (dialog->result() == QDialog::Rejected) {
+	ret_fg = gravity;
+    }
+
+    disconnect(brixEdit, nullptr, nullptr, nullptr);
+    disconnect(buttonBox, nullptr, nullptr, nullptr);
+    return ret_fg;
+}
+
+
+void EditProduct::primary_start_changed(double val)
+{
+    product->primary_start_temp = val;
+    is_changed();
+    setStage();
+}
+
+
+void EditProduct::primary_peak_changed(double val)
+{
+    product->primary_max_temp = val;
+    is_changed();
+    setStage();
+}
+
+
+void EditProduct::primary_end_changed(double val)
+{
+    product->primary_end_temp = val;
+    is_changed();
+    setStage();
+}
+
+
+void EditProduct::primary_sg_changed(double val)
+{
+    if (product->primary_end_sg == 0 && val == 0.001) {
+	product->primary_end_sg = 0.990;
+	const QSignalBlocker blocker1(ui->prim_endsgEdit);
+	ui->prim_endsgEdit->setValue(0.990);
+    } else {
+    	product->primary_end_sg = val;
+    }
+    ui->prim_attShow->setValue(Utils::calc_svg(product->brew_fermenter_sg, product->primary_end_sg));
+    is_changed();
+    setStage();
+}
+
+
+void EditProduct::primary_sg_button()
+{
+    double rc = get_fg(product->primary_end_sg);
+    ui->prim_endsgEdit->setValue(rc);
+}
+
+
+void EditProduct::primary_date_changed(QDate val)
+{
+    product->primary_end_date = ui->prim_enddateEdit->nullDate();
+    is_changed();
+    setStage();
+}
+
+
+void EditProduct::primary_date_button()
+{
+    ui->prim_enddateEdit->setDate(QDate::currentDate());
+}
+
+
+void EditProduct::primary_date_ack()
+{
+    int rc = QMessageBox::warning(this, tr("Confirm primary"), tr("Confirm that the primary fermentation data is correct"),
+                            QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
+
+    if (rc == QMessageBox::No)
+        return;
+
+    product->stage = PROD_STAGE_SECONDARY;
+    setStage();
+    is_changed();
+}
+
+
+void EditProduct::secondary_temp_changed(double val)
+{
+    product->secondary_temp = val;
+    is_changed();
+    setStage();
+}
+
+
+void EditProduct::secondary_sg_changed(double val)
+{
+    if (product->secondary_end_sg == 0 && val == 0.001) {
+        product->secondary_end_sg = 0.990;
+        const QSignalBlocker blocker1(ui->sec_sgEdit);
+        ui->sec_sgEdit->setValue(0.990);
+    } else {
+        product->secondary_end_sg = val;
+    }
+    ui->sec_attShow->setValue(Utils::calc_svg(product->brew_fermenter_sg, product->secondary_end_sg));
+    is_changed();
+    setStage();
+}
+
+
+void EditProduct::secondary_sg_button()
+{
+    double rc;
+
+    /*
+     * Get a sensible start value.
+     */
+    if (product->secondary_end_sg >= 0.990)
+	rc = get_fg(product->secondary_end_sg);
+    else
+	rc = get_fg(product->primary_end_sg);
+    qDebug() << "secondary_sg_button" << rc << product->secondary_end_sg;
+    ui->sec_sgEdit->setValue(rc);
+}
+
+
+void EditProduct::secondary_date_changed(QDate val)
+{
+    product->secondary_end_date = ui->sec_enddateEdit->nullDate();
+    qDebug() << "secondary_date_changed" << val << product->secondary_end_date;
+    is_changed();
+    setStage();
+}
+
+
+void EditProduct::secondary_date_button()
+{
+    ui->sec_enddateEdit->setDate(QDate::currentDate());
+}
+
+
+void EditProduct::secondary_date_ack()
+{
+    int rc = QMessageBox::warning(this, tr("Confirm secondary"), tr("Confirm that the secondary fermentation data is correct"),
+                            QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
+
+    if (rc == QMessageBox::No)
+        return;
+
+    product->stage = PROD_STAGE_TERTIARY;
+    setStage();
+    is_changed();
+}
+
+
+void EditProduct::tertiary_temp_changed(double val)
+{
+    product->tertiary_temp = val;
+    is_changed();
+    setStage();
+}
+
+
+void EditProduct::tertiary_sg_changed(double val)
+{
+                qDebug() << "tertiary_sg_changed" << val;
+    if (product->fg == 0 && val == 0.001) {
+        product->fg = 0.990;
+        const QSignalBlocker blocker1(ui->tert_sgEdit);
+        ui->tert_sgEdit->setValue(0.990);
+    } else {
+        product->fg = val;
+    }
+    ui->tert_attShow->setValue(Utils::calc_svg(product->brew_fermenter_sg, product->fg));
+    product->package_abv = Utils::abvol(product->brew_fermenter_sg, product->fg);
+    ui->tert_abvShow->setValue(product->package_abv);
+    ui->pack_abvShow->setValue(product->package_abv);
+    is_changed();
+    setStage();
+}
+
+
+void EditProduct::tertiary_sg_button()
+{
+    double rc;
+
+    /*
+     * Get a sensible start value.
+     */
+    if (product->fg >= 0.990)
+        rc = get_fg(product->fg);
+    else
+        rc = get_fg(product->secondary_end_sg);
+    qDebug() << "tertiary_sg_button" << rc << product->fg;
+    ui->tert_sgEdit->setValue(rc);
+}
+
+
+void EditProduct::ferm_log1_button()
+{
+}
+
+
+void EditProduct::ferm_log2_button()
+{
+}
+
+

mercurial