src/EditRecipe.cpp

Fri, 01 Apr 2022 17:25:42 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Fri, 01 Apr 2022 17:25:42 +0200
changeset 100
d11a3e713e3b
parent 99
053c0578cf58
child 101
1d14d3bf2465
permissions
-rw-r--r--

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);
}

mercurial