Advertisement
i6_quadcore

manage

Feb 22nd, 2025
257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.52 KB | None | 0 0
  1. local utils = require("utils")
  2.  
  3. return function(basalt, parentFrame, cookbook, toRecipe)
  4.     local frame = parentFrame:addFrame()
  5.  
  6.     local cookbookLabel = label(frame, "Saved recipes", 3, 2)
  7.  
  8.     local cookbookList = frame
  9.         :addList()
  10.         :setPosition(3, 3)
  11.         :setSize(30, 15)
  12.         :setBackground(colors.black)
  13.         :setForeground(colors.white)
  14.         :setSelectionColor(colors.white, colors.black)
  15.  
  16.     local detailLabel = label(frame, "Details", 35, 2)
  17.  
  18.     local detailDisplay = frame
  19.         :addLabel()
  20.         :setText("")
  21.         :setPosition(35, 3)
  22.         :setSize(15, 11)
  23.         :setBackground(colors.black)
  24.         :setForeground(colors.white)
  25.  
  26.     local confirmDelete = false
  27.     function deleteRecipe()
  28.         if confirmDelete then
  29.             confirmDelete = false
  30.             local removeIndex = cookbookList:getItemIndex()
  31.             if (removeIndex == nil) then return end
  32.            
  33.             local removeItem = cookbookList:getItem(removeIndex)
  34.             cookbook[removeItem.text] = nil
  35.             saveCookbook(cookbook)
  36.  
  37.             cookbookList:removeItem(removeIndex)
  38.             if (removeIndex - 1 == cookbookList:getItemCount()) then removeIndex = removeIndex - 1 end
  39.             cookbookList:selectItem(removeIndex)
  40.             removeToast()
  41.  
  42.             detailDisplay:setText(recipeTexts[cookbookList:getItem(removeIndex).text])
  43.         else
  44.             confirmDelete = true
  45.             toast(frame, "Double click to confirm deletion.", colors.black)
  46.         end
  47.     end
  48.  
  49.     function editRecipe()
  50.         local editIndex = cookbookList:getItemIndex()
  51.         if (editIndex == nil) then return end
  52.         local editItem = cookbookList:getItem(editIndex).text
  53.         toRecipe(editItem, cookbook[editItem])
  54.     end
  55.  
  56.  
  57.     local editButton = label(frame, "  Edit recipe  ", 3, 17)
  58.         :setPosition(35, 15)
  59.         :setBackground(colors.gray)
  60.         :setForeground(colors.blue)
  61.         :onClick(editRecipe)
  62.  
  63.     local deleteButton = label(frame, " Delete recipe ", 3, 17)
  64.         :setPosition(35, 17)
  65.         :setBackground(colors.gray)
  66.         :setForeground(colors.red)
  67.         :onClick(deleteRecipe)
  68.  
  69.     function summarizeRecipe(recipe)
  70.         local result = ""
  71.  
  72.         local ingredients = tally(recipe.pattern)
  73.  
  74.         for _, pair in ipairs(ingredients) do
  75.             item, count = table.unpack(pair)
  76.             local delim = item:find(":")
  77.             if delim ~= nil then
  78.                 item = item:sub(delim+1, #item)
  79.             end
  80.             result = result..string.format("%d %s, ", count, item)
  81.         end
  82.         result = result:sub(1, #result-2):gsub("_", " ")
  83.  
  84.         result = result..string.format("; yields %d", recipe.count)
  85.         return result
  86.     end
  87.  
  88.     local recipeTexts = nil
  89.  
  90.     function reload()
  91.         if cookbook == nil then return end
  92.  
  93.         cookbookList:clear()
  94.         recipeTexts = {}
  95.  
  96.         for item, recipe in pairs(cookbook) do
  97.             recipeTexts[item] = summarizeRecipe(recipe)
  98.             cookbookList:addItem(item)
  99.         end
  100.    
  101.         cookbookList:onSelect(function(self, event, item)
  102.             confirmDelete = false
  103.             removeToast()
  104.             detailDisplay:setText(recipeTexts[item.text])
  105.         end)
  106.    
  107.         local firstIndex = cookbookList:getItemIndex()
  108.         if (firstIndex ~= nil) then
  109.             detailDisplay:setText(recipeTexts[cookbookList:getItem(firstIndex).text])
  110.         end
  111.     end
  112.  
  113.     reload()
  114.  
  115.     return frame, reload
  116. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement