From 358bc8de5dc2454b87daed1e4dd463a84383955b Mon Sep 17 00:00:00 2001 From: andrewlalis Date: Sun, 4 Mar 2018 09:05:20 +0100 Subject: [PATCH] Added new recipe dialog, improved ingredient list display --- RecipeDB.pro | 9 ++- gui/mainwindow.ui | 76 +++++++++++++++---- gui/newrecipedialog.cpp | 14 ++++ gui/newrecipedialog.h | 22 ++++++ gui/newrecipedialog.ui | 19 +++++ main.cpp | 18 ++--- model/database/recipedatabase.cpp | 2 - .../ingredients/ingredientlistmodel.cpp | 14 +++- model/recipe/ingredients/unitofmeasure.cpp | 12 ++- model/recipe/ingredients/unitofmeasure.h | 11 ++- 10 files changed, 161 insertions(+), 36 deletions(-) create mode 100644 gui/newrecipedialog.cpp create mode 100644 gui/newrecipedialog.h create mode 100644 gui/newrecipedialog.ui diff --git a/RecipeDB.pro b/RecipeDB.pro index 2c957a5..0153b2b 100644 --- a/RecipeDB.pro +++ b/RecipeDB.pro @@ -25,7 +25,8 @@ SOURCES += model/recipe/instruction.cpp \ SQLite/sqlite3.c \ model/database/resulttable.cpp \ model/database/recipedatabase.cpp \ - utils/fileutils.cpp + utils/fileutils.cpp \ + gui/newrecipedialog.cpp HEADERS += model/recipe/instruction.h \ model/recipe/recipe.h \ @@ -40,11 +41,13 @@ HEADERS += model/recipe/instruction.h \ SQLite/sqlite3ext.h \ model/database/resulttable.h \ model/database/recipedatabase.h \ - utils/fileutils.h + utils/fileutils.h \ + gui/newrecipedialog.h LIBS += -ldl \ -FORMS += gui/mainwindow.ui +FORMS += gui/mainwindow.ui \ + gui/newrecipedialog.ui DISTFILES += \ .gitignore diff --git a/gui/mainwindow.ui b/gui/mainwindow.ui index 1db1cc9..267cc6b 100644 --- a/gui/mainwindow.ui +++ b/gui/mainwindow.ui @@ -109,12 +109,25 @@ - Source Sans Pro Light + Noto Sans CJK KR Light 20 + PreferAntialias + + false + - background-color: rgb(83, 75, 255); + QPushButton#newButton { + background-color: rgb(235, 235, 255); + border: 0px; +} +QPushButton#newButton:hover{ + background-color: rgb(245, 245, 255); +} +QPushButton#newButton:pressed{ + background-color: rgb(255, 255, 255); +} New @@ -134,12 +147,22 @@ - Source Sans Pro Light + Noto Sans CJK KR Light 20 + PreferAntialias - background-color: rgb(112, 105, 255); + QPushButton#openButton { + background-color: rgb(222, 226, 255); + border: 0px; +} +QPushButton#openButton:hover{ + background-color: rgb(232, 236, 255); +} +QPushButton#openButton:pressed{ + background-color: rgb(255, 255, 255); +} Open @@ -156,16 +179,32 @@ - Source Sans Pro Light + Noto Sans CJK KR Light 20 + PreferAntialias + + false + - background-color: rgb(137, 131, 255); + QPushButton#browseButton { + background-color: rgb(215, 215, 255); + border: 0px; +} +QPushButton#browseButton:hover{ + background-color: rgb(225, 225, 255); +} +QPushButton#browseButton:pressed{ + background-color: rgb(255, 255, 255); +} Browse + + false + @@ -214,8 +253,13 @@ - Source Sans Pro Light + Noto Sans CJK KR Light 24 + 50 + false + false + PreferAntialias + true @@ -299,7 +343,7 @@ - Source Sans Pro Light + Noto Sans CJK KR Thin 18 @@ -324,8 +368,9 @@ - Source Sans Pro Light - 16 + Noto Sans CJK KR Light + 12 + PreferAntialias @@ -343,6 +388,9 @@ Qt::ScrollBarAlwaysOff + + QAbstractItemView::NoSelection + true @@ -397,7 +445,7 @@ - Source Sans Pro Light + Noto Sans CJK KR Thin 18 @@ -445,11 +493,11 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#00ff40;">This is some </span><span style=" font-size:16pt; color:#a33c3e;">colored text and </span><a href="https://www.google.com"><span style=" font-size:8pt; text-decoration: underline; color:#0000ff;">link</span></a></p></body></html> +</style></head><body style=" font-family:'Liberation Serif Bold'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; color:#00ff40;">This is some </span><span style=" font-family:'MS Shell Dlg 2'; font-size:16pt; color:#a33c3e;">colored text and </span><a href="https://www.google.com"><span style=" font-family:'MS Shell Dlg 2'; font-size:8pt; text-decoration: underline; color:#0000ff;">link</span></a></p></body></html> - Qt::LinksAccessibleByMouse + Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse diff --git a/gui/newrecipedialog.cpp b/gui/newrecipedialog.cpp new file mode 100644 index 0000000..818f180 --- /dev/null +++ b/gui/newrecipedialog.cpp @@ -0,0 +1,14 @@ +#include "newrecipedialog.h" +#include "ui_newrecipedialog.h" + +NewRecipeDialog::NewRecipeDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::NewRecipeDialog) +{ + ui->setupUi(this); +} + +NewRecipeDialog::~NewRecipeDialog() +{ + delete ui; +} diff --git a/gui/newrecipedialog.h b/gui/newrecipedialog.h new file mode 100644 index 0000000..30c34a2 --- /dev/null +++ b/gui/newrecipedialog.h @@ -0,0 +1,22 @@ +#ifndef NEWRECIPEDIALOG_H +#define NEWRECIPEDIALOG_H + +#include + +namespace Ui { +class NewRecipeDialog; +} + +class NewRecipeDialog : public QDialog +{ + Q_OBJECT + + public: + explicit NewRecipeDialog(QWidget *parent = 0); + ~NewRecipeDialog(); + + private: + Ui::NewRecipeDialog *ui; +}; + +#endif // NEWRECIPEDIALOG_H diff --git a/gui/newrecipedialog.ui b/gui/newrecipedialog.ui new file mode 100644 index 0000000..5248942 --- /dev/null +++ b/gui/newrecipedialog.ui @@ -0,0 +1,19 @@ + + + NewRecipeDialog + + + + 0 + 0 + 640 + 480 + + + + Dialog + + + + + diff --git a/main.cpp b/main.cpp index d67a414..1cadc3c 100644 --- a/main.cpp +++ b/main.cpp @@ -13,22 +13,16 @@ int main(int argc, char *argv[]) //TESTING CODE RecipeDatabase recipeDB("recipes"); -// recipeDB.storeIngredient(Ingredient("Apple", "Fruit")); -// recipeDB.storeIngredient(Ingredient("Corn", "Vegetable")); -// recipeDB.storeIngredient(Ingredient("Lettuce", "Vegetable")); -// recipeDB.storeIngredient(Ingredient("Carrot", "Vegetable")); - -// recipeDB.executeSQL("SELECT * FROM ingredient;").printData(); //TESTING CODE - vector ri; - ri.push_back(RecipeIngredient("flour", "grains", 3.0f, UnitOfMeasure("cup", "cups", "c"))); - ri.push_back(RecipeIngredient("Baking Powder", "Additives", 1.0f, UnitOfMeasure("Teaspoon", "Teaspoons", "Tsp"))); +// vector ri; +// ri.push_back(RecipeIngredient("flour", "grains", 3.0f, UnitOfMeasure("cup", "cups", "c"))); +// ri.push_back(RecipeIngredient("Baking Powder", "Additives", 1.0f, UnitOfMeasure("Teaspoon", "Teaspoons", "Tsp"))); - Recipe rec("Example", ri, Instruction("BOLDiTaLiCs"), QImage(), vector(), QDate::currentDate(), QTime(0, 30), QTime(0, 25), 10.0f); +// Recipe rec("Example", ri, Instruction("BOLDiTaLiCs"), QImage(), vector(), QDate::currentDate(), QTime(0, 30), QTime(0, 25), 10.0f); - bool success = recipeDB.storeRecipe(rec); - printf("Storage successful: %d\n", success); +// bool success = recipeDB.storeRecipe(rec); +// printf("Storage successful: %d\n", success); Recipe reloadRec = recipeDB.retrieveRecipe("Example"); reloadRec.print(); diff --git a/model/database/recipedatabase.cpp b/model/database/recipedatabase.cpp index 4c991da..bc23000 100644 --- a/model/database/recipedatabase.cpp +++ b/model/database/recipedatabase.cpp @@ -117,7 +117,6 @@ Recipe RecipeDatabase::retrieveRecipe(string name){ fprintf(stderr, "Error: No recipe with name %s found!\n", name.c_str()); return Recipe(); } - t.printData(); Recipe r; int id = std::stoi(t.valueAt(0, 0)); r.setName(t.valueAt(0, 1)); @@ -137,7 +136,6 @@ vector RecipeDatabase::retrieveRecipeIngredients(int recipeId) "INNER JOIN recipeIngredient " "ON ingredient.ingredientId = recipeIngredient.ingredientId " "AND recipeIngredient.recipeId = "+std::to_string(recipeId)+";"); - t.printData(); vector ings; for (unsigned int row = 0; row < t.rowCount(); row++){ RecipeIngredient r(t.valueAt(row, 0), t.valueAt(row, 1), std::stof(t.valueAt(row, 2)), UnitOfMeasure(t.valueAt(row, 3))); diff --git a/model/recipe/ingredients/ingredientlistmodel.cpp b/model/recipe/ingredients/ingredientlistmodel.cpp index de88da5..bd1a41e 100644 --- a/model/recipe/ingredients/ingredientlistmodel.cpp +++ b/model/recipe/ingredients/ingredientlistmodel.cpp @@ -10,10 +10,22 @@ int IngredientListModel::rowCount(const QModelIndex &parent) const{ QVariant IngredientListModel::data(const QModelIndex &index, int role) const{ int row = index.row(); + RecipeIngredient i = this->ingredients[row]; + + string displayStr; + + if (std::ceil(i.getQuantity()) == i.getQuantity()){ + //The quantity is an integer and should be casted. + displayStr += std::to_string((int)i.getQuantity()); + } else { + displayStr += std::to_string(i.getQuantity()); + } + + displayStr += " " + i.getUnit().getAbbreviation() + " " + i.getName(); switch(role){ case Qt::DisplayRole: - return QString::fromStdString(ingredients[row].getName()); + return QString::fromStdString(displayStr); } return QVariant(); diff --git a/model/recipe/ingredients/unitofmeasure.cpp b/model/recipe/ingredients/unitofmeasure.cpp index ddf62c8..7b4a0f8 100644 --- a/model/recipe/ingredients/unitofmeasure.cpp +++ b/model/recipe/ingredients/unitofmeasure.cpp @@ -1,19 +1,21 @@ #include "unitofmeasure.h" -UnitOfMeasure::UnitOfMeasure(string name, string plural, string abbreviation){ +UnitOfMeasure::UnitOfMeasure(string name, string plural, string abbreviation, int type){ this->name = name; this->plural = plural; this->abbreviation = abbreviation; + this->type = type; } UnitOfMeasure::UnitOfMeasure(string name){ this->name = name; this->plural = name + "s"; this->abbreviation = "NULL"; + this->type = MISC; ///TODO: Make actual guessing of this stuff. } -UnitOfMeasure::UnitOfMeasure() : UnitOfMeasure::UnitOfMeasure("", "", ""){ +UnitOfMeasure::UnitOfMeasure() : UnitOfMeasure::UnitOfMeasure("", "", "", MISC){ //Default constructor initializes all fields to empty strings. } @@ -26,5 +28,9 @@ string UnitOfMeasure::getNamePlural() const{ } string UnitOfMeasure::getAbbreviation() const{ - return this->abbreviation; + return this->abbreviation; +} + +int UnitOfMeasure::getType() const{ + return this->type; } diff --git a/model/recipe/ingredients/unitofmeasure.h b/model/recipe/ingredients/unitofmeasure.h index 1787f14..1197089 100644 --- a/model/recipe/ingredients/unitofmeasure.h +++ b/model/recipe/ingredients/unitofmeasure.h @@ -12,8 +12,14 @@ using namespace std; class UnitOfMeasure { public: + //Constants Declarations. + static const int MASS = 1; + static const int VOLUME = 2; + static const int LENGTH = 3; + static const int MISC = 4; + //Full constructor. - UnitOfMeasure(string name, string plural, string abbreviation); + UnitOfMeasure(string name, string plural, string abbreviation, int type); //Attempt to guess unit from just a string. UnitOfMeasure(string name); //Constructor with default values. @@ -23,10 +29,13 @@ public: string getName() const; string getNamePlural() const; string getAbbreviation() const; + int getType() const; private: string name; //The name of the unit of measure. string plural; //The plural name. string abbreviation; //A short version of the unit. + int type; //The type of unit, as one of the constants above. + double metricCoefficient; //The conversion from this unit to the standard metric unit. }; #endif // UNITOFMEASURE_H