# Recipe Maker
# v1.0
#
# Nels Beckman
#
# April 11, 2006
#
# This is a simple GUI application for creating recipes in the RecipeML.
# format. After going through the steps of adding ingredients and steps
# of the directions, if you press output to file, a file browser will
# open up that you can use to specify where the output xml file should
# go.
#
#
#
# Walkthrough of a simple use case:
# 1. Start by filling in the title of the recipe into the Title text entry.
# 2. The name of the first ingredient goes into the Ing text entry block.
# 3. For QTY and UNIT, you might enter 1 and Cup (If there is no unit,
# eg. 1 egg, just leave UNIT empty).
# 4. Hit the 'Add Ingredient' button.
# 5. Repeat this process until all ingredients have been addded.
# 6. For each step of the directions, type that step into the Direction text
# entry field and then hit 'Add Direction.'
# 7. Hit 'Print to File' and navigate to the directory where the file should
# be saved, type in the name, and hit 'Save.'
#
from Tkinter import *
import tkFileDialog
class Ingredient:
def __init__(self, name, qty, unit):
self.name = name
self.qty = qty
if unit is "":
self.unit = None
else:
self.unit = unit
def toString(self):
to_return = "- "+self.name+"
"
to_return += self.qty+""
if self.unit is not None:
to_return +=""+self.unit+""
to_return += "\n"
return to_return
class Direction:
def __init__(self, step):
self.step = step
def toString(self):
to_return = ""+self.step+"\n'
to_return += '\n'
if self.styleSheet is not "":
to_return += '\n'
to_return += '\n'
to_return += ' '+self.title+'\n'
to_return += ' \n'
#print ingredients
for ing in self.ingredients:
to_return += ' '+ing.toString()+'\n'
to_return += ' \n'
to_return += ' \n'
#print steps
for step in self.directions:
to_return += ' '+step.toString()+'\n'
to_return += ' \n'
to_return += ' \n'
to_return += '\n'
return to_return
class NelsGUI:
def __init__(self, master):
self.myRecipe = Recipe()
frame = Frame(master)
frame.pack()
# FUGLY GUI SETUP!! YAY!
self.mainPanel = Frame(frame, bd=2, relief=SUNKEN)
self.mainPanel.pack()
self.subPanel1 = Frame(self.mainPanel)
self.subPanel1.pack()
self.titleLabel = Label(self.subPanel1, text="Title:")
self.titleLabel.pack(side=LEFT)
self.titleEntry = Entry(self.subPanel1)
self.titleEntry.pack(side=LEFT)
self.subPanel2 = Frame(self.mainPanel)
self.subPanel2.pack()
self.styleSheetLabel = Label(self.subPanel2, text="Stylesheet (Optional):")
self.styleSheetLabel.pack(side=LEFT)
self.styleSheetEntry = Entry(self.subPanel2, text="format.xsl")
self.styleSheetEntry.pack(side=LEFT)
self.ingPanel = Frame(frame, bd=2, relief=SUNKEN)
self.ingPanel.pack()
self.ingPanel1 = Frame(self.ingPanel)
self.ingPanel1.pack()
self.ingLabel = Label(self.ingPanel1, text="Ing:")
self.ingLabel.pack(side=LEFT)
self.ingEntry = Entry(self.ingPanel1)
self.ingEntry.pack(side=LEFT)
self.ingPanel2 = Frame(self.ingPanel)
self.ingPanel2.pack()
self.qtyLabel = Label(self.ingPanel2, text="QTY:")
self.qtyLabel.pack(side=LEFT)
self.qtyEntry = Entry(self.ingPanel2, width=2)
self.qtyEntry.pack(side=LEFT)
self.unitLabel = Label(self.ingPanel2, text="UNIT:")
self.unitLabel.pack(side=LEFT)
self.unitEntry = Entry(self.ingPanel2, width=2)
self.unitEntry.pack(side=LEFT)
self.ingButton = Button(self.ingPanel, text="Add Ingredient", command=self.addIng)
self.ingButton.pack()
self.dirPanel = Frame(frame, bd=2, relief=SUNKEN)
self.dirPanel.pack()
self.dirLabel = Label(self.dirPanel, text="Direction:")
self.dirLabel.pack(side=LEFT)
self.dirEntry = Entry(self.dirPanel)
self.dirEntry.pack(side=LEFT)
self.dirButton = Button(self.dirPanel, text="Add Direction", command=self.addStep)
self.dirButton.pack()
self.mainButton = Button(master, text="Print to File", command=self.printToFile)
self.mainButton.pack()
def printToFile(self):
self.myRecipe.setTitle(self.titleEntry.get())
self.myRecipe.setStyleSheet(self.styleSheetEntry.get())
#now get filename
filename = tkFileDialog.asksaveasfilename()
if filename is not "":
myFile = file(filename, mode='w+')
myFile.write(self.myRecipe.toString())
myFile.close()
self.myRecipe = Recipe()
def addIng(self):
if self.ingEntry.get() is "":
return
ing = Ingredient(self.ingEntry.get(), self.qtyEntry.get(), self.unitEntry.get())
self.myRecipe.addIngredient(ing)
self.ingEntry.delete(0, END)
self.qtyEntry.delete(0, END)
self.unitEntry.delete(0, END)
def addStep(self):
if self.dirEntry.get() is "":
return
step = Direction(self.dirEntry.get())
self.myRecipe.addDirection(step)
self.dirEntry.delete(0, END)
root = Tk()
nels_gui = NelsGUI(root)
root.mainloop()