Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local utils = require("utils")
- return function(basalt, parentFrame, cookbook, toRecipe)
- local frame = parentFrame:addFrame()
- local cookbookLabel = label(frame, "Saved recipes", 3, 2)
- local cookbookList = frame
- :addList()
- :setPosition(3, 3)
- :setSize(30, 15)
- :setBackground(colors.black)
- :setForeground(colors.white)
- :setSelectionColor(colors.white, colors.black)
- local detailLabel = label(frame, "Details", 35, 2)
- local detailDisplay = frame
- :addLabel()
- :setText("")
- :setPosition(35, 3)
- :setSize(15, 11)
- :setBackground(colors.black)
- :setForeground(colors.white)
- local confirmDelete = false
- function deleteRecipe()
- if confirmDelete then
- confirmDelete = false
- local removeIndex = cookbookList:getItemIndex()
- if (removeIndex == nil) then return end
- local removeItem = cookbookList:getItem(removeIndex)
- cookbook[removeItem.text] = nil
- saveCookbook(cookbook)
- cookbookList:removeItem(removeIndex)
- if (removeIndex - 1 == cookbookList:getItemCount()) then removeIndex = removeIndex - 1 end
- cookbookList:selectItem(removeIndex)
- removeToast()
- detailDisplay:setText(recipeTexts[cookbookList:getItem(removeIndex).text])
- else
- confirmDelete = true
- toast(frame, "Double click to confirm deletion.", colors.black)
- end
- end
- function editRecipe()
- local editIndex = cookbookList:getItemIndex()
- if (editIndex == nil) then return end
- local editItem = cookbookList:getItem(editIndex).text
- toRecipe(editItem, cookbook[editItem])
- end
- local editButton = label(frame, " Edit recipe ", 3, 17)
- :setPosition(35, 15)
- :setBackground(colors.gray)
- :setForeground(colors.blue)
- :onClick(editRecipe)
- local deleteButton = label(frame, " Delete recipe ", 3, 17)
- :setPosition(35, 17)
- :setBackground(colors.gray)
- :setForeground(colors.red)
- :onClick(deleteRecipe)
- function summarizeRecipe(recipe)
- local result = ""
- local ingredients = tally(recipe.pattern)
- for _, pair in ipairs(ingredients) do
- item, count = table.unpack(pair)
- local delim = item:find(":")
- if delim ~= nil then
- item = item:sub(delim+1, #item)
- end
- result = result..string.format("%d %s, ", count, item)
- end
- result = result:sub(1, #result-2):gsub("_", " ")
- result = result..string.format("; yields %d", recipe.count)
- return result
- end
- local recipeTexts = nil
- function reload()
- if cookbook == nil then return end
- cookbookList:clear()
- recipeTexts = {}
- for item, recipe in pairs(cookbook) do
- recipeTexts[item] = summarizeRecipe(recipe)
- cookbookList:addItem(item)
- end
- cookbookList:onSelect(function(self, event, item)
- confirmDelete = false
- removeToast()
- detailDisplay:setText(recipeTexts[item.text])
- end)
- local firstIndex = cookbookList:getItemIndex()
- if (firstIndex ~= nil) then
- detailDisplay:setText(recipeTexts[cookbookList:getItem(firstIndex).text])
- end
- end
- reload()
- return frame, reload
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement