Exemple #1
0
    def select_menu_modal(self):
        search = searchBar.searchBar(key='-MODAL-SEARCH-', api=self.model.get('MenuAPI'), length=20, searchbutton=False)
        layout = [
            [search],
            [sg.Button('Open', key="-MODAL-OPEN-"),
             sg.Button('Add New', key="-MODAL-NEW-"),
             sg.Button('Cancel', key="-MODAL-CANCEL-")]
        ]

        window = sg.Window('Select Menu', layout, finalize=True, modal=True)
        new = False

        while True:
            event, values = window.read()

            if search.handle(event, values):
                continue
            if event in (sg.WIN_CLOSED, "-MODAL-CANCEL-"):
                break
            elif event == "-MODAL-NEW-":
                new = True
                break
            elif event == "-MODAL-OPEN-":
                menu = values[search.sbox_key]
                menu = self.model.get('MenuAPI').lookup(menu)
                self.model.set('activeMenu', value=menu)
                self.model.set('activeMenuDay', value=menu.getDay(0))
                break

        window.close()

        if new:
            self.new_menu_modal()
Exemple #2
0
 def createRecipeTable(self):
     rowCount, colCount = self.recTableDim
     # Acquire data
     # note, the ingredients and directions are left off due to the number of columns
     # header = recipe.pretty_fields[:colCount]
     recs = self.model.get('RecipeAPI').recipes(first=0, count=rowCount)
     data = []
     for rec in recs:
         recInfo = rec.guts()
         temp = []
         for col in self.features:
             temp.append(recInfo[col])
         data.append(temp)
     # allData = [self.header, *data]
     self.tableData = recs
     # self.master.tableData = recs
     self.recTable = sg.Table(
         data,
         headings=self.header,
         num_rows=rowCount,
         enable_events=True,
         col_widths=[24, 4, 4, 20, 9, 6],
         auto_size_columns=False,
         key=self.tableKey,
         tooltip=
         "This is a table of your recipes, search options are above, and clicking on a recipe will open it in the editor"
     )
     # col = sg.Column(layout = tab, scrollable=True)
     # self.master.expands['xy'].append(self.recTable)
     self.search = searchBar.searchBar(key='RECIPE',
                                       api=self.model.get('RecipeAPI'))
     # tooltip="Enter the recipe title you are looking for")
     layout = [[
         sg.T('Sort By'),
         sg.Combo(default_value='None',
                  values=['None', 'Title', 'Category', 'Rating'],
                  key='-TABLE-SORT-',
                  tooltip="Choose which field to sort the next search by",
                  disabled=True),
         sg.Button('Add New Recipe',
                   key='-ADDNEW-',
                   tooltip="Click here for a blank new recipe")
     ], [
         self.search,
     ], [self.recTable]]
     # return sg.Column(layout=layout,expand_x=True,expand_y=True,justification='center')
     return layout
Exemple #3
0
    def add_recipe(self):
        search = searchBar.searchBar(key='-MODAL-SEARCH-', api=self.model.get('RecipeAPI'), length=40, searchbutton=False, getID=True)
        layout = [
            [search],
            [sg.T('Add To: '),
             sg.T(self.model.get('activeMenuDay').date),
             sg.T('Menu: '),
             sg.T(self.model.get('activeMenu').getName())],
            [sg.T('Recipe Mulitiplier: '),
             sg.Combo(values=[f'{i}' for i in np.arange(.5,5,.5)], key='-MODAL-MULTBY-',
                     default_value='1')],
            [sg.T('Under Section: '),
             sg.Combo(values=list(self.model.get('activeMenuDay').data.keys()),
                      key='-MODAL-GROUP-', default_value='other')],
            [sg.Button('Add', key="-MODAL-ADD-"),
             sg.Button('Cancel', key="-MODAL-CANCEL-")]
        ]

        window = sg.Window('Select Menu', layout, finalize=True, modal=True)
        # load active recipe into search bar

        while True:
            event, values = window.read()

            if search.handle(event, values):
                continue
            if event in (sg.WIN_CLOSED, "-MODAL-CANCEL-"):
                break

            elif event == "-MODAL-ADD-":
                rec = self.model.get('RecipeAPI').lookup(recID=values[search.sbox_key])
                date = self.model.get('activeMenuDay').date
                group = values['-MODAL-GROUP-']
                mult = values['-MODAL-MULTBY-']
                try:
                    self.model.get('activeMenu').addRecipe(rec=rec*mult, date=date, group=group)
                except:
                    logger.debug('Error occured during addRecipe function')
                    sg.PopupError('An error has occured. Recipe not added.')
                    break
                self.model.notifyOberservers('activeMenuDay')
                break

        window.close()
Exemple #4
0
    def recipeTable(self):
        """This is the table view, it displays the database, and allows searching
        the database"""
        rowCount, colCount = self.recTableDim
        # Acquire data
        # note, the ingredients and directions are left off due to the number of columns
        header = recipe.pretty_fields[:colCount]
        recs = self.db.recipes(first=0, count=rowCount)
        data = []
        for rec in recs:
            recInfo = rec.guts()
            temp = []
            for col in header:
                temp.append(recInfo[col])
            data.append(temp)
        allData = [header, *data]

        # print(data)
        # Combine into one dataframe
        # pad allData with blank rows if there's not enough data

        # Content Window holds all the table elements
        tableFrame = tk.Frame(master=self)
        resizeSetup(tableFrame, rows=2, cols=1)

        search = searchBar(master=tableFrame,
                           func=lambda query: self.searchdb(query))
        search.grid(row=0, column=0, sticky=N + E + S + W)

        tableCallback = lambda fullData, **kwargs: self.fillFields(fullData)
        self.recTable = table(master=tableFrame,
                              rows=rowCount + 1,
                              cols=colCount,
                              data=allData,
                              innerWidget=tk.Button,
                              header=True,
                              style='alternating',
                              buttonCallback=tableCallback,
                              fullData=[header, *recs])
        self.recTable.grid(row=1, column=0, sticky=N + E + S + W)
        return tableFrame
