Advertisement
Lanzr

Storage Broswer

Nov 11th, 2023 (edited)
249
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.10 KB | None | 0 0
  1. local scSide = "top"
  2. local stoSide = "back"
  3.  
  4. local sto = peripheral.wrap(stoSide)
  5. local sc = peripheral.wrap(scSide)
  6. local mw = 51
  7. local mh = 16
  8.  
  9. local topBar = window.create(term.current(),1 ,1 ,mw,1)
  10. local win = window.create(term.current(), 1,2,mw,mh)
  11.  
  12. local pageIndex = 0
  13. local inPageIndex = 0
  14. local pageCount = 0
  15. local itemCount = 0
  16. local listSize = 0
  17.  
  18. local winNormColor = {
  19.     font = colors.black,
  20.     bg = colors.lime
  21. }
  22.  
  23. local winFocusColor = {
  24.     font = colors.gray,
  25.     bg = colors.pink
  26. }
  27.  
  28. topBar.setBackgroundColor(colors.orange)
  29. topBar.setTextColor(colors.white)
  30. win.setBackgroundColor(winNormColor.bg)
  31. win.setTextColor(winNormColor.font)
  32.  
  33. local nList = {}
  34.  
  35. local function LDebug(str,col)
  36.     term.setCursorPos(1,col)
  37.     term.setTextColor(colors.orange)
  38.     term.setBackgroundColor(colors.white)
  39.     term.clearLine()
  40.     term.write(str)
  41. end
  42. local function paraseCMD()
  43.  
  44. end
  45.  
  46. local function renewTopBar()
  47.     local str = string.format("%3d/%3d      size:%d",pageIndex,pageCount,itemCount)
  48.     topBar.clear()
  49.     topBar.setCursorPos(1,1)
  50.     topBar.write(str)
  51. end
  52.  
  53. -- index, name
  54. local winList = {}
  55.  
  56. local function renewWindow()
  57.     win.clear()
  58.     local s = 0
  59.     for i,j in pairs(winList) do
  60.         win.setCursorPos(1,i)
  61.         if(i == inPageIndex) then
  62.             win.setBackgroundColor(winFocusColor.bg)
  63.             win.setTextColor(winFocusColor.font)
  64.             win.clearLine()
  65.         else
  66.             win.setBackgroundColor(winNormColor.bg)
  67.             win.setTextColor(winNormColor.font)
  68.         end
  69.  
  70.         s = string.find(j[2],":")
  71.         win.write(i..string.sub(j[2],s+1))
  72.     end
  73.     win.setBackgroundColor(winNormColor.bg)
  74.     win.setTextColor(winNormColor.font)
  75. end
  76. local function re_count()
  77.     itemCount = table.getn(nList)
  78.     pageCount = (itemCount - itemCount % mh)/mh
  79.     if(itemCount % mh ~= 0) then
  80.         pageCount = pageCount +1
  81.     end
  82. end
  83. local function re_scan()
  84.     tList = sc.list()
  85.     for i,j in pairs(tList) do
  86.         table.insert(nList,{i, j.name})
  87.     end
  88.     for i,j in pairs(nList) do
  89.         if(j[2] == nil ) then
  90.             table.remove(nList,i)
  91.         end
  92.     end
  93.     re_count()
  94.     pageIndex = 1
  95.     inPageIndex = 1
  96. end
  97.  
  98. local function sub_scan()
  99.  
  100. end
  101.  
  102. local function pageChange()
  103.     winList = {}
  104.     local tMod = itemCount % mh
  105.     if (pageIndex == pageCount and tMod ~= 0) then
  106.         listSize = tMod
  107.     else listSize = mh end
  108.     local pos = (pageIndex - 1) * mh
  109.     -- LDebug("listSize "..listSize.."itemCOunt "..itemCount, 19)
  110.     for i=1,listSize,1 do
  111.         repeat
  112.             pos = pos + 1
  113.             if(pos > itemCount) then
  114.                 break
  115.             end
  116.         until(nList[pos]~=nil)
  117.         if(pos > itemCount) then
  118.             break
  119.         end
  120.         table.insert(winList,{nList[pos][1], nList[pos][2]})
  121.     end
  122.     -- LDebug("endPos "..pos,18)
  123.     if(inPageIndex > listSize)then
  124.         inPageIndex = listSize
  125.     end
  126. end
  127.  
  128. local function List_move()
  129.     local pos = winList[inPageIndex][1]
  130.     sc.pushItems(stoSide,pos)
  131.     for i,j in pairs(nList) do
  132.         if(j[1] == pos) then
  133.             table.remove(nList,i)
  134.         end
  135.     end
  136.     -- table.remove(nList,pageIndex * mh + inPageIndex)
  137.  
  138.     re_count()
  139.    
  140.     if(pageIndex >= pageCount) then
  141.         pageIndex = pageCount
  142.         if(inPageIndex <= itemCount % mh) then
  143.             inPageIndex = itemCount % mh
  144.         end
  145.     end
  146.     pageChange()
  147.     renewTopBar()
  148.     renewWindow()
  149. end
  150.  
  151. local function init()
  152.     re_scan()
  153.     -- gen winList
  154.     pageChange()
  155.  
  156.     renewTopBar()
  157.     renewWindow()
  158. end
  159.  
  160. local function mainloop()
  161. term.clear()
  162. init()
  163. while true do
  164.     term.setCursorPos(1,18)
  165.     term.setTextColour(colors.white)
  166.     local cmd = io.read()
  167.     term.clearLine()
  168.     List_move()
  169.    
  170. end
  171. end
  172. local keyMap = {
  173.     ["end"]=(function ()
  174.         if(inPageIndex < mh and inPageIndex < listSize) then
  175.             inPageIndex = inPageIndex + 1
  176.             -- LDebug("nowPos "..(pageIndex-1) * mh + inPageIndex,18)
  177.             renewWindow()
  178.         end
  179.     end),
  180.     ["home"]=(function ()
  181.         if(inPageIndex > 1) then
  182.             inPageIndex = inPageIndex - 1
  183.         -- LDebug("nowPos "..(pageIndex-1) * mh + inPageIndex,18)
  184.         renewWindow()
  185.         end
  186.     end),
  187.     ["pageUp"]=(function ()
  188.         if(pageIndex > 1) then
  189.             inPageIndex = 1
  190.             pageIndex = pageIndex - 1
  191.             pageChange()
  192.             renewTopBar()
  193.             renewWindow()
  194.         end
  195.     end),
  196.     ["pageDown"]=(function ()
  197.         if(pageIndex < pageCount) then
  198.             inPageIndex = 1
  199.             pageIndex = pageIndex + 1
  200.             pageChange()
  201.             renewTopBar()
  202.             renewWindow()
  203.         end
  204.     end),
  205. }
  206.  
  207. local function key_check()
  208. while true do
  209.     local event, key, isHeld = os.pullEvent("key")
  210.     local kvalue = keys.getName(key)
  211.     if(keyMap[kvalue]~= nil) then
  212.         keyMap[kvalue]()
  213.         term.setTextColour(colors.white)
  214.         term.setCursorPos(1,18)
  215.     end
  216. end
  217. end
  218. parallel.waitForAny(mainloop,key_check)
  219.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement