Fixed complains about missing signals. Added add misc row, misc amount changed, misc time changed, misc select changed and misc instock changed. Silence false changed trigger.

Sat, 16 Apr 2022 21:54:43 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Sat, 16 Apr 2022 21:54:43 +0200
changeset 139
f947c6988e91
parent 138
1189d072f346
child 140
6638609328c2

Fixed complains about missing signals. Added add misc row, misc amount changed, misc time changed, misc select changed and misc instock changed. Silence false changed trigger.

src/EditRecipe.cpp file | annotate | diff | comparison | revisions
src/EditRecipe.h file | annotate | diff | comparison | revisions
src/EditRecipeTab2.cpp file | annotate | diff | comparison | revisions
src/EditRecipeTab3.cpp file | annotate | diff | comparison | revisions
src/EditRecipeTab4.cpp file | annotate | diff | comparison | revisions
src/EditRecipeTab7.cpp file | annotate | diff | comparison | revisions
ui/EditRecipe.ui file | annotate | diff | comparison | revisions
--- a/src/EditRecipe.cpp	Sat Apr 16 15:19:04 2022 +0200
+++ b/src/EditRecipe.cpp	Sat Apr 16 21:54:43 2022 +0200
@@ -50,7 +50,6 @@
     ui->ibu_methodEdit->addItem("Daniels");
 
     for (int i = 0; i < my_acids.size(); i++) {
-	qDebug() << i << my_acids.at(i).name_en;
 	ui->mw_acidPick->addItem(my_acids.at(i).name_en);
 	ui->sp_acidtypeEdit->addItem(my_acids.at(i).name_en);
     }
@@ -189,7 +188,7 @@
 	    } else if (fermentables.isArray()) {
 		for (int i = 0; i < fermentables.array().size(); i++) {
 		    QJsonObject obj = fermentables.array().at(i).toObject();
-		    qDebug() << i << obj;
+		    //qDebug() << i << obj;
 		    Fermentables f;
 		    f.f_name = obj["f_name"].toString();
 		    f.f_origin = obj["f_origin"].toString();
@@ -232,7 +231,7 @@
 	    } else if (hops.isArray()) {
 		for (int i = 0; i < hops.array().size(); i++) {
 		    QJsonObject obj = hops.array().at(i).toObject();
-//		    qDebug() << i << obj;
+		    //qDebug() << i << obj;
 		    Hops h;
 		    h.h_name = obj["h_name"].toString();
 		    h.h_origin = obj["h_origin"].toString();
@@ -258,7 +257,6 @@
             qDebug() << "empty hops";
         }
 
-qDebug() << query.value(86).toString();
 	const auto& m_json = query.value(86).toString();
         if (!m_json.trimmed().isEmpty()) {
             const auto& formattedJson = QString("%1").arg(m_json);
@@ -628,39 +626,40 @@
     // All signals from tab "Fermentables"
     ui->fermentablesTable->setEditTriggers(QAbstractItemView::NoEditTriggers);
     connect(ui->est_og2Edit, &QDoubleSpinBox::textChanged, this, &EditRecipe::is_changed);
-    connect(ui->perc_mashShow, &QProgressBar::valueChanged, this, &EditRecipe::on_perc_mash_valueChanged);
-    connect(ui->perc_sugarsShow, &QProgressBar::valueChanged, this, &EditRecipe::on_perc_sugars_valueChanged);
-    connect(ui->perc_caraShow, &QProgressBar::valueChanged, this, &EditRecipe::on_perc_cara_valueChanged);
-    connect(ui->lintnerShow, &QProgressBar::valueChanged, this, &EditRecipe::on_lintner_valueChanged);
-    connect(ui->addFermentable, SIGNAL(clicked()), this, SLOT(on_addFermentRow_clicked()));
+    connect(ui->perc_mashShow, &QProgressBar::valueChanged, this, &EditRecipe::ferment_perc_mash_valueChanged);
+    connect(ui->perc_sugarsShow, &QProgressBar::valueChanged, this, &EditRecipe::ferment_perc_sugars_valueChanged);
+    connect(ui->perc_caraShow, &QProgressBar::valueChanged, this, &EditRecipe::ferment_perc_cara_valueChanged);
+    connect(ui->lintnerShow, &QProgressBar::valueChanged, this, &EditRecipe::ferment_lintner_valueChanged);
+    connect(ui->addFermentable, SIGNAL(clicked()), this, SLOT(addFermentRow_clicked()));
 
     // All signals from tab "Hops"
     ui->hopsTable->setEditTriggers(QAbstractItemView::NoEditTriggers);
-    connect(ui->hop_tasteShow, &QProgressBar::valueChanged, this, &EditRecipe::on_Flavour_valueChanged);
-    connect(ui->hop_aromaShow, &QProgressBar::valueChanged, this, &EditRecipe::on_Aroma_valueChanged);
-    connect(ui->addHop, SIGNAL(clicked()), this, SLOT(on_addHopRow_clicked()));
+    connect(ui->hop_tasteShow, &QProgressBar::valueChanged, this, &EditRecipe::hop_Flavour_valueChanged);
+    connect(ui->hop_aromaShow, &QProgressBar::valueChanged, this, &EditRecipe::hop_Aroma_valueChanged);
+    connect(ui->addHop, SIGNAL(clicked()), this, SLOT(addHopRow_clicked()));
 
     // All signals from tab "Miscs"
     ui->miscsTable->setEditTriggers(QAbstractItemView::NoEditTriggers);
+    connect(ui->addMisc, SIGNAL(clicked()), this, SLOT(addMiscRow_clicked()));
 
     // All signals from tab "Yeasts"
 
     // All signals from tab "Mash"
 
     // All signals from tab "Water"
-    connect(ui->bs_cacl2Edit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditRecipe::on_cacl2_changed);
-    connect(ui->bs_caso4Edit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditRecipe::on_caso4_changed);
-    connect(ui->bs_mgso4Edit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditRecipe::on_mgso4_changed);
-    connect(ui->bs_naclEdit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditRecipe::on_nacl_changed);
-    connect(ui->bs_mgcl2Edit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditRecipe::on_mgcl2_changed);
-    connect(ui->bs_nahco3Edit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditRecipe::on_nahco3_changed);
-    connect(ui->bs_caco3Edit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditRecipe::on_caco3_changed);
-    connect(ui->mw_autoEdit, &QCheckBox::stateChanged, this, &EditRecipe::on_calc_acid_clicked);
-    connect(ui->mw_phEdit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditRecipe::on_mw_ph_changed);
-    connect(ui->mw_acidvolEdit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditRecipe::on_mw_acid_changed);
-    connect(ui->mw_acidPick, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &EditRecipe::on_mw_type_changed);
-    connect(ui->wt_sourceEdit, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &EditRecipe::on_target_changed);
-    connect(ui->w2_volEdit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditRecipe::on_w2_vol_changed);
+    connect(ui->bs_cacl2Edit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditRecipe::wb_cacl2_changed);
+    connect(ui->bs_caso4Edit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditRecipe::wb_caso4_changed);
+    connect(ui->bs_mgso4Edit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditRecipe::wb_mgso4_changed);
+    connect(ui->bs_naclEdit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditRecipe::wb_nacl_changed);
+    connect(ui->bs_mgcl2Edit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditRecipe::wb_mgcl2_changed);
+    connect(ui->bs_nahco3Edit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditRecipe::wb_nahco3_changed);
+    connect(ui->bs_caco3Edit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditRecipe::wb_caco3_changed);
+    connect(ui->mw_autoEdit, &QCheckBox::stateChanged, this, &EditRecipe::mw_calc_acid_clicked);
+    connect(ui->mw_phEdit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditRecipe::mw_ph_changed);
+    connect(ui->mw_acidvolEdit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditRecipe::mw_acid_changed);
+    connect(ui->mw_acidPick, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &EditRecipe::mw_type_changed);
+    connect(ui->wt_sourceEdit, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &EditRecipe::wt_target_changed);
+    connect(ui->w2_volEdit, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &EditRecipe::w2_volume_changed);
 
     ui->saveButton->setEnabled(false);
     ui->deleteButton->setEnabled((id >= 0) ? true:false);
--- a/src/EditRecipe.h	Sat Apr 16 15:19:04 2022 +0200
+++ b/src/EditRecipe.h	Sat Apr 16 21:54:43 2022 +0200
@@ -285,37 +285,37 @@
     void misc_select_changed(int val);
     void misc_instock_changed(bool val);
     void misc_useat_changed(int val);
-    void on_addFermentRow_clicked();
-    void on_deleteFermentRow_clicked();
-    void on_editFermentRow_clicked();
-    void on_addHopRow_clicked();
-    void on_deleteHopRow_clicked();
-    void on_editHopRow_clicked();
-    void on_addMiscRow_clicked();
-    void on_deleteMiscRow_clicked();
-    void on_editMiscRow_clicked();
+    void addFermentRow_clicked();
+    void deleteFermentRow_clicked();
+    void editFermentRow_clicked();
+    void addHopRow_clicked();
+    void deleteHopRow_clicked();
+    void editHopRow_clicked();
+    void addMiscRow_clicked();
+    void deleteMiscRow_clicked();
+    void editMiscRow_clicked();
 
-    void on_w2_vol_changed(double val);
-    void on_cacl2_changed(double val);
-    void on_caso4_changed(double val);
-    void on_mgso4_changed(double val);
-    void on_nacl_changed(double val);
-    void on_mgcl2_changed(double val);
-    void on_nahco3_changed(double val);
-    void on_caco3_changed(double val);
-    void on_calc_acid_clicked();
-    void on_target_changed(int val);
-    void on_mw_ph_changed(double val);
-    void on_mw_acid_changed(double val);
-    void on_mw_type_changed(int val);
+    void w2_volume_changed(double val);
+    void wb_cacl2_changed(double val);
+    void wb_caso4_changed(double val);
+    void wb_mgso4_changed(double val);
+    void wb_nacl_changed(double val);
+    void wb_mgcl2_changed(double val);
+    void wb_nahco3_changed(double val);
+    void wb_caco3_changed(double val);
+    void mw_calc_acid_clicked();
+    void wt_target_changed(int val);
+    void mw_ph_changed(double val);
+    void mw_acid_changed(double val);
+    void mw_type_changed(int val);
 
     /* Modified progress bars */
-    void on_perc_mash_valueChanged(int value);
-    void on_perc_sugars_valueChanged(int value);
-    void on_perc_cara_valueChanged(int value);
-    void on_lintner_valueChanged(int value);
-    void on_Flavour_valueChanged(int value);
-    void on_Aroma_valueChanged(int value);
+    void ferment_perc_mash_valueChanged(int value);
+    void ferment_perc_sugars_valueChanged(int value);
+    void ferment_perc_cara_valueChanged(int value);
+    void ferment_lintner_valueChanged(int value);
+    void hop_Flavour_valueChanged(int value);
+    void hop_Aroma_valueChanged(int value);
 
 private:
     Ui::EditRecipe *ui;
@@ -348,7 +348,7 @@
     QDoubleSpinBox *famountEdit, *pctEdit, *fmaxEdit, *hamountEdit, *ibuEdit, *mamountEdit;
     QSpinBox *htimeEdit, *mtimeEdit;
     QCheckBox *to100Edit, *finstockEdit, *hinstockEdit, *minstockEdit;
-    QLabel *htimeLabel, *mtimeLabel;
+    QLabel *htimeLabel, *mtimeLabel, *mamountLabel;
 
     void to100Fermentables(int row);
     static bool ferment_sort_test(const Fermentables &D1, const Fermentables &D2);
--- a/src/EditRecipeTab2.cpp	Sat Apr 16 15:19:04 2022 +0200
+++ b/src/EditRecipeTab2.cpp	Sat Apr 16 21:54:43 2022 +0200
@@ -123,7 +123,7 @@
         QPushButton* btn_dele = new QPushButton();
         btn_dele->setObjectName(QString("%1").arg(i));  /* Send row with the button */
         btn_dele->setText(tr("Delete"));
-        connect(btn_dele, SIGNAL(clicked()), this, SLOT(on_deleteFermentRow_clicked()));
+        connect(btn_dele, SIGNAL(clicked()), this, SLOT(deleteFermentRow_clicked()));
         pLayout = new QHBoxLayout(pWidget);
         pLayout->addWidget(btn_dele);
         pLayout->setContentsMargins(5, 0, 5, 0);
@@ -134,7 +134,7 @@
 	QPushButton* btn_edit = new QPushButton();
 	btn_edit->setObjectName(QString("%1").arg(i));  /* Send row with the button */
 	btn_edit->setText(tr("Edit"));
-	connect(btn_edit, SIGNAL(clicked()), this, SLOT(on_editFermentRow_clicked()));
+	connect(btn_edit, SIGNAL(clicked()), this, SLOT(editFermentRow_clicked()));
 	pLayout = new QHBoxLayout(pWidget);
         pLayout->addWidget(btn_edit);
 	pLayout->setContentsMargins(5, 0, 5, 0);
@@ -342,7 +342,7 @@
 }
 
 
-void EditRecipe::on_perc_mash_valueChanged(int value)
+void EditRecipe::ferment_perc_mash_valueChanged(int value)
 {
     if (value < 90)
 	ui->perc_mashShow->setStyleSheet(bar_green);
@@ -353,7 +353,7 @@
 }
 
 
-void EditRecipe::on_perc_sugars_valueChanged(int value)
+void EditRecipe::ferment_perc_sugars_valueChanged(int value)
 {
     if (value < 20)
 	ui->perc_sugarsShow->setStyleSheet(bar_green);
@@ -362,7 +362,7 @@
 }
 
 
-void EditRecipe::on_perc_cara_valueChanged(int value)
+void EditRecipe::ferment_perc_cara_valueChanged(int value)
 {
     if (value < 25)
 	ui->perc_caraShow->setStyleSheet(bar_green);
@@ -371,7 +371,7 @@
 }
 
 
-void EditRecipe::on_lintner_valueChanged(int value)
+void EditRecipe::ferment_lintner_valueChanged(int value)
 {
     if (value < 30)
 	ui->lintnerShow->setStyleSheet(bar_red);
@@ -382,7 +382,7 @@
 }
 
 
-void EditRecipe::on_addFermentRow_clicked()
+void EditRecipe::addFermentRow_clicked()
 {
     Fermentables newf;
 
@@ -421,7 +421,7 @@
 }
 
 
-void EditRecipe::on_deleteFermentRow_clicked()
+void EditRecipe::deleteFermentRow_clicked()
 {
     QPushButton *pb = qobject_cast<QPushButton *>(QObject::sender());
     int row = pb->objectName().toInt();
@@ -718,7 +718,7 @@
 }
 
 
-void EditRecipe::on_editFermentRow_clicked()
+void EditRecipe::editFermentRow_clicked()
 {
     QSqlQuery query;
 
--- a/src/EditRecipeTab3.cpp	Sat Apr 16 15:19:04 2022 +0200
+++ b/src/EditRecipeTab3.cpp	Sat Apr 16 21:54:43 2022 +0200
@@ -120,7 +120,7 @@
         QPushButton* btn_dele = new QPushButton();
         btn_dele->setObjectName(QString("%1").arg(i));  /* Send row with the button */
         btn_dele->setText(tr("Delete"));
-        connect(btn_dele, SIGNAL(clicked()), this, SLOT(on_deleteHopRow_clicked()));
+        connect(btn_dele, SIGNAL(clicked()), this, SLOT(deleteHopRow_clicked()));
         pLayout = new QHBoxLayout(pWidget);
         pLayout->addWidget(btn_dele);
         pLayout->setContentsMargins(5, 0, 5, 0);
@@ -131,7 +131,7 @@
         QPushButton* btn_edit = new QPushButton();
         btn_edit->setObjectName(QString("%1").arg(i));  /* Send row with the button */
         btn_edit->setText(tr("Edit"));
-        connect(btn_edit, SIGNAL(clicked()), this, SLOT(on_editHopRow_clicked()));
+        connect(btn_edit, SIGNAL(clicked()), this, SLOT(editHopRow_clicked()));
         pLayout = new QHBoxLayout(pWidget);
         pLayout->addWidget(btn_edit);
         pLayout->setContentsMargins(5, 0, 5, 0);
@@ -142,7 +142,7 @@
 }
 
 
-void EditRecipe::on_Flavour_valueChanged(int value)
+void EditRecipe::hop_Flavour_valueChanged(int value)
 {
     if (value < 20) {
         ui->hop_tasteShow->setStyleSheet(bar_20);
@@ -163,7 +163,7 @@
 }
 
 
-void EditRecipe::on_Aroma_valueChanged(int value)
+void EditRecipe::hop_Aroma_valueChanged(int value)
 {
     if (value < 20) {
         ui->hop_aromaShow->setStyleSheet(bar_20);
@@ -212,7 +212,7 @@
 }
 
 
-void EditRecipe::on_addHopRow_clicked()
+void EditRecipe::addHopRow_clicked()
 {
     Hops newh;
 
@@ -245,7 +245,7 @@
 }
 
 
-void EditRecipe::on_deleteHopRow_clicked()
+void EditRecipe::deleteHopRow_clicked()
 {
     QPushButton *pb = qobject_cast<QPushButton *>(QObject::sender());
     int row = pb->objectName().toInt();
@@ -463,7 +463,7 @@
 }
 
 
-void EditRecipe::on_editHopRow_clicked()
+void EditRecipe::editHopRow_clicked()
 {
     QSqlQuery query;
 
--- a/src/EditRecipeTab4.cpp	Sat Apr 16 15:19:04 2022 +0200
+++ b/src/EditRecipeTab4.cpp	Sat Apr 16 21:54:43 2022 +0200
@@ -103,7 +103,7 @@
             QPushButton* btn_dele = new QPushButton();
             btn_dele->setObjectName(QString("%1").arg(i));  /* Send row with the button */
             btn_dele->setText(tr("Delete"));
-            connect(btn_dele, SIGNAL(clicked()), this, SLOT(on_deleteMiscRow_clicked()));
+            connect(btn_dele, SIGNAL(clicked()), this, SLOT(deleteMiscRow_clicked()));
             pLayout = new QHBoxLayout(pWidget);
             pLayout->addWidget(btn_dele);
             pLayout->setContentsMargins(5, 0, 5, 0);
@@ -114,7 +114,7 @@
             QPushButton* btn_edit = new QPushButton();
             btn_edit->setObjectName(QString("%1").arg(i));  /* Send row with the button */
             btn_edit->setText(tr("Edit"));
-            connect(btn_edit, SIGNAL(clicked()), this, SLOT(on_editMiscRow_clicked()));
+            connect(btn_edit, SIGNAL(clicked()), this, SLOT(editMiscRow_clicked()));
             pLayout = new QHBoxLayout(pWidget);
             pLayout->addWidget(btn_edit);
             pLayout->setContentsMargins(5, 0, 5, 0);
@@ -256,26 +256,29 @@
 }
 
 
-void EditRecipe::on_addMiscRow_clicked()
+void EditRecipe::addMiscRow_clicked()
 {
     Miscs newm;
 
-    qDebug() << "Add misc row";
-
     for (int i = 0; i < recipe->miscs.size(); i++) {
         if (recipe->miscs.at(i).m_amount == 0)
             return;     // Add only one at a time.
     }
 
     newm.m_name = "Select one";
-
-
+    newm.m_amount = 0;
+    newm.m_type = 0;
+    newm.m_use_use = 0;
+    newm.m_time = 0;
+    newm.m_amount_is_weight = true;
+    newm.m_cost = 0;
     recipe->miscs.append(newm);
+    is_changed();
     emit refreshAll();
 }
 
 
-void EditRecipe::on_deleteMiscRow_clicked()
+void EditRecipe::deleteMiscRow_clicked()
 {
     QPushButton *pb = qobject_cast<QPushButton *>(QObject::sender());
     int row = pb->objectName().toInt();
@@ -299,34 +302,158 @@
 
 void EditRecipe::misc_amount_changed(double val)
 {
+    QTableWidgetItem *item;
 
+    qDebug() << "misc_amount_changed()" << recipe->miscs_row << val;
+    this->ignoreChanges = true;
+
+    recipe->miscs[recipe->miscs_row].m_amount = val / 1000.0;
+    if (recipe->miscs.at(recipe->miscs_row).m_amount_is_weight) {
+        item = new QTableWidgetItem(QString("%1 gr").arg(recipe->miscs.at(recipe->miscs_row).m_amount * 1000.0, 3, 'f', 2, '0'));
+    } else {
+        item = new QTableWidgetItem(QString("%1 ml").arg(recipe->miscs.at(recipe->miscs_row).m_amount * 1000.0, 3, 'f', 2, '0'));
+    }
+    item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter);
+    ui->miscsTable->setItem(recipe->miscs_row, 4, item);
+
+    this->ignoreChanges = false;
+    is_changed();
 }
 
 
 void EditRecipe::misc_time_changed(int val)
 {
+    QTableWidgetItem *item;
 
+    qDebug() << "misc_time_changed()" << recipe->miscs_row << val;
+
+    this->ignoreChanges = true;
+    if (recipe->miscs.at(recipe->miscs_row).m_use_use == 2) {       // Boil
+	recipe->miscs[recipe->miscs_row].m_time = val;
+	item = new QTableWidgetItem(QString("%1 min.").arg(val, 1, 'f', 0, '0'));
+    } else if (recipe->miscs.at(recipe->miscs_row).m_use_use == 3 || recipe->miscs.at(recipe->miscs_row).m_use_use == 4) {  // Primary or secondary
+	recipe->miscs[recipe->miscs_row].m_time = val * 1440;
+	item = new QTableWidgetItem(QString("%1 days.").arg(val, 1, 'f', 0, '0'));
+    } else {
+	item = new QTableWidgetItem(QString(""));
+    }
+    item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter);
+    ui->miscsTable->setItem(recipe->miscs_row, 4, item);
+
+    this->ignoreChanges = false;
+    is_changed();
 }
 
 
 void EditRecipe::misc_select_changed(int val)
 {
     QSqlQuery query;
-    bool instock = hinstockEdit->isChecked();
+    bool instock = minstockEdit->isChecked();
     QString w;
     QTableWidgetItem *item;
 
     if (val < 1)
         return;
 
-    qDebug() << "misc_select_changed()" << recipe->fermentables_row << val << instock;
+    qDebug() << "misc_select_changed()" << recipe->miscs_row << val << instock;
+
+    /*
+     * Search the misc ingredient pointed by the index and instock flag.
+     */
+    QString sql = "SELECT name,type,use_use,time,amount_is_weight,cost FROM inventory_miscs WHERE ";
+    if (instock)
+        sql.append("inventory > 0 AND ");
+    sql.append("type != 4 ORDER BY name");
+    qDebug() << sql;
+    query.prepare(sql);
+    query.exec();
+    query.first();
+    for (int i = 0; i < (val - 1); i++) {
+        query.next();
+    }
+    qDebug() << "found" << query.value(0).toString();
+
+    /*
+     * Replace the misc record contents
+     */
+    this->ignoreChanges = true;
+    recipe->miscs[recipe->miscs_row].m_name = query.value(0).toString();
+    recipe->miscs[recipe->miscs_row].m_type = query.value(1).toInt();
+    recipe->miscs[recipe->miscs_row].m_use_use = query.value(2).toInt();
+    recipe->miscs[recipe->miscs_row].m_time = query.value(3).toDouble();
+    recipe->miscs[recipe->miscs_row].m_amount_is_weight = query.value(4).toInt() ? true:false;
+    recipe->miscs[recipe->miscs_row].m_cost = query.value(5).toDouble();
+
+    /*
+     * Update the visible fields
+     */
+    mnameEdit->setText(recipe->miscs.at(recipe->miscs_row).m_name);
+    ui->miscsTable->setItem(recipe->miscs_row, 0, new QTableWidgetItem(recipe->miscs.at(recipe->miscs_row).m_name));
 
+    item = new QTableWidgetItem(m_types[recipe->miscs.at(recipe->miscs_row).m_type]);
+    item->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
+    ui->miscsTable->setItem(recipe->miscs_row, 1, item);
+
+    item = new QTableWidgetItem(m_uses[recipe->miscs.at(recipe->miscs_row).m_use_use]);
+    item->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
+    ui->miscsTable->setItem(recipe->miscs_row, 2, item);
+    useatEdit->setCurrentIndex(recipe->miscs.at(recipe->miscs_row).m_use_use);
+
+    if (recipe->miscs.at(recipe->miscs_row).m_use_use == 3 || recipe->miscs.at(recipe->miscs_row).m_use_use == 4) {     // Fermentation stages
+        mtimeEdit->setValue(recipe->miscs.at(recipe->miscs_row).m_time / 1440);
+        mtimeEdit->setReadOnly(false);
+	mtimeLabel->setText(tr("Time in days:"));
+	item = new QTableWidgetItem(QString("%1 days.").arg(recipe->miscs.at(recipe->miscs_row).m_time / 1440, 1, 'f', 0, '0'));
+    } else if (recipe->miscs.at(recipe->miscs_row).m_use_use == 2) {    // Boil
+        mtimeEdit->setValue(recipe->miscs.at(recipe->miscs_row).m_time);
+        mtimeEdit->setReadOnly(false);
+	mtimeLabel->setText(tr("Time in minutes:"));
+	item = new QTableWidgetItem(QString("%1 min.").arg(recipe->miscs.at(recipe->miscs_row).m_time, 1, 'f', 0, '0'));
+    } else {
+        mtimeEdit->setReadOnly(true);
+	mtimeLabel->setText("");
+	item = new QTableWidgetItem(QString(""));
+    }
+    item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter);
+    ui->miscsTable->setItem(recipe->miscs_row, 3, item);
+
+    if (recipe->miscs.at(recipe->miscs_row).m_amount_is_weight) {
+	mamountLabel->setText(tr("Amount in gr:"));
+	item = new QTableWidgetItem(QString("%1 gr").arg(recipe->miscs.at(recipe->miscs_row).m_amount * 1000.0, 3, 'f', 2, '0'));
+    } else {
+	mamountLabel->setText(tr("Amount in ml:"));
+	item = new QTableWidgetItem(QString("%1 ml").arg(recipe->miscs.at(recipe->miscs_row).m_amount * 1000.0, 3, 'f', 2, '0'));
+    }
+    item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter);
+    ui->miscsTable->setItem(recipe->miscs_row, 4, item);
+
+    this->ignoreChanges = false;
+    is_changed();
+    emit refreshAll();
 }
 
 
 void EditRecipe::misc_instock_changed(bool val)
 {
+    QSqlQuery query;
 
+    qDebug() << "misc_instock_changed()" << recipe->miscs_row << val;
+
+    this->mselectEdit->setCurrentIndex(-1);
+    this->mselectEdit->clear();
+    QString sql = "SELECT name,type,amount_is_weight,inventory FROM inventory_miscs WHERE ";
+    if (val)
+        sql.append("inventory > 0 AND ");
+    sql.append("type != 4 ORDER BY name");
+    query.prepare(sql);
+    query.exec();
+    query.first();
+    this->mselectEdit->addItem("");      // Start with empty value
+    for (int i = 0; i < query.size(); i++) {
+        this->mselectEdit->addItem(query.value(0).toString()+ " (" + m_types[query.value(1).toInt()] + ") " +
+                        QString("%1 %2").arg(query.value(3).toDouble() * 1000.0, 3, 'f', 2, '0').arg(query.value(2).toInt()?"gr":"ml"));
+        query.next();
+    }
 }
 
 
@@ -336,7 +463,7 @@
 }
 
 
-void EditRecipe::on_editMiscRow_clicked()
+void EditRecipe::editMiscRow_clicked()
 {
     QSqlQuery query;
 
@@ -361,14 +488,14 @@
     nameLabel->setGeometry(QRect(10, 10, 141, 20));
     nameLabel->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
 
-    QLabel *amountLabel = new QLabel(dialog);
-    amountLabel->setObjectName(QString::fromUtf8("amountLabel"));
+    mamountLabel = new QLabel(dialog);
+    mamountLabel->setObjectName(QString::fromUtf8("mamountLabel"));
     if (recipe->miscs.at(recipe->miscs_row).m_amount_is_weight)
-    	amountLabel->setText(tr("Amount in gr:"));
+    	mamountLabel->setText(tr("Amount in gr:"));
     else
-	amountLabel->setText(tr("Amount in ml:"));
-    amountLabel->setGeometry(QRect(10, 70, 141, 20));
-    amountLabel->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
+	mamountLabel->setText(tr("Amount in ml:"));
+    mamountLabel->setGeometry(QRect(10, 70, 141, 20));
+    mamountLabel->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
 
     mtimeLabel = new QLabel(dialog);
     mtimeLabel->setObjectName(QString::fromUtf8("mtimeLabel"));
@@ -407,9 +534,9 @@
     mamountEdit->setGeometry(QRect(160, 70, 121, 24));
     mamountEdit->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
     mamountEdit->setAccelerated(true);
-    mamountEdit->setDecimals(1);
+    mamountEdit->setDecimals(2);
     mamountEdit->setMaximum(1000000.0);
-    mamountEdit->setSingleStep(0.5);
+    mamountEdit->setSingleStep(0.1);
     mamountEdit->setValue(recipe->miscs.at(recipe->miscs_row).m_amount * 1000.0);
 
     mtimeEdit = new QSpinBox(dialog);
--- a/src/EditRecipeTab7.cpp	Sat Apr 16 15:19:04 2022 +0200
+++ b/src/EditRecipeTab7.cpp	Sat Apr 16 21:54:43 2022 +0200
@@ -266,7 +266,9 @@
 	    total_alkalinity = bicarbonate * 50 / 61;
 	}
 	ph = TpH;
+	this->ignoreChanges = true;
 	ui->wb_phEdit->setValue(ph);
+	this->ignoreChanges = false;
 	recipe->mash_ph = ph;
     } else { // Manual
 	/*
@@ -304,8 +306,10 @@
 	bicarbonate = wg_bicarbonate - protonDeficit * frac / liters;
 	total_alkalinity = bicarbonate * 50 / 61;
 	ph = pHa;
+	this->ignoreChanges = true;
 	ui->wb_phEdit->setValue(ph);
 	ui->mw_phEdit->setValue(ph);
+	this->ignoreChanges = false;
         recipe->mash_ph = ph;
     }
 
@@ -410,7 +414,7 @@
 }
 
 
-void EditRecipe::on_calc_acid_clicked()
+void EditRecipe::mw_calc_acid_clicked()
 {
     recipe->calc_acid = ! recipe->calc_acid;
     ui->mw_autoEdit->setChecked(recipe->calc_acid);
@@ -423,19 +427,21 @@
 }
 
 
-void EditRecipe::on_mw_ph_changed(double val)
+void EditRecipe::mw_ph_changed(double val)
 {
     if (! recipe->calc_acid)
 	return;
 
-    qDebug() << "on_mw_ph_changed" << val;
-    recipe->mash_ph = val;
-    is_changed();
-    calcWater();
+    if (recipe->mash_ph != val) {
+	qDebug() << "mw_ph_changed" << val << recipe->mash_ph;
+	recipe->mash_ph = val;
+	is_changed();
+	calcWater();
+    }
 }
 
 
-void EditRecipe::on_mw_acid_changed(double val)
+void EditRecipe::mw_acid_changed(double val)
 {
     if (recipe->calc_acid)
 	return;
@@ -446,7 +452,7 @@
 }
 
 
-void EditRecipe::on_mw_type_changed(int val)
+void EditRecipe::mw_type_changed(int val)
 {
     if (val == recipe->wa_acid_name)
 	return;
@@ -470,13 +476,13 @@
 }
 
 
-void EditRecipe::on_w2_vol_changed(double val)
+void EditRecipe::w2_volume_changed(double val)
 {
-    qDebug() << "on_w2_vol_changed" << val;
+    qDebug() << "w2_vol_changed" << val;
 }
 
 
-void EditRecipe::on_target_changed(int val)
+void EditRecipe::wt_target_changed(int val)
 {
     QSqlQuery query;
 
@@ -508,12 +514,12 @@
 }
 
 
-void EditRecipe::on_cacl2_changed(double val)  { set_brewing_salt("CaCl2", val);  }
-void EditRecipe::on_caso4_changed(double val)  { set_brewing_salt("CaSO4", val);  }
-void EditRecipe::on_mgso4_changed(double val)  { set_brewing_salt("MgSO4", val);  }
-void EditRecipe::on_nacl_changed(double val)   { set_brewing_salt("NaCl", val);   }
-void EditRecipe::on_mgcl2_changed(double val)  { set_brewing_salt("MgCl2", val);  }
-void EditRecipe::on_nahco3_changed(double val) { set_brewing_salt("NaHCO3", val); }
-void EditRecipe::on_caco3_changed(double val)  { set_brewing_salt("CaCO3", val);  }
+void EditRecipe::wb_cacl2_changed(double val)  { set_brewing_salt("CaCl2", val);  }
+void EditRecipe::wb_caso4_changed(double val)  { set_brewing_salt("CaSO4", val);  }
+void EditRecipe::wb_mgso4_changed(double val)  { set_brewing_salt("MgSO4", val);  }
+void EditRecipe::wb_nacl_changed(double val)   { set_brewing_salt("NaCl", val);   }
+void EditRecipe::wb_mgcl2_changed(double val)  { set_brewing_salt("MgCl2", val);  }
+void EditRecipe::wb_nahco3_changed(double val) { set_brewing_salt("NaHCO3", val); }
+void EditRecipe::wb_caco3_changed(double val)  { set_brewing_salt("CaCO3", val);  }
 
 
--- a/ui/EditRecipe.ui	Sat Apr 16 15:19:04 2022 +0200
+++ b/ui/EditRecipe.ui	Sat Apr 16 21:54:43 2022 +0200
@@ -95,7 +95,7 @@
        <enum>QTabWidget::Rounded</enum>
       </property>
       <property name="currentIndex">
-       <number>6</number>
+       <number>3</number>
       </property>
       <property name="elideMode">
        <enum>Qt::ElideNone</enum>

mercurial