Exemple #5
0
    def layout_init(self):
        simpleFields = [field for field in recipe.pretty_fields]
        simpleFields.remove('Ingredients')
        simpleFields.remove('Directions')
        simpleInputs = [
            self.labeledEntry('Title'),
            [
                *self.labeledEntry('Prep Time', size=(5, 1)),
                *self.labeledEntry('Cook Time', size=(5, 1)),
                *self.labeledEntry('Yield', size=(10, 1)),
                *self.labeledEntry('Rating', size=(5, 1))
            ], [
                *self.labeledEntry('Category', size=(40, 1)),
            ],
            [
                *self.labeledEntry('Source'),
                sg.Button('AutoFill', key="-AUTOFILL-", disabled=True)
            ]
        ]
        # self.master.recFields = {field: simpleInputs[field][1] for field in simpleFields}

        # data = [['BLANK']*3 for i in range(3)]
        data = []

        self.ingTable = sg.Table(data,
                                 num_rows=5,
                                 headings=['Food', 'Company', 'Ingredients'],
                                 col_widths=[8, 20, 20],
                                 auto_size_columns=False,
                                 key=self.ingTableKey,
                                 enable_events=True)
        # self.master.expands['x'].append(self.ingTable)

        dir = sg.Multiline(key='-Directions-BOX-', size=(60, 10))
        # self.master.expands['xy'].append(dir)
        # self.master.recFields['Directions'] = dir

        # ing = sg.Multiline(key='-Ingredients-BOX-', size=(60,10))
        self.ing = sg.Table([],
                            headings=['Name', 'ID', 'Amount', 'Units'],
                            col_widths=[24, 8, 6, 10],
                            num_rows=10,
                            auto_size_columns=False,
                            key=self.recIngKey,
                            enable_events=True)
        # self.master.expands['xy'].append(ing)
        # self.master.recFields['Ingredients'] = ing

        # addbox = [sg.T('Amount'), sg.In(key='-AMOUNT-')]
        # self.master.expands['x'].append(addbox)
        self.search = searchBar.searchBar(key='INGREDIENT',
                                          api=self.model.get('RecipeAPI'),
                                          interactive=False)
        layout = [
            [
                sg.Button('New', key='-NEW-RECIPE-'),
                sg.Button('Delete Recipe',
                          key='-DELETE-RECIPE-',
                          disabled=True),
                sg.Button('View Recipe', key='-VIEW-RECIPE-', disabled=True),
                sg.Button('Save', key='-SAVE-RECIPE-', disabled=True)
            ],
            *simpleInputs,
            [sg.T('Directions')],
            [dir],
            [sg.T('Ingredients')],
            [self.search],
            [self.ingTable],
            # [*addbox, sg.Button('Add',key='-ADD-INGREDIENT-')],
            [self.ing]
        ]

        # col = sg.Column(layout=layout,expand_x=True,expand_y=True,justification='center')
        # self.master.expands['xy'].append(col)
        return layout
Exemple #6
0
    def ingFrame(self, master, rowCount=3, colCount=3):
        """This is a helper function for recView, it creates the ingredient adder section"""

        # content frame
        holder = tk.Frame(master=master)
        resizeSetup(holder, rows=3, cols=1)

        # search area
        # search = tk.Frame(master=holder)
        search = searchBar(master=holder)

        search.grid(row=0, column=0, sticky=N + E + W)

        # option selector
        options = tk.Frame(master=holder)
        resizeSetup(options, rows=6, cols=colCount + 2)
        options.grid(row=1, column=0, sticky=N + E + S + W)

        # Buttons (Right of option table)
        # Up/Down buttons to scroll through options
        up = tk.Button(master=options, text='More')
        up.grid(row=1, column=colCount + 1, sticky=N + E + S + W)
        down = tk.Button(master=options, text='Back')
        down.grid(row=2, column=colCount + 1, sticky=N + E + S + W)

        # amount field
        amount = tk.Entry(master=options)
        amount.grid(row=4, column=colCount + 1, sticky=N + E + S + W)

        # add button
        add = tk.Button(master=options, text='Add')
        add.grid(row=5, column=colCount + 1, sticky=N + E + S + W)

        blanks = [['[BLANK]'] * colCount for i in range(rowCount)]
        self.optionsTable = table(master=options,
                                  rows=rowCount,
                                  cols=colCount,
                                  data=blanks,
                                  innerWidget=tk.Button,
                                  buttonCallback=lambda row, col, **kw: self.
                                  activateRow(self.optionsTable, row, col))
        self.optionsTable.grid(row=0,
                               column=0,
                               rowspan=6,
                               columnspan=colCount,
                               sticky=N + E + S + W)
        search.addFunc(func=lambda query, **kw: self.getIngResults(
            self.optionsTable, query, **kw))
        up['command'] = lambda: search.search(newQuery=False, up=True)
        down['command'] = lambda: search.search(newQuery=False, up=False)
        # current ingredients
        current = tk.Frame(master=holder)
        resizeSetup(current, rows=1, cols=1)
        current.grid(row=2, column=0, sticky=N + E + S + W)
        currentText = tk.Text(master=current, height=10, width=60)
        currentText.grid(row=0, column=0, sticky=N + E + S + W)
        self.recFields['Ingredients'] = currentText

        add["command"] = lambda: self.addIng(amount, currentText)

        return holder