Stable first release #10
			
				
			
		
		
		
	| 
						 | 
					@ -19,6 +19,10 @@ MainWindow::~MainWindow(){
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MainWindow::loadFromRecipe(Recipe recipe){
 | 
					void MainWindow::loadFromRecipe(Recipe recipe){
 | 
				
			||||||
 | 
						if (recipe.isEmpty()){
 | 
				
			||||||
 | 
							setRecipeName("No recipes found.");
 | 
				
			||||||
 | 
							setAuthorName("Click 'New' to get started.");
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
		setRecipeName(recipe.getName());
 | 
							setRecipeName(recipe.getName());
 | 
				
			||||||
		setInstruction(recipe.getInstruction());
 | 
							setInstruction(recipe.getInstruction());
 | 
				
			||||||
		setIngredients(recipe.getIngredients());
 | 
							setIngredients(recipe.getIngredients());
 | 
				
			||||||
| 
						 | 
					@ -32,6 +36,7 @@ void MainWindow::loadFromRecipe(Recipe recipe){
 | 
				
			||||||
		setServings(recipe.getServings());
 | 
							setServings(recipe.getServings());
 | 
				
			||||||
		setTags(recipe.getTags());
 | 
							setTags(recipe.getTags());
 | 
				
			||||||
		this->currentRecipe = recipe;
 | 
							this->currentRecipe = recipe;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MainWindow::setRecipeName(string name){
 | 
					void MainWindow::setRecipeName(string name){
 | 
				
			||||||
| 
						 | 
					@ -66,6 +71,10 @@ void MainWindow::setTags(vector<RecipeTag> tags){
 | 
				
			||||||
	this->tagsListModel.setTags(tags);
 | 
						this->tagsListModel.setTags(tags);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void MainWindow::setAuthorName(string name){
 | 
				
			||||||
 | 
						ui->authorLabel->setText(QString::fromStdString(name));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MainWindow::on_newButton_clicked(){
 | 
					void MainWindow::on_newButton_clicked(){
 | 
				
			||||||
	NewRecipeDialog d(this->recipeDB, this);
 | 
						NewRecipeDialog d(this->recipeDB, this);
 | 
				
			||||||
	d.show();
 | 
						d.show();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -54,6 +54,7 @@ public:
 | 
				
			||||||
	void setCookTime(QTime cookTime);
 | 
						void setCookTime(QTime cookTime);
 | 
				
			||||||
	void setServings(float servings);
 | 
						void setServings(float servings);
 | 
				
			||||||
	void setTags(vector<RecipeTag> tags);
 | 
						void setTags(vector<RecipeTag> tags);
 | 
				
			||||||
 | 
						void setAuthorName(string name);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // MAINWINDOW_H
 | 
					#endif // MAINWINDOW_H
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -364,7 +364,7 @@ font: "Noto Sans CJK KR";</string>
 | 
				
			||||||
          <item alignment="Qt::AlignLeft|Qt::AlignBottom">
 | 
					          <item alignment="Qt::AlignLeft|Qt::AlignBottom">
 | 
				
			||||||
           <widget class="QLabel" name="authorLabel">
 | 
					           <widget class="QLabel" name="authorLabel">
 | 
				
			||||||
            <property name="enabled">
 | 
					            <property name="enabled">
 | 
				
			||||||
             <bool>false</bool>
 | 
					             <bool>true</bool>
 | 
				
			||||||
            </property>
 | 
					            </property>
 | 
				
			||||||
            <property name="sizePolicy">
 | 
					            <property name="sizePolicy">
 | 
				
			||||||
             <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
 | 
					             <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,6 +23,7 @@ NewRecipeDialog::NewRecipeDialog(RecipeDatabase *db, QWidget *parent) : NewRecip
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NewRecipeDialog::NewRecipeDialog(RecipeDatabase *db, Recipe recipe, QWidget *parent) : NewRecipeDialog(db, parent){
 | 
					NewRecipeDialog::NewRecipeDialog(RecipeDatabase *db, Recipe recipe, QWidget *parent) : NewRecipeDialog(db, parent){
 | 
				
			||||||
	ui->recipeNameEdit->setText(QString::fromStdString(recipe.getName()));
 | 
						ui->recipeNameEdit->setText(QString::fromStdString(recipe.getName()));
 | 
				
			||||||
 | 
						ui->authorNameEdit->setText(QString::fromStdString(recipe.getAuthor()));
 | 
				
			||||||
	ui->prepTimeEdit->setTime(recipe.getPrepTime());
 | 
						ui->prepTimeEdit->setTime(recipe.getPrepTime());
 | 
				
			||||||
	ui->cookTimeEdit->setTime(recipe.getCookTime());
 | 
						ui->cookTimeEdit->setTime(recipe.getCookTime());
 | 
				
			||||||
	ui->servingsSpinBox->setValue((double)recipe.getServings());
 | 
						ui->servingsSpinBox->setValue((double)recipe.getServings());
 | 
				
			||||||
| 
						 | 
					@ -38,6 +39,7 @@ NewRecipeDialog::~NewRecipeDialog(){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Recipe NewRecipeDialog::getRecipe(){
 | 
					Recipe NewRecipeDialog::getRecipe(){
 | 
				
			||||||
	Recipe r(ui->recipeNameEdit->text().toStdString(),
 | 
						Recipe r(ui->recipeNameEdit->text().toStdString(),
 | 
				
			||||||
 | 
								 ui->authorNameEdit->text().toStdString(),
 | 
				
			||||||
			 this->ingredientListModel.getIngredients(),
 | 
								 this->ingredientListModel.getIngredients(),
 | 
				
			||||||
			 ui->instructionsTextEdit->toHtml().toStdString(),
 | 
								 ui->instructionsTextEdit->toHtml().toStdString(),
 | 
				
			||||||
			 ui->imageDisplayLabel->pixmap()->toImage(),//Image
 | 
								 ui->imageDisplayLabel->pixmap()->toImage(),//Image
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -96,15 +96,25 @@
 | 
				
			||||||
            <item>
 | 
					            <item>
 | 
				
			||||||
             <widget class="QWidget" name="recipeNamePanel" native="true">
 | 
					             <widget class="QWidget" name="recipeNamePanel" native="true">
 | 
				
			||||||
              <layout class="QVBoxLayout" name="verticalLayout_9">
 | 
					              <layout class="QVBoxLayout" name="verticalLayout_9">
 | 
				
			||||||
 | 
					               <property name="spacing">
 | 
				
			||||||
 | 
					                <number>0</number>
 | 
				
			||||||
 | 
					               </property>
 | 
				
			||||||
               <item>
 | 
					               <item>
 | 
				
			||||||
                <widget class="QLineEdit" name="recipeNameEdit">
 | 
					                <widget class="QLineEdit" name="recipeNameEdit">
 | 
				
			||||||
                 <property name="font">
 | 
					                 <property name="font">
 | 
				
			||||||
                  <font>
 | 
					                  <font>
 | 
				
			||||||
 | 
					                   <pointsize>14</pointsize>
 | 
				
			||||||
                   <weight>3</weight>
 | 
					                   <weight>3</weight>
 | 
				
			||||||
                   <italic>false</italic>
 | 
					                   <italic>false</italic>
 | 
				
			||||||
                   <bold>false</bold>
 | 
					                   <bold>false</bold>
 | 
				
			||||||
                  </font>
 | 
					                  </font>
 | 
				
			||||||
                 </property>
 | 
					                 </property>
 | 
				
			||||||
 | 
					                 <property name="styleSheet">
 | 
				
			||||||
 | 
					                  <string notr="true">background-color: rgb(255, 255, 255);</string>
 | 
				
			||||||
 | 
					                 </property>
 | 
				
			||||||
 | 
					                 <property name="frame">
 | 
				
			||||||
 | 
					                  <bool>false</bool>
 | 
				
			||||||
 | 
					                 </property>
 | 
				
			||||||
                 <property name="alignment">
 | 
					                 <property name="alignment">
 | 
				
			||||||
                  <set>Qt::AlignCenter</set>
 | 
					                  <set>Qt::AlignCenter</set>
 | 
				
			||||||
                 </property>
 | 
					                 </property>
 | 
				
			||||||
| 
						 | 
					@ -113,6 +123,30 @@
 | 
				
			||||||
                 </property>
 | 
					                 </property>
 | 
				
			||||||
                </widget>
 | 
					                </widget>
 | 
				
			||||||
               </item>
 | 
					               </item>
 | 
				
			||||||
 | 
					               <item>
 | 
				
			||||||
 | 
					                <widget class="QLineEdit" name="authorNameEdit">
 | 
				
			||||||
 | 
					                 <property name="font">
 | 
				
			||||||
 | 
					                  <font>
 | 
				
			||||||
 | 
					                   <pointsize>12</pointsize>
 | 
				
			||||||
 | 
					                   <weight>3</weight>
 | 
				
			||||||
 | 
					                   <italic>false</italic>
 | 
				
			||||||
 | 
					                   <bold>false</bold>
 | 
				
			||||||
 | 
					                  </font>
 | 
				
			||||||
 | 
					                 </property>
 | 
				
			||||||
 | 
					                 <property name="styleSheet">
 | 
				
			||||||
 | 
					                  <string notr="true">background-color: rgb(245, 245, 255);</string>
 | 
				
			||||||
 | 
					                 </property>
 | 
				
			||||||
 | 
					                 <property name="frame">
 | 
				
			||||||
 | 
					                  <bool>false</bool>
 | 
				
			||||||
 | 
					                 </property>
 | 
				
			||||||
 | 
					                 <property name="alignment">
 | 
				
			||||||
 | 
					                  <set>Qt::AlignCenter</set>
 | 
				
			||||||
 | 
					                 </property>
 | 
				
			||||||
 | 
					                 <property name="placeholderText">
 | 
				
			||||||
 | 
					                  <string>Author</string>
 | 
				
			||||||
 | 
					                 </property>
 | 
				
			||||||
 | 
					                </widget>
 | 
				
			||||||
 | 
					               </item>
 | 
				
			||||||
              </layout>
 | 
					              </layout>
 | 
				
			||||||
             </widget>
 | 
					             </widget>
 | 
				
			||||||
            </item>
 | 
					            </item>
 | 
				
			||||||
| 
						 | 
					@ -141,7 +175,7 @@
 | 
				
			||||||
                      <second>0</second>
 | 
					                      <second>0</second>
 | 
				
			||||||
                      <year>1999</year>
 | 
					                      <year>1999</year>
 | 
				
			||||||
                      <month>12</month>
 | 
					                      <month>12</month>
 | 
				
			||||||
                      <day>23</day>
 | 
					                      <day>22</day>
 | 
				
			||||||
                     </datetime>
 | 
					                     </datetime>
 | 
				
			||||||
                    </property>
 | 
					                    </property>
 | 
				
			||||||
                    <property name="currentSection">
 | 
					                    <property name="currentSection">
 | 
				
			||||||
| 
						 | 
					@ -252,6 +286,9 @@
 | 
				
			||||||
            <item alignment="Qt::AlignTop">
 | 
					            <item alignment="Qt::AlignTop">
 | 
				
			||||||
             <widget class="QWidget" name="newTagBoxPanel" native="true">
 | 
					             <widget class="QWidget" name="newTagBoxPanel" native="true">
 | 
				
			||||||
              <layout class="QHBoxLayout" name="horizontalLayout_7">
 | 
					              <layout class="QHBoxLayout" name="horizontalLayout_7">
 | 
				
			||||||
 | 
					               <property name="spacing">
 | 
				
			||||||
 | 
					                <number>2</number>
 | 
				
			||||||
 | 
					               </property>
 | 
				
			||||||
               <property name="leftMargin">
 | 
					               <property name="leftMargin">
 | 
				
			||||||
                <number>0</number>
 | 
					                <number>0</number>
 | 
				
			||||||
               </property>
 | 
					               </property>
 | 
				
			||||||
| 
						 | 
					@ -285,6 +322,9 @@
 | 
				
			||||||
                 <property name="toolTip">
 | 
					                 <property name="toolTip">
 | 
				
			||||||
                  <string>Create a new tag</string>
 | 
					                  <string>Create a new tag</string>
 | 
				
			||||||
                 </property>
 | 
					                 </property>
 | 
				
			||||||
 | 
					                 <property name="styleSheet">
 | 
				
			||||||
 | 
					                  <string notr="true">background-color: rgb(255, 255, 255);</string>
 | 
				
			||||||
 | 
					                 </property>
 | 
				
			||||||
                 <property name="icon">
 | 
					                 <property name="icon">
 | 
				
			||||||
                  <iconset resource="../images.qrc">
 | 
					                  <iconset resource="../images.qrc">
 | 
				
			||||||
                   <normaloff>:/images/images/plus_icon.png</normaloff>:/images/images/plus_icon.png</iconset>
 | 
					                   <normaloff>:/images/images/plus_icon.png</normaloff>:/images/images/plus_icon.png</iconset>
 | 
				
			||||||
| 
						 | 
					@ -296,6 +336,9 @@
 | 
				
			||||||
                 <property name="toolTip">
 | 
					                 <property name="toolTip">
 | 
				
			||||||
                  <string>Permanently delete this tag</string>
 | 
					                  <string>Permanently delete this tag</string>
 | 
				
			||||||
                 </property>
 | 
					                 </property>
 | 
				
			||||||
 | 
					                 <property name="styleSheet">
 | 
				
			||||||
 | 
					                  <string notr="true">background-color: rgb(255, 255, 255);</string>
 | 
				
			||||||
 | 
					                 </property>
 | 
				
			||||||
                 <property name="icon">
 | 
					                 <property name="icon">
 | 
				
			||||||
                  <iconset resource="../images.qrc">
 | 
					                  <iconset resource="../images.qrc">
 | 
				
			||||||
                   <normaloff>:/images/images/minus_icon.png</normaloff>:/images/images/minus_icon.png</iconset>
 | 
					                   <normaloff>:/images/images/minus_icon.png</normaloff>:/images/images/minus_icon.png</iconset>
 | 
				
			||||||
| 
						 | 
					@ -308,6 +351,9 @@
 | 
				
			||||||
            <item>
 | 
					            <item>
 | 
				
			||||||
             <widget class="QWidget" name="tagsListControlPanel" native="true">
 | 
					             <widget class="QWidget" name="tagsListControlPanel" native="true">
 | 
				
			||||||
              <layout class="QHBoxLayout" name="horizontalLayout_8">
 | 
					              <layout class="QHBoxLayout" name="horizontalLayout_8">
 | 
				
			||||||
 | 
					               <property name="spacing">
 | 
				
			||||||
 | 
					                <number>0</number>
 | 
				
			||||||
 | 
					               </property>
 | 
				
			||||||
               <property name="leftMargin">
 | 
					               <property name="leftMargin">
 | 
				
			||||||
                <number>0</number>
 | 
					                <number>0</number>
 | 
				
			||||||
               </property>
 | 
					               </property>
 | 
				
			||||||
| 
						 | 
					@ -322,6 +368,27 @@
 | 
				
			||||||
               </property>
 | 
					               </property>
 | 
				
			||||||
               <item>
 | 
					               <item>
 | 
				
			||||||
                <widget class="QPushButton" name="addTagButton">
 | 
					                <widget class="QPushButton" name="addTagButton">
 | 
				
			||||||
 | 
					                 <property name="minimumSize">
 | 
				
			||||||
 | 
					                  <size>
 | 
				
			||||||
 | 
					                   <width>0</width>
 | 
				
			||||||
 | 
					                   <height>20</height>
 | 
				
			||||||
 | 
					                  </size>
 | 
				
			||||||
 | 
					                 </property>
 | 
				
			||||||
 | 
					                 <property name="toolTip">
 | 
				
			||||||
 | 
					                  <string>Add the above tag to the recipe</string>
 | 
				
			||||||
 | 
					                 </property>
 | 
				
			||||||
 | 
					                 <property name="styleSheet">
 | 
				
			||||||
 | 
					                  <string notr="true">QPushButton#addTagButton {
 | 
				
			||||||
 | 
						background-color: rgb(235, 235, 255);
 | 
				
			||||||
 | 
						border: 0px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					QPushButton#addTagButton:hover{
 | 
				
			||||||
 | 
						background-color: rgb(245, 245, 255);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					QPushButton#addTagButton:pressed{
 | 
				
			||||||
 | 
						background-color: rgb(255, 255, 255);
 | 
				
			||||||
 | 
					}</string>
 | 
				
			||||||
 | 
					                 </property>
 | 
				
			||||||
                 <property name="text">
 | 
					                 <property name="text">
 | 
				
			||||||
                  <string>Add</string>
 | 
					                  <string>Add</string>
 | 
				
			||||||
                 </property>
 | 
					                 </property>
 | 
				
			||||||
| 
						 | 
					@ -329,8 +396,29 @@
 | 
				
			||||||
               </item>
 | 
					               </item>
 | 
				
			||||||
               <item>
 | 
					               <item>
 | 
				
			||||||
                <widget class="QPushButton" name="deleteTagButton">
 | 
					                <widget class="QPushButton" name="deleteTagButton">
 | 
				
			||||||
 | 
					                 <property name="minimumSize">
 | 
				
			||||||
 | 
					                  <size>
 | 
				
			||||||
 | 
					                   <width>0</width>
 | 
				
			||||||
 | 
					                   <height>20</height>
 | 
				
			||||||
 | 
					                  </size>
 | 
				
			||||||
 | 
					                 </property>
 | 
				
			||||||
 | 
					                 <property name="toolTip">
 | 
				
			||||||
 | 
					                  <string>Remove this tag from the recipe</string>
 | 
				
			||||||
 | 
					                 </property>
 | 
				
			||||||
 | 
					                 <property name="styleSheet">
 | 
				
			||||||
 | 
					                  <string notr="true">QPushButton#deleteTagButton {
 | 
				
			||||||
 | 
						background-color: rgb(225, 225, 255);
 | 
				
			||||||
 | 
						border: 0px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					QPushButton#deleteTagButton:hover{
 | 
				
			||||||
 | 
						background-color: rgb(235, 235, 255);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					QPushButton#deleteTagButton:pressed{
 | 
				
			||||||
 | 
						background-color: rgb(245, 245, 255);
 | 
				
			||||||
 | 
					}</string>
 | 
				
			||||||
 | 
					                 </property>
 | 
				
			||||||
                 <property name="text">
 | 
					                 <property name="text">
 | 
				
			||||||
                  <string>Delete</string>
 | 
					                  <string>Remove</string>
 | 
				
			||||||
                 </property>
 | 
					                 </property>
 | 
				
			||||||
                </widget>
 | 
					                </widget>
 | 
				
			||||||
               </item>
 | 
					               </item>
 | 
				
			||||||
| 
						 | 
					@ -434,7 +522,7 @@
 | 
				
			||||||
                  <item>
 | 
					                  <item>
 | 
				
			||||||
                   <widget class="QLabel" name="addIngredientLabel">
 | 
					                   <widget class="QLabel" name="addIngredientLabel">
 | 
				
			||||||
                    <property name="text">
 | 
					                    <property name="text">
 | 
				
			||||||
                     <string>Add Ingredient</string>
 | 
					                     <string>Ingredients</string>
 | 
				
			||||||
                    </property>
 | 
					                    </property>
 | 
				
			||||||
                    <property name="alignment">
 | 
					                    <property name="alignment">
 | 
				
			||||||
                     <set>Qt::AlignCenter</set>
 | 
					                     <set>Qt::AlignCenter</set>
 | 
				
			||||||
| 
						 | 
					@ -497,6 +585,9 @@
 | 
				
			||||||
                     </item>
 | 
					                     </item>
 | 
				
			||||||
                     <item>
 | 
					                     <item>
 | 
				
			||||||
                      <widget class="QPushButton" name="deleteIngredientButton">
 | 
					                      <widget class="QPushButton" name="deleteIngredientButton">
 | 
				
			||||||
 | 
					                       <property name="toolTip">
 | 
				
			||||||
 | 
					                        <string>Delete this ingredient</string>
 | 
				
			||||||
 | 
					                       </property>
 | 
				
			||||||
                       <property name="text">
 | 
					                       <property name="text">
 | 
				
			||||||
                        <string/>
 | 
					                        <string/>
 | 
				
			||||||
                       </property>
 | 
					                       </property>
 | 
				
			||||||
| 
						 | 
					@ -581,6 +672,9 @@
 | 
				
			||||||
                     </item>
 | 
					                     </item>
 | 
				
			||||||
                     <item alignment="Qt::AlignRight">
 | 
					                     <item alignment="Qt::AlignRight">
 | 
				
			||||||
                      <widget class="QPushButton" name="newUnitButton">
 | 
					                      <widget class="QPushButton" name="newUnitButton">
 | 
				
			||||||
 | 
					                       <property name="toolTip">
 | 
				
			||||||
 | 
					                        <string>Create a new unit of measure</string>
 | 
				
			||||||
 | 
					                       </property>
 | 
				
			||||||
                       <property name="icon">
 | 
					                       <property name="icon">
 | 
				
			||||||
                        <iconset resource="../images.qrc">
 | 
					                        <iconset resource="../images.qrc">
 | 
				
			||||||
                         <normaloff>:/images/images/plus_icon.png</normaloff>:/images/images/plus_icon.png</iconset>
 | 
					                         <normaloff>:/images/images/plus_icon.png</normaloff>:/images/images/plus_icon.png</iconset>
 | 
				
			||||||
| 
						 | 
					@ -589,6 +683,9 @@
 | 
				
			||||||
                     </item>
 | 
					                     </item>
 | 
				
			||||||
                     <item>
 | 
					                     <item>
 | 
				
			||||||
                      <widget class="QPushButton" name="deleteUnitButton">
 | 
					                      <widget class="QPushButton" name="deleteUnitButton">
 | 
				
			||||||
 | 
					                       <property name="toolTip">
 | 
				
			||||||
 | 
					                        <string>Delete this unit of measure</string>
 | 
				
			||||||
 | 
					                       </property>
 | 
				
			||||||
                       <property name="text">
 | 
					                       <property name="text">
 | 
				
			||||||
                        <string/>
 | 
					                        <string/>
 | 
				
			||||||
                       </property>
 | 
					                       </property>
 | 
				
			||||||
| 
						 | 
					@ -626,6 +723,9 @@
 | 
				
			||||||
                  <item>
 | 
					                  <item>
 | 
				
			||||||
                   <widget class="QWidget" name="ingredientsListControlPanel" native="true">
 | 
					                   <widget class="QWidget" name="ingredientsListControlPanel" native="true">
 | 
				
			||||||
                    <layout class="QHBoxLayout" name="horizontalLayout_9">
 | 
					                    <layout class="QHBoxLayout" name="horizontalLayout_9">
 | 
				
			||||||
 | 
					                     <property name="spacing">
 | 
				
			||||||
 | 
					                      <number>0</number>
 | 
				
			||||||
 | 
					                     </property>
 | 
				
			||||||
                     <property name="leftMargin">
 | 
					                     <property name="leftMargin">
 | 
				
			||||||
                      <number>0</number>
 | 
					                      <number>0</number>
 | 
				
			||||||
                     </property>
 | 
					                     </property>
 | 
				
			||||||
| 
						 | 
					@ -640,6 +740,27 @@
 | 
				
			||||||
                     </property>
 | 
					                     </property>
 | 
				
			||||||
                     <item>
 | 
					                     <item>
 | 
				
			||||||
                      <widget class="QPushButton" name="addIngredientButton">
 | 
					                      <widget class="QPushButton" name="addIngredientButton">
 | 
				
			||||||
 | 
					                       <property name="minimumSize">
 | 
				
			||||||
 | 
					                        <size>
 | 
				
			||||||
 | 
					                         <width>0</width>
 | 
				
			||||||
 | 
					                         <height>30</height>
 | 
				
			||||||
 | 
					                        </size>
 | 
				
			||||||
 | 
					                       </property>
 | 
				
			||||||
 | 
					                       <property name="toolTip">
 | 
				
			||||||
 | 
					                        <string>Add the above ingredient to the recipe</string>
 | 
				
			||||||
 | 
					                       </property>
 | 
				
			||||||
 | 
					                       <property name="styleSheet">
 | 
				
			||||||
 | 
					                        <string notr="true">QPushButton#addIngredientButton {
 | 
				
			||||||
 | 
						background-color: rgb(235, 235, 255);
 | 
				
			||||||
 | 
						border: 0px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					QPushButton#addIngredientButton:hover{
 | 
				
			||||||
 | 
						background-color: rgb(245, 245, 255);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					QPushButton#addIngredientButton:pressed{
 | 
				
			||||||
 | 
						background-color: rgb(255, 255, 255);
 | 
				
			||||||
 | 
					}</string>
 | 
				
			||||||
 | 
					                       </property>
 | 
				
			||||||
                       <property name="text">
 | 
					                       <property name="text">
 | 
				
			||||||
                        <string>Add</string>
 | 
					                        <string>Add</string>
 | 
				
			||||||
                       </property>
 | 
					                       </property>
 | 
				
			||||||
| 
						 | 
					@ -647,8 +768,29 @@
 | 
				
			||||||
                     </item>
 | 
					                     </item>
 | 
				
			||||||
                     <item>
 | 
					                     <item>
 | 
				
			||||||
                      <widget class="QPushButton" name="removeIngredientButton">
 | 
					                      <widget class="QPushButton" name="removeIngredientButton">
 | 
				
			||||||
 | 
					                       <property name="minimumSize">
 | 
				
			||||||
 | 
					                        <size>
 | 
				
			||||||
 | 
					                         <width>0</width>
 | 
				
			||||||
 | 
					                         <height>30</height>
 | 
				
			||||||
 | 
					                        </size>
 | 
				
			||||||
 | 
					                       </property>
 | 
				
			||||||
 | 
					                       <property name="toolTip">
 | 
				
			||||||
 | 
					                        <string>Remove this ingredient from the recipe</string>
 | 
				
			||||||
 | 
					                       </property>
 | 
				
			||||||
 | 
					                       <property name="styleSheet">
 | 
				
			||||||
 | 
					                        <string notr="true">QPushButton#removeIngredientButton {
 | 
				
			||||||
 | 
						background-color: rgb(225, 225, 255);
 | 
				
			||||||
 | 
						border: 0px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					QPushButton#removeIngredientButton:hover{
 | 
				
			||||||
 | 
						background-color: rgb(235, 235, 255);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					QPushButton#removeIngredientButton:pressed{
 | 
				
			||||||
 | 
						background-color: rgb(245, 245, 255);
 | 
				
			||||||
 | 
					}</string>
 | 
				
			||||||
 | 
					                       </property>
 | 
				
			||||||
                       <property name="text">
 | 
					                       <property name="text">
 | 
				
			||||||
                        <string>Delete</string>
 | 
					                        <string>Remove</string>
 | 
				
			||||||
                       </property>
 | 
					                       </property>
 | 
				
			||||||
                      </widget>
 | 
					                      </widget>
 | 
				
			||||||
                     </item>
 | 
					                     </item>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										20
									
								
								main.cpp
								
								
								
								
							
							
						
						
									
										20
									
								
								main.cpp
								
								
								
								
							| 
						 | 
					@ -8,20 +8,25 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void test(RecipeDatabase *recipeDB);
 | 
					void test(RecipeDatabase *recipeDB);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Recipe checkForFirstRun(RecipeDatabase *recipeDB){
 | 
				
			||||||
 | 
						Recipe r = recipeDB->retrieveRandomRecipe();
 | 
				
			||||||
 | 
						if (r.isEmpty()){//There are no recipes in the database.
 | 
				
			||||||
 | 
							//Add some basic units to the units, and some basic ingredients.
 | 
				
			||||||
 | 
							recipeDB->addBasicUnits();
 | 
				
			||||||
 | 
							recipeDB->addBasicIngredients();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return r;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main(int argc, char *argv[])
 | 
					int main(int argc, char *argv[])
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	RecipeDatabase recipeDB(QString(FileUtils::appDataPath+"recipes.db").toStdString());
 | 
						RecipeDatabase recipeDB(QString(FileUtils::appDataPath+"recipes.db").toStdString());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	QApplication a(argc, argv);
 | 
						QApplication a(argc, argv);
 | 
				
			||||||
	MainWindow w(&recipeDB);
 | 
						MainWindow w(&recipeDB);
 | 
				
			||||||
 | 
						w.loadFromRecipe(checkForFirstRun(&recipeDB));
 | 
				
			||||||
	w.show();
 | 
						w.show();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//TESTING CODE
 | 
					 | 
				
			||||||
	//test(&recipeDB);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	//END TESTING CODE.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	w.loadFromRecipe(recipeDB.retrieveRandomRecipe());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	a.exec();
 | 
						a.exec();
 | 
				
			||||||
	recipeDB.closeConnection();
 | 
						recipeDB.closeConnection();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,6 +39,7 @@ void test(RecipeDatabase *recipeDB){
 | 
				
			||||||
	ri.push_back(RecipeIngredient("baking powder", "additives", 1.0f, UnitOfMeasure("teaspoon", "teaspoons", "tsp", UnitOfMeasure::VOLUME, 1.0), ""));
 | 
						ri.push_back(RecipeIngredient("baking powder", "additives", 1.0f, UnitOfMeasure("teaspoon", "teaspoons", "tsp", UnitOfMeasure::VOLUME, 1.0), ""));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Recipe rec("Example",
 | 
						Recipe rec("Example",
 | 
				
			||||||
 | 
								   "Andrew Lalis",
 | 
				
			||||||
			   ri,
 | 
								   ri,
 | 
				
			||||||
			   Instruction("Placeholder Text"),
 | 
								   Instruction("Placeholder Text"),
 | 
				
			||||||
			   QImage(),
 | 
								   QImage(),
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,7 +12,7 @@ bool RecipeDatabase::storeRecipe(Recipe recipe){
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	//Store a recipe, if it doesn't already exist. This first tries to create the recipe entry, then all subsequent supporting table entries.
 | 
						//Store a recipe, if it doesn't already exist. This first tries to create the recipe entry, then all subsequent supporting table entries.
 | 
				
			||||||
	this->executeSQL("BEGIN;");
 | 
						this->beginTransaction();
 | 
				
			||||||
	ResultTable t = this->selectFrom("recipe", "*", "WHERE name="+surroundString(recipe.getName(), "'"));
 | 
						ResultTable t = this->selectFrom("recipe", "*", "WHERE name="+surroundString(recipe.getName(), "'"));
 | 
				
			||||||
	if (!t.isEmpty()){
 | 
						if (!t.isEmpty()){
 | 
				
			||||||
		fprintf(stderr, "Error storing recipe: Recipe with name %s already exists.\n", recipe.getName().c_str());
 | 
							fprintf(stderr, "Error storing recipe: Recipe with name %s already exists.\n", recipe.getName().c_str());
 | 
				
			||||||
| 
						 | 
					@ -20,6 +20,7 @@ bool RecipeDatabase::storeRecipe(Recipe recipe){
 | 
				
			||||||
		bool success = this->insertInto("recipe",
 | 
							bool success = this->insertInto("recipe",
 | 
				
			||||||
						 vector<string>({
 | 
											 vector<string>({
 | 
				
			||||||
											"name",
 | 
																"name",
 | 
				
			||||||
 | 
																"authorName",
 | 
				
			||||||
											"createdDate",
 | 
																"createdDate",
 | 
				
			||||||
											"cookTime",
 | 
																"cookTime",
 | 
				
			||||||
											"prepTime",
 | 
																"prepTime",
 | 
				
			||||||
| 
						 | 
					@ -27,6 +28,7 @@ bool RecipeDatabase::storeRecipe(Recipe recipe){
 | 
				
			||||||
										}),
 | 
															}),
 | 
				
			||||||
						 vector<string>({
 | 
											 vector<string>({
 | 
				
			||||||
											recipe.getName(),
 | 
																recipe.getName(),
 | 
				
			||||||
 | 
																recipe.getAuthor(),
 | 
				
			||||||
											recipe.getCreatedDate().toString().toStdString(),
 | 
																recipe.getCreatedDate().toString().toStdString(),
 | 
				
			||||||
											recipe.getCookTime().toString().toStdString(),
 | 
																recipe.getCookTime().toString().toStdString(),
 | 
				
			||||||
											recipe.getPrepTime().toString().toStdString(),
 | 
																recipe.getPrepTime().toString().toStdString(),
 | 
				
			||||||
| 
						 | 
					@ -46,12 +48,12 @@ bool RecipeDatabase::storeRecipe(Recipe recipe){
 | 
				
			||||||
					this->storeInstruction(recipe.getInstruction(), recipeId) &&
 | 
										this->storeInstruction(recipe.getInstruction(), recipeId) &&
 | 
				
			||||||
					this->storeImage(recipe.getImage(), recipeId) &&
 | 
										this->storeImage(recipe.getImage(), recipeId) &&
 | 
				
			||||||
					this->storeTags(recipe.getTags(), recipeId)){
 | 
										this->storeTags(recipe.getTags(), recipeId)){
 | 
				
			||||||
				this->executeSQL("COMMIT;");
 | 
									this->commitTransaction();
 | 
				
			||||||
				return true;
 | 
									return true;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	this->executeSQL("ROLLBACK;");
 | 
						this->rollbackTransaction();
 | 
				
			||||||
	return false;
 | 
						return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -158,7 +160,7 @@ Recipe RecipeDatabase::retrieveRandomRecipe(){
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return this->readFromResultTable(t);
 | 
						return this->readFromResultTable(t);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
//TODO: Change this to be more efficient! One query per recipe is not good!
 | 
					
 | 
				
			||||||
vector<Recipe> RecipeDatabase::retrieveAllRecipes(){
 | 
					vector<Recipe> RecipeDatabase::retrieveAllRecipes(){
 | 
				
			||||||
	ResultTable t = this->executeSQL("SELECT * FROM recipe ORDER BY name;");
 | 
						ResultTable t = this->executeSQL("SELECT * FROM recipe ORDER BY name;");
 | 
				
			||||||
	return this->readRecipesFromTable(t);
 | 
						return this->readRecipesFromTable(t);
 | 
				
			||||||
| 
						 | 
					@ -326,7 +328,7 @@ bool RecipeDatabase::deleteRecipe(int recipeId){
 | 
				
			||||||
		printf("Cannot delete. No recipe with ID %d exists.\n", recipeId);
 | 
							printf("Cannot delete. No recipe with ID %d exists.\n", recipeId);
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	this->executeSQL("BEGIN;");
 | 
						this->beginTransaction();
 | 
				
			||||||
	bool tagsDeleted = this->deleteFrom("recipeTag", "WHERE recipeId="+idString);
 | 
						bool tagsDeleted = this->deleteFrom("recipeTag", "WHERE recipeId="+idString);
 | 
				
			||||||
	bool recipeIngredientDeleted = this->deleteFrom("recipeIngredient", "WHERE recipeId="+idString);
 | 
						bool recipeIngredientDeleted = this->deleteFrom("recipeIngredient", "WHERE recipeId="+idString);
 | 
				
			||||||
	bool recipeDeleted = this->deleteFrom("recipe", "WHERE recipeId="+idString);
 | 
						bool recipeDeleted = this->deleteFrom("recipe", "WHERE recipeId="+idString);
 | 
				
			||||||
| 
						 | 
					@ -335,10 +337,10 @@ bool RecipeDatabase::deleteRecipe(int recipeId){
 | 
				
			||||||
	Q_UNUSED(instructionDeleted);
 | 
						Q_UNUSED(instructionDeleted);
 | 
				
			||||||
	Q_UNUSED(imageDeleted);
 | 
						Q_UNUSED(imageDeleted);
 | 
				
			||||||
	if (tagsDeleted && recipeIngredientDeleted && recipeDeleted){
 | 
						if (tagsDeleted && recipeIngredientDeleted && recipeDeleted){
 | 
				
			||||||
		this->executeSQL("COMMIT;");
 | 
							this->commitTransaction();
 | 
				
			||||||
		return true;
 | 
							return true;
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		this->executeSQL("ROLLBACK;");
 | 
							this->rollbackTransaction();
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -374,6 +376,7 @@ bool RecipeDatabase::updateRecipe(Recipe recipe, string originalName) {
 | 
				
			||||||
	this->beginTransaction();
 | 
						this->beginTransaction();
 | 
				
			||||||
	ResultTable t = this->executeSQL("UPDATE recipe "
 | 
						ResultTable t = this->executeSQL("UPDATE recipe "
 | 
				
			||||||
									 "SET name = '"+recipe.getName()+"', "
 | 
														 "SET name = '"+recipe.getName()+"', "
 | 
				
			||||||
 | 
														 "authorName = '"+recipe.getAuthor()+"', "
 | 
				
			||||||
									 "createdDate = '"+recipe.getCreatedDate().toString().toStdString()+"', "
 | 
														 "createdDate = '"+recipe.getCreatedDate().toString().toStdString()+"', "
 | 
				
			||||||
									 "prepTime = '"+recipe.getPrepTime().toString().toStdString()+"', "
 | 
														 "prepTime = '"+recipe.getPrepTime().toString().toStdString()+"', "
 | 
				
			||||||
									 "cookTime = '"+recipe.getCookTime().toString().toStdString()+"', "
 | 
														 "cookTime = '"+recipe.getCookTime().toString().toStdString()+"', "
 | 
				
			||||||
| 
						 | 
					@ -435,11 +438,55 @@ bool RecipeDatabase::updateRecipe(Recipe recipe, string originalName) {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool RecipeDatabase::addBasicUnits(){
 | 
				
			||||||
 | 
						this->beginTransaction();
 | 
				
			||||||
 | 
						//Volume
 | 
				
			||||||
 | 
						this->storeUnitOfMeasure(UnitOfMeasure("Teaspoon", "Teaspoons", "tsp", UnitOfMeasure::VOLUME, 5.0));
 | 
				
			||||||
 | 
						this->storeUnitOfMeasure(UnitOfMeasure("Tablespoon", "Tablespoons", "tbsp", UnitOfMeasure::VOLUME, 15.0));
 | 
				
			||||||
 | 
						this->storeUnitOfMeasure(UnitOfMeasure("Fluid Ounce", "Fluid Ounces", "fl oz", UnitOfMeasure::VOLUME, 30.0));
 | 
				
			||||||
 | 
						this->storeUnitOfMeasure(UnitOfMeasure("Cup", "Cups", "c", UnitOfMeasure::VOLUME, 250.0));
 | 
				
			||||||
 | 
						this->storeUnitOfMeasure(UnitOfMeasure("Milliliter", "Milliliters", "mL", UnitOfMeasure::VOLUME, 1.0));
 | 
				
			||||||
 | 
						this->storeUnitOfMeasure(UnitOfMeasure("Liter", "Liters", "L", UnitOfMeasure::VOLUME, 1000.0));
 | 
				
			||||||
 | 
						this->storeUnitOfMeasure(UnitOfMeasure("Gallon", "Gallons", "gal", UnitOfMeasure::VOLUME, 3800.0));
 | 
				
			||||||
 | 
						//Mass/Weight
 | 
				
			||||||
 | 
						this->storeUnitOfMeasure(UnitOfMeasure("Ounce", "Ounces", "oz", UnitOfMeasure::MASS, 28.0));
 | 
				
			||||||
 | 
						this->storeUnitOfMeasure(UnitOfMeasure("Pound", "Pounds", "lb", UnitOfMeasure::MASS, 454.0));
 | 
				
			||||||
 | 
						this->storeUnitOfMeasure(UnitOfMeasure("Gram", "Grams", "g", UnitOfMeasure::MASS, 1.0));
 | 
				
			||||||
 | 
						this->storeUnitOfMeasure(UnitOfMeasure("Milligram", "Milligrams", "mg", UnitOfMeasure::MASS, 0.001));
 | 
				
			||||||
 | 
						this->storeUnitOfMeasure(UnitOfMeasure("Kilogram", "Kilograms", "kg", UnitOfMeasure::MASS, 1000.0));
 | 
				
			||||||
 | 
						//Length
 | 
				
			||||||
 | 
						this->storeUnitOfMeasure(UnitOfMeasure("Inch", "Inches", "in", UnitOfMeasure::LENGTH, 2.54));
 | 
				
			||||||
 | 
						this->storeUnitOfMeasure(UnitOfMeasure("Centimeter", "Centimeters", "cm", UnitOfMeasure::LENGTH, 1.0));
 | 
				
			||||||
 | 
						//MISC
 | 
				
			||||||
 | 
						this->storeUnitOfMeasure(UnitOfMeasure("Piece", "Pieces", "pc", UnitOfMeasure::MISC, 1.0));
 | 
				
			||||||
 | 
						this->storeUnitOfMeasure(UnitOfMeasure("Item", "Items", "", UnitOfMeasure::MISC, 1.0));
 | 
				
			||||||
 | 
						this->commitTransaction();
 | 
				
			||||||
 | 
						return true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool RecipeDatabase::addBasicIngredients(){
 | 
				
			||||||
 | 
						this->beginTransaction();
 | 
				
			||||||
 | 
						this->storeIngredient(Ingredient("Flour", "grains"));
 | 
				
			||||||
 | 
						this->storeIngredient(Ingredient("Eggs", "eggs"));
 | 
				
			||||||
 | 
						this->storeIngredient(Ingredient("Milk", "dairy"));
 | 
				
			||||||
 | 
						this->storeIngredient(Ingredient("Cheese", "dairy"));
 | 
				
			||||||
 | 
						this->storeIngredient(Ingredient("Salt", "spices"));
 | 
				
			||||||
 | 
						this->storeIngredient(Ingredient("Sugar", "sugars"));
 | 
				
			||||||
 | 
						this->storeIngredient(Ingredient("Vegetable Oil", "oils"));
 | 
				
			||||||
 | 
						this->storeIngredient(Ingredient("Olive Oil", "oils"));
 | 
				
			||||||
 | 
						this->storeIngredient(Ingredient("Water", "water"));
 | 
				
			||||||
 | 
						this->storeIngredient(Ingredient("Bell Pepper", "vegetables"));
 | 
				
			||||||
 | 
						this->storeIngredient(Ingredient("Onion", "vegetables"));
 | 
				
			||||||
 | 
						this->storeIngredient(Ingredient("Garlic", "spices"));
 | 
				
			||||||
 | 
						this->commitTransaction();
 | 
				
			||||||
 | 
						return true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void RecipeDatabase::ensureTablesExist(){
 | 
					void RecipeDatabase::ensureTablesExist(){
 | 
				
			||||||
	//Make sure that foreign keys are enabled.
 | 
						//Make sure that foreign keys are enabled.
 | 
				
			||||||
	this->executeSQL("PRAGMA foreign_keys = ON;");
 | 
						this->executeSQL("PRAGMA foreign_keys = ON;");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	this->executeSQL("BEGIN;");
 | 
						this->beginTransaction();
 | 
				
			||||||
	//Ingredients table.
 | 
						//Ingredients table.
 | 
				
			||||||
	this->executeSQL("CREATE TABLE IF NOT EXISTS ingredient("
 | 
						this->executeSQL("CREATE TABLE IF NOT EXISTS ingredient("
 | 
				
			||||||
					 "ingredientId INTEGER PRIMARY KEY,"
 | 
										 "ingredientId INTEGER PRIMARY KEY,"
 | 
				
			||||||
| 
						 | 
					@ -456,6 +503,7 @@ void RecipeDatabase::ensureTablesExist(){
 | 
				
			||||||
	this->executeSQL("CREATE TABLE IF NOT EXISTS recipe("
 | 
						this->executeSQL("CREATE TABLE IF NOT EXISTS recipe("
 | 
				
			||||||
					 "recipeId INTEGER PRIMARY KEY,"
 | 
										 "recipeId INTEGER PRIMARY KEY,"
 | 
				
			||||||
					 "name varchar UNIQUE,"
 | 
										 "name varchar UNIQUE,"
 | 
				
			||||||
 | 
										 "authorName varchar,"
 | 
				
			||||||
					 "createdDate date,"
 | 
										 "createdDate date,"
 | 
				
			||||||
					 "prepTime time,"
 | 
										 "prepTime time,"
 | 
				
			||||||
					 "cookTime time,"
 | 
										 "cookTime time,"
 | 
				
			||||||
| 
						 | 
					@ -475,18 +523,19 @@ void RecipeDatabase::ensureTablesExist(){
 | 
				
			||||||
					 "FOREIGN KEY (ingredientId) REFERENCES ingredient(ingredientId),"
 | 
										 "FOREIGN KEY (ingredientId) REFERENCES ingredient(ingredientId),"
 | 
				
			||||||
					 "FOREIGN KEY (recipeId) REFERENCES recipe(recipeId),"
 | 
										 "FOREIGN KEY (recipeId) REFERENCES recipe(recipeId),"
 | 
				
			||||||
					 "FOREIGN KEY (unitName) REFERENCES unitOfMeasure(name));");
 | 
										 "FOREIGN KEY (unitName) REFERENCES unitOfMeasure(name));");
 | 
				
			||||||
	this->executeSQL("COMMIT;");
 | 
						this->commitTransaction();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Recipe RecipeDatabase::readFromResultTable(ResultTable t, int tRow){
 | 
					Recipe RecipeDatabase::readFromResultTable(ResultTable t, int tRow){
 | 
				
			||||||
	Recipe r;
 | 
						Recipe r;
 | 
				
			||||||
	TableRow row = t.rows().at(tRow);
 | 
						TableRow row = t.rows().at(tRow);
 | 
				
			||||||
	int id = std::stoi(row.at(0));
 | 
						int id = std::stoi(row.at(0));											//id
 | 
				
			||||||
	r.setName(row.at(1));
 | 
						r.setName(row.at(1));													//Name
 | 
				
			||||||
	r.setCreatedDate(QDate::fromString(QString::fromStdString(row.at(2))));
 | 
						r.setAuthor(row.at(2));													//author
 | 
				
			||||||
	r.setPrepTime(QTime::fromString(QString::fromStdString(row.at(3))));
 | 
						r.setCreatedDate(QDate::fromString(QString::fromStdString(row.at(3))));	//createdDate
 | 
				
			||||||
	r.setCookTime(QTime::fromString(QString::fromStdString(row.at(4))));
 | 
						r.setPrepTime(QTime::fromString(QString::fromStdString(row.at(4))));	//prepTime
 | 
				
			||||||
	r.setServings(std::stof(row.at(5)));
 | 
						r.setCookTime(QTime::fromString(QString::fromStdString(row.at(5))));	//cookTime
 | 
				
			||||||
 | 
						r.setServings(std::stof(row.at(6)));									//servings
 | 
				
			||||||
	r.setInstruction(FileUtils::loadInstruction(id));
 | 
						r.setInstruction(FileUtils::loadInstruction(id));
 | 
				
			||||||
	r.setImage(FileUtils::loadImage(id));
 | 
						r.setImage(FileUtils::loadImage(id));
 | 
				
			||||||
	r.setIngredients(this->retrieveRecipeIngredients(id));
 | 
						r.setIngredients(this->retrieveRecipeIngredients(id));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -49,6 +49,10 @@ class RecipeDatabase : public Database
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		//Updating.
 | 
							//Updating.
 | 
				
			||||||
		bool updateRecipe(Recipe recipe, string originalName);
 | 
							bool updateRecipe(Recipe recipe, string originalName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							//Adding basic information at start.
 | 
				
			||||||
 | 
							bool addBasicUnits();
 | 
				
			||||||
 | 
							bool addBasicIngredients();
 | 
				
			||||||
	private:
 | 
						private:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		//Utility methods.
 | 
							//Utility methods.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,8 @@
 | 
				
			||||||
#include "model/recipe/recipe.h"
 | 
					#include "model/recipe/recipe.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Recipe::Recipe(string name, vector<RecipeIngredient> ingredients, Instruction instruction, QImage image, vector<RecipeTag> tags, QDate createdDate, QTime prepTime, QTime cookTime, float servings){
 | 
					Recipe::Recipe(string name, string author, vector<RecipeIngredient> ingredients, Instruction instruction, QImage image, vector<RecipeTag> tags, QDate createdDate, QTime prepTime, QTime cookTime, float servings){
 | 
				
			||||||
    setName(name);
 | 
					    setName(name);
 | 
				
			||||||
 | 
						setAuthor(author);
 | 
				
			||||||
    setIngredients(ingredients);
 | 
					    setIngredients(ingredients);
 | 
				
			||||||
    setInstruction(instruction);
 | 
					    setInstruction(instruction);
 | 
				
			||||||
    setImage(image);
 | 
					    setImage(image);
 | 
				
			||||||
| 
						 | 
					@ -12,7 +13,7 @@ Recipe::Recipe(string name, vector<RecipeIngredient> ingredients, Instruction in
 | 
				
			||||||
    setServings(servings);
 | 
					    setServings(servings);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Recipe::Recipe() : Recipe::Recipe("", vector<RecipeIngredient>(), Instruction(), QImage(), vector<RecipeTag>(), QDate::currentDate(), QTime(), QTime(), 1.0f){
 | 
					Recipe::Recipe() : Recipe::Recipe("", "", vector<RecipeIngredient>(), Instruction(), QImage(), vector<RecipeTag>(), QDate::currentDate(), QTime(), QTime(), 1.0f){
 | 
				
			||||||
    //Set default values when none are specified.
 | 
					    //Set default values when none are specified.
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,6 +21,10 @@ string Recipe::getName() const{
 | 
				
			||||||
	return this->name;
 | 
						return this->name;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					string Recipe::getAuthor() const{
 | 
				
			||||||
 | 
						return this->authorName;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
vector<RecipeIngredient> Recipe::getIngredients() const{
 | 
					vector<RecipeIngredient> Recipe::getIngredients() const{
 | 
				
			||||||
	return this->ingredients;
 | 
						return this->ingredients;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -74,6 +79,10 @@ void Recipe::setName(string newName){
 | 
				
			||||||
	this->name = newName;
 | 
						this->name = newName;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Recipe::setAuthor(string newName){
 | 
				
			||||||
 | 
						this->authorName = newName;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Recipe::setIngredients(vector<RecipeIngredient> ingredients){
 | 
					void Recipe::setIngredients(vector<RecipeIngredient> ingredients){
 | 
				
			||||||
    this->ingredients = ingredients;
 | 
					    this->ingredients = ingredients;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -111,8 +120,9 @@ void Recipe::setServings(float newServingsCount){
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Recipe::print(){
 | 
					void Recipe::print(){
 | 
				
			||||||
	printf("Recipe: %s, Created on: %s, Prep time: %s, Cook time: %s, Serves: %f\n",
 | 
						printf("Recipe: %s, Created on: %s, by %s, Prep time: %s, Cook time: %s, Serves: %f\n",
 | 
				
			||||||
		   this->name.c_str(),
 | 
							   this->name.c_str(),
 | 
				
			||||||
 | 
							   this->authorName.c_str(),
 | 
				
			||||||
		   this->createdDate.toString().toStdString().c_str(),
 | 
							   this->createdDate.toString().toStdString().c_str(),
 | 
				
			||||||
		   this->prepTime.toString().toStdString().c_str(),
 | 
							   this->prepTime.toString().toStdString().c_str(),
 | 
				
			||||||
		   this->cookTime.toString().toStdString().c_str(),
 | 
							   this->cookTime.toString().toStdString().c_str(),
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,12 +32,13 @@ class Recipe
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    //Full constructor
 | 
					    //Full constructor
 | 
				
			||||||
    Recipe(string name, vector<RecipeIngredient> ingredients, Instruction instruction, QImage image, vector<RecipeTag> tags, QDate createdDate, QTime prepTime, QTime cookTime, float servings);
 | 
						Recipe(string name, string author, vector<RecipeIngredient> ingredients, Instruction instruction, QImage image, vector<RecipeTag> tags, QDate createdDate, QTime prepTime, QTime cookTime, float servings);
 | 
				
			||||||
    //Constructor with default values.
 | 
					    //Constructor with default values.
 | 
				
			||||||
    Recipe();
 | 
					    Recipe();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //Getters
 | 
					    //Getters
 | 
				
			||||||
    string getName() const;
 | 
					    string getName() const;
 | 
				
			||||||
 | 
						string getAuthor() const;
 | 
				
			||||||
    vector<RecipeIngredient> getIngredients() const;
 | 
					    vector<RecipeIngredient> getIngredients() const;
 | 
				
			||||||
	vector<string> getFoodGroups() const;
 | 
						vector<string> getFoodGroups() const;
 | 
				
			||||||
    Instruction getInstruction() const;
 | 
					    Instruction getInstruction() const;
 | 
				
			||||||
| 
						 | 
					@ -52,6 +53,7 @@ public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //Setters
 | 
					    //Setters
 | 
				
			||||||
    void setName(string newName);
 | 
					    void setName(string newName);
 | 
				
			||||||
 | 
						void setAuthor(string newName);
 | 
				
			||||||
    void setIngredients(vector<RecipeIngredient> ingredients);
 | 
					    void setIngredients(vector<RecipeIngredient> ingredients);
 | 
				
			||||||
    void setTags(vector<RecipeTag> tags);
 | 
					    void setTags(vector<RecipeTag> tags);
 | 
				
			||||||
    void addIngredient(RecipeIngredient newIngredient);
 | 
					    void addIngredient(RecipeIngredient newIngredient);
 | 
				
			||||||
| 
						 | 
					@ -66,6 +68,7 @@ public:
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    //Main information.
 | 
					    //Main information.
 | 
				
			||||||
    string name;                                //The name of the recipe.
 | 
					    string name;                                //The name of the recipe.
 | 
				
			||||||
 | 
						string authorName;							//The name of the author of this recipe.
 | 
				
			||||||
    vector<RecipeIngredient> ingredients;       //The list of ingredients in the recipe.
 | 
					    vector<RecipeIngredient> ingredients;       //The list of ingredients in the recipe.
 | 
				
			||||||
    Instruction instruction;                    //The instruction HTML document.
 | 
					    Instruction instruction;                    //The instruction HTML document.
 | 
				
			||||||
    QImage image;                               //An image displayed alongside the recipe.
 | 
					    QImage image;                               //An image displayed alongside the recipe.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue