#include "openrecipedialog.h" #include "ui_openrecipedialog.h" OpenRecipeDialog::OpenRecipeDialog(QWidget *parent) : QDialog(parent), ui(new Ui::OpenRecipeDialog) { ui->setupUi(this); ui->recipeTableView->setModel(&this->recipeTableModel); ui->ingredientsListView->setModel(&this->ingredientsModel); ui->tagsListView->setModel(&this->tagsModel); QObject::connect(ui->ingredientsListView->selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)), this, SLOT(onIngredientsListViewSelectionChanged(QItemSelection))); QObject::connect(ui->tagsListView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(onTagsListViewSelectionChanged(QItemSelection))); } OpenRecipeDialog::OpenRecipeDialog(RecipeDatabase *recipeDB, QWidget *parent) : OpenRecipeDialog(parent){ this->recipeDB = recipeDB; this->populateIngredientsList(); this->populateTagsList(); this->populateFoodGroupsList(); this->populateRecipesTable(this->recipeDB->retrieveAllRecipes()); } OpenRecipeDialog::~OpenRecipeDialog() { delete ui; } Recipe OpenRecipeDialog::getSelectedRecipe(){ return this->selectedRecipe; } void OpenRecipeDialog::populateRecipesTable(vector recipes){ this->recipeTableModel.clear(); this->recipeTableModel.setRecipes(recipes); ui->recipeTableView->resizeColumnsToContents(); ui->recipeTableView->show(); } void OpenRecipeDialog::populateIngredientsList(){ this->ingredientsModel.setIngredients(this->recipeDB->retrieveAllIngredients()); } void OpenRecipeDialog::populateTagsList(){ this->tagsModel.setTags(this->recipeDB->retrieveAllTags()); } void OpenRecipeDialog::populateFoodGroupsList(){ for (string s : this->recipeDB->retrieveAllFoodGroups()){ ui->foodGroupsListWidget->addItem(QString::fromStdString(s)); } //ui->foodGroupsListWidget->show(); } void OpenRecipeDialog::on_deleteRecipeButton_clicked(){ QItemSelectionModel *selectModel = ui->recipeTableView->selectionModel(); if (!selectModel->hasSelection()){ return; } vector rows; QModelIndexList indexes = selectModel->selectedRows(); for (int i = 0; i < indexes.count(); i++){ rows.push_back(indexes.at(i).row()); } string recipePlural = (rows.size() == 1) ? "recipe" : "recipes"; QString title = QString::fromStdString("Delete " + recipePlural); QString content = QString::fromStdString("Are you sure you wish to delete the selected "+recipePlural+"?\nAll deleted recipes are permanently deleted."); QMessageBox::StandardButton reply = QMessageBox::question(this, title, content); if (reply == QMessageBox::Yes){ for (int row : rows){ Recipe r = this->recipeTableModel.getRecipeAt(row); bool success = this->recipeDB->deleteRecipe(r.getName()); if (!success){ QMessageBox::critical(this, QString::fromStdString("Unable to Delete"), QString::fromStdString("Could not delete recipe "+r.getName())); } else { this->populateRecipesTable(this->recipeDB->retrieveAllRecipes()); } } } } void OpenRecipeDialog::on_recipeTableView_doubleClicked(const QModelIndex &index){ this->selectedRecipe = this->recipeTableModel.getRecipeAt(index.row()); this->close(); } void OpenRecipeDialog::onIngredientsListViewSelectionChanged(const QItemSelection &selection){ Q_UNUSED(selection); vector ingredients; QModelIndexList indexes = ui->ingredientsListView->selectionModel()->selectedRows(); for (QModelIndex index : indexes){ Ingredient i = this->ingredientsModel.getIngredients().at(index.row()); ingredients.push_back(i); } this->populateRecipesTable(this->recipeDB->retrieveRecipesWithIngredients(ingredients)); } void OpenRecipeDialog::onTagsListViewSelectionChanged(const QItemSelection &selection){ Q_UNUSED(selection); vector tags; QModelIndexList indexes = ui->tagsListView->selectionModel()->selectedRows(); for (QModelIndex index : indexes){ RecipeTag t = this->tagsModel.getTags().at(index.row()); tags.push_back(t); } this->populateRecipesTable(this->recipeDB->retrieveRecipesWithTags(tags)); } void OpenRecipeDialog::on_nameEdit_textChanged(const QString &arg1){ Q_UNUSED(arg1); this->populateRecipesTable(this->recipeDB->retrieveRecipesWithSubstring(ui->nameEdit->text().toStdString())); } void OpenRecipeDialog::on_foodGroupsListWidget_itemSelectionChanged(){ vector groups; for (QModelIndex index : ui->foodGroupsListWidget->selectionModel()->selectedRows()){ QListWidgetItem *item = ui->foodGroupsListWidget->item(index.row()); groups.push_back(item->text().toStdString()); } this->populateRecipesTable(this->recipeDB->retrieveRecipesWithFoodGroups(groups)); } void OpenRecipeDialog::on_clearSearchButton_clicked(){ ui->nameEdit->clear(); ui->foodGroupsListWidget->selectionModel()->clearSelection(); ui->tagsListView->selectionModel()->clearSelection(); ui->ingredientsListView->selectionModel()->clearSelection(); this->populateRecipesTable(this->recipeDB->retrieveAllRecipes()); } void OpenRecipeDialog::on_exitButton_clicked(){ this->close(); }