Advertisement
Yorinar

Direwolf20 Button API

Jan 25th, 2015
500
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.30 KB | None | 0 0
  1. -- Yorinar's adaptation of DW20's button code
  2.  
  3. local mon = peripheral.find("monitor")
  4.  
  5. mon.setTextScale(1)
  6. mon.setTextColor(colors.white)
  7. local button = {}
  8. mon.setBackgroundColor(colors.black)
  9.  
  10. local registeredEvents = {}
  11.  
  12. function clearTable()
  13.   button = {}
  14. end
  15.  
  16. function clearRegisteredEvents()
  17.   registeredEvents = {}
  18. end
  19.  
  20. function setButton(name, buttonOn)
  21.   print(name)
  22.   print(button[name]["active"])
  23.   button[name]["active"] = buttonOn
  24.   screen()
  25. end
  26.  
  27. function setTable(name, func, param, xmin, xmax, ymin, ymax)
  28.   button[name] = {}
  29.   button[name]["func"] = func
  30.   button[name]["active"] = false
  31.   button[name]["param"] = param
  32.   button[name]["xmin"] = xmin
  33.   button[name]["ymin"] = ymin
  34.   button[name]["xmax"] = xmax
  35.   button[name]["ymax"] = ymax
  36. end
  37.  
  38. function funcName()
  39.   print("You clicked buttonText")
  40. end
  41.  
  42. function fillTable()
  43.   setTable("ButtonText", funcName, 5, 25, 4, 8)
  44. end
  45.  
  46. function fill(text, color, bData)
  47.   mon.setBackgroundColor(color)
  48.   local yspot = math.floor((bData["ymin"] + bData["ymax"]) /2)
  49.   local xspot = math.floor((bData["xmax"] - bData["xmin"] - string.len(text)) /2) +1
  50.   for j = bData["ymin"], bData["ymax"] do
  51.     mon.setCursorPos(bData["xmin"], j)
  52.     if j == yspot then
  53.       for k = 0, bData["xmax"] - bData["xmin"] - string.len(text) +1 do
  54.         if k == xspot then
  55.           mon.write(text)
  56.         else
  57.           mon.write(" ")
  58.         end
  59.       end
  60.     else
  61.       for i = bData["xmin"], bData["xmax"] do
  62.         mon.write(" ")
  63.       end
  64.     end
  65.   end
  66.   mon.setBackgroundColor(colors.black)
  67. end
  68.  
  69. function screen()
  70.   local currColor
  71.   for name,data in pairs(button) do
  72.     local on = data["active"]
  73.     if on == true then currColor = colors.lime else currColor = colors.red end
  74.     fill(name, currColor, data)
  75.   end
  76. end
  77.  
  78. function toggleButton(name)
  79.   button[name]["active"] = not button[name]["active"]
  80.   screen()
  81. end
  82.  
  83. function flash(name)
  84.   toggleButton(name)
  85.   screen()
  86.   sleep(0.15)
  87.   toggleButton(name)
  88.   screen()
  89. end
  90.  
  91. function checkxy(side, x, y)
  92.   print("side: "..side.." x:"..x.." y:"..y)
  93.   for name, data in pairs(button) do
  94.     if y >= data["ymin"] and y <= data["ymax"] then
  95.       if x >= data["xmin"] and x <= data["xmax"] then
  96.         if data["param"] == "" then
  97.           data["func"]()
  98.         else
  99.           data["func"](data["param"])
  100.         end
  101.  
  102.         return true
  103.       end
  104.     end
  105.   end
  106.  
  107.   return false
  108. end
  109.  
  110. function heading(text)
  111.   w, h = mon.getSize()
  112.   mon.setCursorPos((w-string.len(text))/2+1, 1)
  113.   mon.write(text)
  114. end
  115.  
  116. function label(w, h, text)
  117.   mon.setCursorPos(w, h)
  118.   mon.write(text)
  119. end
  120.  
  121. function addEvent(event, func)
  122.   registeredEvents[event]  = func
  123.   print("registered event: "..event)
  124. end
  125.  
  126. function screenEventLoop()
  127.   local osEventArgs, event, args, rEventFunc
  128.  
  129.   if registeredEvents['monitor_touch'] == nil then
  130.     addEvent('monitor_touch', checkxy)
  131.   end
  132.  
  133.   mon.clear()
  134.   screen()
  135.  
  136.   repeat
  137.     osEventArgs = { os.pullEvent() }
  138.     event = osEventArgs[1]
  139.  
  140.     print("Event: "..event)
  141.  
  142.     args = {}
  143.     for i = 2, #osEventArgs do
  144.       table.insert(args, osEventArgs[i])
  145.     end
  146.  
  147.     if registeredEvents[event] then
  148.       rEventFunc = registeredEvents[event]
  149.       rEventFunc(unpack(args))
  150.     end
  151.  
  152.   until event == 'stop_event_loop'
  153. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement