src/EditRecipeTab5.cpp

changeset 141
eea8a9e7e1f6
parent 128
0f4eee875ea6
child 142
1caa15a0eefc
--- a/src/EditRecipeTab5.cpp	Sun Apr 17 10:50:48 2022 +0200
+++ b/src/EditRecipeTab5.cpp	Mon Apr 18 10:55:33 2022 +0200
@@ -18,8 +18,174 @@
  */
 
 
-void EditRecipe::refreshYeasts()
+bool EditRecipe::yeast_sort_test(const Yeasts &D1, const Yeasts &D2)
 {
+    if (D1.y_use > D2.y_use)
+	return false;
+    if (D1.y_use < D2.y_use)
+	return true;
+    return (D1.y_amount > D2.y_amount);
 }
 
 
+void EditRecipe::refreshYeasts()
+{
+    QString w;
+    QWidget* pWidget;
+    QHBoxLayout* pLayout;
+    QTableWidgetItem *item;
+
+    qDebug() << "refreshYeasts" << recipe->yeasts.size();
+    std::sort(recipe->yeasts.begin(), recipe->yeasts.end(), yeast_sort_test);
+
+    /*
+     * During filling the table turn off the cellChanged signal because every cell that is filled
+     * triggers the cellChanged signal. The QTableWidget has no better signal to use.
+     */
+    this->ignoreChanges = true;
+
+    const QStringList labels({tr("Yeast"), tr("Laboratory"), tr("Code"), tr("Type"), tr("Use for"), tr("Min. °C"), tr("Max. °C"),
+		              tr("Tol. %"), tr("Attn. %"), tr("Amount"), tr("Delete"), tr("Edit") });
+
+    ui->yeastsTable->setColumnCount(12);
+    ui->yeastsTable->setColumnWidth(0, 200);	/* Yeast	*/
+    ui->yeastsTable->setColumnWidth(1, 125);	/* Laboratory	*/
+    ui->yeastsTable->setColumnWidth(2,  80);	/* Code		*/
+    ui->yeastsTable->setColumnWidth(3,  80);	/* Type		*/
+    ui->yeastsTable->setColumnWidth(4, 100);	/* Usage	*/
+    ui->yeastsTable->setColumnWidth(5,  60);	/* Min. 	*/
+    ui->yeastsTable->setColumnWidth(6,  60);	/* Max.		*/
+    ui->yeastsTable->setColumnWidth(7,  60);	/* Tolerance	*/
+    ui->yeastsTable->setColumnWidth(8,  60);	/* Attenuation	*/
+    ui->yeastsTable->setColumnWidth(9,  90);	/* Amount	*/
+    ui->yeastsTable->setColumnWidth(10, 80);	/* Delete	*/
+    ui->yeastsTable->setColumnWidth(11, 80);	/* Edit		*/
+    ui->yeastsTable->setHorizontalHeaderLabels(labels);
+    ui->yeastsTable->verticalHeader()->hide();
+    ui->yeastsTable->setRowCount(recipe->yeasts.size());
+
+    for (int i = 0; i < recipe->yeasts.size(); i++) {
+
+	ui->yeastsTable->setItem(i, 0, new QTableWidgetItem(recipe->yeasts.at(i).y_name));
+	ui->yeastsTable->setItem(i, 1, new QTableWidgetItem(recipe->yeasts.at(i).y_laboratory));
+	ui->yeastsTable->setItem(i, 2, new QTableWidgetItem(recipe->yeasts.at(i).y_product_id));
+
+	item = new QTableWidgetItem(y_types[recipe->yeasts.at(i).y_type]);
+        item->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
+        ui->yeastsTable->setItem(i, 3, item);
+
+        item = new QTableWidgetItem(y_use[recipe->yeasts.at(i).y_use]);
+        item->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
+        ui->yeastsTable->setItem(i, 4, item);
+
+	item = new QTableWidgetItem(QString("%1").arg(recipe->yeasts.at(i).y_min_temperature, 2, 'f', 1, '0'));
+	item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter);
+        ui->yeastsTable->setItem(i, 5, item);
+
+	item = new QTableWidgetItem(QString("%1").arg(recipe->yeasts.at(i).y_max_temperature, 2, 'f', 1, '0'));
+        item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter);
+        ui->yeastsTable->setItem(i, 6, item);
+
+	item = new QTableWidgetItem(QString("%1").arg(recipe->yeasts.at(i).y_tolerance, 2, 'f', 1, '0'));
+        item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter);
+        ui->yeastsTable->setItem(i, 7, item);
+
+	item = new QTableWidgetItem(QString("%1").arg(recipe->yeasts.at(i).y_attenuation, 2, 'f', 1, '0'));
+        item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter);
+        ui->yeastsTable->setItem(i, 8, item);
+
+	if (recipe->yeasts.at(i).y_type == 0)
+            item = new QTableWidgetItem(QString("%1 pack").arg(recipe->yeasts.at(i).y_amount * 1000.0, 3, 'f', 2, '0'));
+	else if (recipe->yeasts.at(i).y_type == 1)
+	    item = new QTableWidgetItem(QString("%1 gr").arg(recipe->yeasts.at(i).y_amount * 1000.0, 3, 'f', 2, '0'));
+	else
+	    item = new QTableWidgetItem(QString("%1 ml").arg(recipe->yeasts.at(i).y_amount * 1000.0, 3, 'f', 2, '0'));
+        item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter);
+        ui->yeastsTable->setItem(i, 9, item);
+
+	pWidget = new QWidget();
+        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(deleteYeastRow_clicked()));
+        pLayout = new QHBoxLayout(pWidget);
+        pLayout->addWidget(btn_dele);
+        pLayout->setContentsMargins(5, 0, 5, 0);
+        pWidget->setLayout(pLayout);
+        ui->yeastsTable->setCellWidget(i, 10, pWidget);
+
+        pWidget = new QWidget();
+        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(editYeastRow_clicked()));
+        pLayout = new QHBoxLayout(pWidget);
+        pLayout->addWidget(btn_edit);
+        pLayout->setContentsMargins(5, 0, 5, 0);
+        pWidget->setLayout(pLayout);
+        ui->yeastsTable->setCellWidget(i, 11, pWidget);
+    }
+
+    this->ignoreChanges = false;
+}
+
+
+void EditRecipe::addYeastRow_clicked()
+{
+
+}
+
+
+void EditRecipe::deleteYeastRow_clicked()
+{
+    QPushButton *pb = qobject_cast<QPushButton *>(QObject::sender());
+    int row = pb->objectName().toInt();
+    qDebug() << "Delete yeast row" << row << recipe->yeasts.size();
+
+    if (recipe->yeasts.size() < 1)
+        return;
+
+    int rc = QMessageBox::warning(this, tr("Delete yeast"), tr("Delete %1").arg(recipe->yeasts.at(row).y_name),
+                    QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
+    if (rc == QMessageBox::No)
+        return;
+
+    this->ignoreChanges = true;
+    recipe->yeasts.removeAt(row);
+    this->ignoreChanges = false;
+    is_changed();
+    emit refreshAll();
+}
+
+
+void EditRecipe::editYeastRow_clicked()
+{
+    QSqlQuery query;
+
+    QPushButton *pb = qobject_cast<QPushButton *>(QObject::sender());
+    recipe->yeasts_row = pb->objectName().toInt();
+    qDebug() << "Edit yeast row" << recipe->yeasts_row;
+    Yeasts backup = recipe->yeasts.at(recipe->yeasts_row);
+
+    QDialog* dialog = new QDialog(this);
+    dialog->resize(738, 230);
+    QDialogButtonBox *buttonBox = new QDialogButtonBox(dialog);
+    buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+    buttonBox->setGeometry(QRect(30, 180, 671, 32));
+    buttonBox->setLayoutDirection(Qt::LeftToRight);
+    buttonBox->setOrientation(Qt::Horizontal);
+    buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
+    buttonBox->setCenterButtons(true);
+
+
+
+    connect(buttonBox, SIGNAL(rejected()), dialog, SLOT(reject()));
+    connect(buttonBox, SIGNAL(accepted()), dialog, SLOT(accept()));
+
+
+
+    disconnect(buttonBox, nullptr, nullptr, nullptr);
+
+    emit refreshAll();
+}
+

mercurial