Advertisement
Lanzr

sto_tst

Nov 15th, 2023 (edited)
831
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.18 KB | None | 0 0
  1. local scSide = "left"
  2. local stoSide = "right"
  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.     term.write(winList[inPageIndex][1])
  169.     term.write(winList[inPageIndex][2])
  170.     List_move()
  171.    
  172. end
  173. end
  174. local keyMap = {
  175.     ["end"]=(function ()
  176.         if(inPageIndex < mh and inPageIndex <= listSize) then
  177.             inPageIndex = inPageIndex + 1
  178.             -- LDebug("nowPos "..(pageIndex-1) * mh + inPageIndex,18)
  179.             renewWindow()
  180.         end
  181.     end),
  182.     ["home"]=(function ()
  183.         if(inPageIndex > 1) then
  184.             inPageIndex = inPageIndex - 1
  185.         -- LDebug("nowPos "..(pageIndex-1) * mh + inPageIndex,18)
  186.         renewWindow()
  187.         end
  188.     end),
  189.     ["pageUp"]=(function ()
  190.         if(pageIndex > 1) then
  191.             inPageIndex = 1
  192.             pageIndex = pageIndex - 1
  193.             pageChange()
  194.             renewTopBar()
  195.             renewWindow()
  196.         end
  197.     end),
  198.     ["pageDown"]=(function ()
  199.         if(pageIndex < pageCount) then
  200.             inPageIndex = 1
  201.             pageIndex = pageIndex + 1
  202.             pageChange()
  203.             renewTopBar()
  204.             renewWindow()
  205.         end
  206.     end),
  207. }
  208.  
  209. local function key_check()
  210. while true do
  211.     local event, key, isHeld = os.pullEvent("key")
  212.     local kvalue = keys.getName(key)
  213.     if(keyMap[kvalue]~= nil) then
  214.         keyMap[kvalue]()
  215.         term.setTextColour(colors.white)
  216.         term.setCursorPos(1,18)
  217.     end
  218. end
  219. end
  220. parallel.waitForAny(mainloop,key_check)
  221.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement