src/EditRecipe.cpp

changeset 92
fb0bb9a2a7e1
child 95
ef6048186cb3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/EditRecipe.cpp	Wed Mar 30 15:31:57 2022 +0200
@@ -0,0 +1,276 @@
+/**
+ * EditRecipe.cpp is part of bmsapp.
+ *
+ * bmsapp is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * bmsapp is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "EditRecipe.h"
+#include "../ui/ui_EditRecipe.h"
+#include "MainWindow.h"
+
+
+EditRecipe::EditRecipe(int id, QWidget *parent) : QDialog(parent), ui(new Ui::EditRecipe)
+{
+    QSqlQuery query;
+
+    qDebug() << "EditRecipe record:" << id;
+    ui->setupUi(this);
+    this->recno = id;
+
+    WindowTitle();
+
+    ui->typeEdit->addItem(tr("Extract"));
+    ui->typeEdit->addItem(tr("Partial Mash"));
+    ui->typeEdit->addItem(tr("All Grain"));
+
+    if (id >= 0) {
+	query.prepare("SELECT * FROM recipes WHERE record = :recno");
+	query.bindValue(":recno", id);
+	query.exec();
+	query.next();
+
+	ui->lockedEdit->setChecked(query.value(2).toInt() ? true:false);
+	//  3 st_name
+	//  4 st_letter
+	//  5 st_guide
+	//  6 st_category
+	//  7 st_category_number
+	//  8 st_type
+	//  9 st_og_min
+	// 10 st_og_max
+	// 11 st_fg_min
+	// 12 st_fg_max
+	// 13 st_ibu_min
+	// 14 st_ibu_max
+	// 15 st_color_min
+	// 16 st_color_max
+	// 17 st_carb_min
+	// 18 st_carb_max
+	// 19 st_abv_min
+	// 20 st_abv_max
+	ui->nameEdit->setText(query.value(21).toString());
+	ui->notesEdit->setPlainText(query.value(22).toString());
+	ui->typeEdit->setCurrentIndex(query.value(23).toInt());
+	ui->batch_sizeEdit->setValue(query.value(24).toDouble());
+	ui->boil_sizeEdit->setValue(query.value(25).toDouble());
+	ui->boil_timeEdit->setValue(query.value(26).toInt());
+	ui->efficiencyEdit->setValue(query.value(27).toDouble());
+	// 28 est_og
+	// 29 est_fg
+	// 30 est_abv
+	// 31 est_color
+	// 32 color_method
+	// 33 est_ibu
+	// 34 ibu_method
+	// 35 est_carb
+	// 36 sparge_temp
+	// 37 sparge_ph
+	// 38 sparge_volume
+	// 39 sparge_source
+	// 40 sparge_acid_type
+	// 41 sparge_acid_perc
+	// 42 sparge_acid_amount
+	// 43 mash_ph
+	// 44 mash_name
+	// 45 calc_acid
+	// 46 w1_name
+	// 47 w1_amount
+	// 48 w1_calcium
+	// 49 w1_sulfate
+	// 50 w1_chloride
+	// 51 w1_sodium
+	// 52 w1_magnesium
+	// 53 w1_total_alkalinity
+	// 54 w1_ph
+	// 55 w1_cost
+	// 56 w2_name
+	// 57 w2_amount
+	// 58 w2_calcium
+	// 59 w2_sulfate
+	// 60 w2_chloride
+	// 61 w2_sodium
+	// 62 w2_magnesium
+	// 63 w2_total_alkalinity
+	// 64 w2_ph
+	// 65 w2_cost
+	// 66 wg_amount
+	// 67 wg_calcium
+	// 68 wg_sulfate
+	// 69 wg_chloride
+	// 70 wg_sodium
+	// 71 wg_magnesium
+	// 72 wg_total_alkalinity
+	// 73 wg_ph
+	// 74 wb_calcium
+	// 75 wb_sulfate
+	// 76 wb_chloride
+	// 77 wb_sodium
+	// 78 wb_magnesium
+	// 79 wb_total_alkalinity
+	// 80 wb_ph
+	// 81 wa_acid_name
+	// 82 wa_acid_perc
+	// 83 wa_base_name
+	// 84 json_fermentables
+	// 85 json_hops
+	// 86 json_miscs
+	// 87 json_yeasts
+	// 88 json_mashs
+    } else {
+	/* Set some defaults */
+    }
+
+    connect(ui->lockedEdit, &QCheckBox::stateChanged, this, &EditRecipe::is_changed);
+
+    connect(ui->nameEdit, &QLineEdit::textChanged, this, &EditRecipe::is_changed);
+    connect(ui->notesEdit, SIGNAL(textChanged()), this, SLOT(is_changed()));
+    connect(ui->typeEdit, &QComboBox::currentTextChanged, this, &EditRecipe::is_changed);
+    connect(ui->batch_sizeEdit, &QDoubleSpinBox::textChanged, this, &EditRecipe::is_changed);
+    connect(ui->boil_sizeEdit, &QDoubleSpinBox::textChanged, this, &EditRecipe::is_changed);
+    connect(ui->boil_timeEdit, &QSpinBox::textChanged, this, &EditRecipe::is_changed);
+    connect(ui->efficiencyEdit, &QDoubleSpinBox::textChanged, this, &EditRecipe::is_changed);
+
+    ui->saveButton->setEnabled(false);
+    ui->deleteButton->setEnabled((id >= 0) ? true:false);
+}
+
+
+EditRecipe::~EditRecipe()
+{
+    qDebug() << "EditRecipe done";
+    delete ui;
+    emit entry_changed();
+}
+
+
+/*
+ * Window header, mark any change with '**'
+ */
+void EditRecipe::WindowTitle()
+{
+    QString txt;
+
+    if (this->recno < 0) {
+	txt = QString(tr("BMSapp - Add new recipe"));
+    } else {
+	txt = QString(tr("BMSapp - Edit recipe %1").arg(this->recno));
+    }
+
+    if (this->textIsChanged) {
+	txt.append((QString(" **")));
+    }
+    setWindowTitle(txt);
+}
+
+
+void EditRecipe::on_saveButton_clicked()
+{
+    QSqlQuery query;
+
+    /* If there are errors in the form, show a message and do "return;" */
+//    if (ui->nameEdit->text().length() < 2) {
+//	QMessageBox::warning(this, tr("Edit Recipe"), tr("Name empty or too short."));
+//	return;
+//    }
+
+    if (this->textIsChanged) {
+    	if (this->recno == -1) {
+    	    query.prepare("INSERT INTO recipes SET name=:name, "
+		"uuid = :uuid");
+    	} else {
+	    query.prepare("UPDATE recipes SET name=:name "
+                " WHERE record = :recno");
+    	}
+	//query.bindValue(":name", ui->nameEdit->text());
+	//query.bindValue(":notes", ui->notesEdit->toPlainText());
+	if (this->recno == -1) {
+	    query.bindValue(":uuid", QUuid::createUuid().toString().mid(1, 36));
+	} else {
+	    query.bindValue(":recno", this->recno);
+	}
+	query.exec();
+	if (query.lastError().isValid()) {
+	    qDebug() << "EditRecipe" << query.lastError();
+	    QMessageBox::warning(this, tr("Database error"),
+                        tr("MySQL error: %1\n%2\n%3")
+                        .arg(query.lastError().nativeErrorCode())
+                        .arg(query.lastError().driverText())
+                        .arg(query.lastError().databaseText()));
+	} else {
+	    qDebug() << "EditRecipe Saved";
+	}
+    }
+
+    ui->saveButton->setEnabled(false);
+    this->textIsChanged = false;
+    WindowTitle();
+}
+
+
+void EditRecipe::on_deleteButton_clicked()
+{
+    QSqlQuery query;
+
+    query.prepare("DELETE FROM recipes WHERE record = :recno");
+    query.bindValue(":recno", this->recno);
+    query.exec();
+    if (query.lastError().isValid()) {
+	qDebug() << "EditRecipe" << query.lastError();
+	QMessageBox::warning(this, tr("Database error"),
+                        tr("MySQL error: %1\n%2\n%3")
+                        .arg(query.lastError().nativeErrorCode())
+                        .arg(query.lastError().driverText())
+                        .arg(query.lastError().databaseText()));
+    } else {
+	qDebug() << "EditRecipe Deleted" << this->recno;
+    }
+
+    this->close();
+    this->setResult(1);
+}
+
+
+void EditRecipe::is_changed()
+{
+    ui->saveButton->setEnabled(true);
+    ui->deleteButton->setEnabled((this->recno >= 0) ? true:false);
+    this->textIsChanged = true;
+    WindowTitle();
+}
+
+
+void EditRecipe::time_changed()
+{
+    is_changed();
+}
+
+
+void EditRecipe::on_quitButton_clicked()
+{
+    if (this->textIsChanged) {
+	int rc = QMessageBox::warning(this, tr("Recipe changed"), tr("The ingredient has been modified. Save changes?"),
+                                QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Save);
+        switch (rc) {
+            case QMessageBox::Save:
+                        on_saveButton_clicked();
+                        break;  /* Saved and then Quit */
+            case QMessageBox::Discard:
+                        break;  /* Quit without Save */
+            case QMessageBox::Cancel:
+                        return; /* Return to the editor page */
+        }
+    }
+
+    this->close();
+    this->setResult(1);
+}

mercurial