Fri, 01 Apr 2022 17:25:42 +0200
Added more edit fields to the first recipe editor tab. Cleanup of RangedSlider is ready.
/** * 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" #include "Utils.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")); ui->color_methodEdit->addItem("Morey"); ui->color_methodEdit->addItem("Mosher"); ui->color_methodEdit->addItem("Daniels"); ui->color_methodEdit->addItem("Halberstadt"); ui->color_methodEdit->addItem("Naudts"); ui->ibu_methodEdit->addItem("Tinseth"); ui->ibu_methodEdit->addItem("Rager"); ui->ibu_methodEdit->addItem("Daniels"); 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); ui->st_nameEdit->setText(query.value(3).toString()); ui->st_groupEdit->setText(query.value(4).toString()); ui->st_guideEdit->setText(query.value(5).toString()); ui->st_catEdit->setText(query.value(6).toString()); ui->st_catnrEdit->setText(query.value(7).toString()); ui->st_typeEdit->setText(query.value(8).toString()); 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()); ui->est_ogEdit->setValue(query.value(28).toDouble()); ui->est_ogShow->setRange(query.value(9).toDouble(), query.value(10).toDouble()); ui->est_ogShow->setPrecision(3); ui->est_ogShow->setMarkerTextIsValue(true); ui->est_ogShow->setValue(query.value(28).toDouble()); ui->est_fgEdit->setValue(query.value(29).toDouble()); ui->est_fgShow->setRange(query.value(11).toDouble(), query.value(12).toDouble()); ui->est_fgShow->setPrecision(3); ui->est_fgShow->setMarkerTextIsValue(true); ui->est_fgShow->setValue(query.value(29).toDouble()); ui->est_abvEdit->setValue(query.value(30).toDouble()); ui->est_abvShow->setRange(query.value(19).toDouble(), query.value(20).toDouble()); ui->est_abvShow->setPrecision(1); ui->est_abvShow->setMarkerTextIsValue(true); ui->est_abvShow->setValue(query.value(30).toDouble()); QColor color = Utils::ebc_to_color(query.value(31).toInt()); ui->est_colorEdit->setValue(query.value(31).toDouble()); ui->est_colorEdit->setStyleSheet(Utils::ebc_to_style(query.value(31).toInt())); ui->est_colorShow->setPrecision(0); ui->est_colorShow->setMarkerTextIsValue(true); ui->est_colorShow->setRange(query.value(15).toDouble(), query.value(16).toDouble()); ui->est_colorShow->setValue(query.value(31).toDouble()); ui->color_methodEdit->setCurrentIndex(query.value(32).toInt()); ui->est_ibuEdit->setValue(query.value(33).toDouble()); ui->est_ibuShow->setPrecision(0); ui->est_ibuShow->setMarkerTextIsValue(true); ui->est_ibuShow->setRange(query.value(13).toDouble(), query.value(14).toDouble()); ui->est_ibuShow->setValue(query.value(33).toDouble()); ui->ibu_methodEdit->setCurrentIndex(query.value(34).toInt()); ui->est_carbEdit->setValue(query.value(35).toDouble()); ui->est_carbShow->setPrecision(1); ui->est_carbShow->setMarkerTextIsValue(true); ui->est_carbShow->setRange(query.value(17).toDouble(), query.value(18).toDouble()); ui->est_carbShow->setValue(query.value(35).toDouble()); // 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_timeEdit, &QSpinBox::textChanged, this, &EditRecipe::is_changed); connect(ui->efficiencyEdit, &QDoubleSpinBox::textChanged, this, &EditRecipe::is_changed); connect(ui->color_methodEdit, &QComboBox::currentTextChanged, this, &EditRecipe::is_changed); connect(ui->ibu_methodEdit, &QComboBox::currentTextChanged, this, &EditRecipe::is_changed); ui->saveButton->setEnabled(false); ui->deleteButton->setEnabled((id >= 0) ? true:false); } EditRecipe::~EditRecipe() { qDebug() << "EditRecipe done start"; delete ui; emit entry_changed(); qDebug() << "EditRecipe done final"; } /* * 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 recipe 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); }