Advertisement
NanoBob

NanoButtonAPI - 2

Dec 20th, 2014
311
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.28 KB | None | 0 0
  1. local idleColor=256
  2. local activatedColor=8192
  3. local backgroundColor=32768
  4. local textColor=1
  5. local buttons={}
  6. local monitor=nil
  7. local debugMode=false
  8. local monitorSide=nil
  9.  
  10. function addButton(x,y,width,height,text,toRunFunction,toggle,relative,idleColor,activeColor,textColor)
  11.     if monitor==nil then
  12.         if debugMode==true then
  13.             print("Monitor is not yet defined! Use setMonitorSide(side)")
  14.         end
  15.         return false,"Monitor is not yet defined! Use setMonitorSide(side)"
  16.     elseif x==nil or y==nil or width==nil or height==nil or text==nil then
  17.         if debugMode==true then
  18.             print("Not all required arguments are specified.")
  19.         end
  20.         return false,"Not all required arguments are specified."
  21.     else
  22.         buttonID=#buttons+1
  23.         if string.len(text)>width and relative~=true then
  24.             text=string.sub(text,0,width)
  25.         elseif string.len(text)>width*screenx then
  26.             text=string.sub(text,0,width*screenx)
  27.         end
  28.         buttons[buttonID]={['x']=x,['y']=y,['width']=width,['height']=height,['text']=text,['active']=false,['function']=toRunFunction,['toggle']=toggle,['relative']=relative,['activeColor']=activeColor,['idleColor']=idleColor,['textColor']=textColor}
  29.         drawAllButtons{}
  30.         return buttonID
  31.     end
  32. end
  33.  
  34. function removeButton(buttonID)
  35.     if monitor==nil then
  36.         if debugMode==true then
  37.             print("Monitor is not yet defined! Use setMonitorSide(side)")
  38.         end
  39.         return false,"Monitor is not yet defined! Use setMonitorSide(side)"
  40.     else
  41.         if buttonID==nil then
  42.             if debugMode==true then
  43.                 print("Not all required arguments are specified.")
  44.             end
  45.             return false,"Not all required arguments are specified."
  46.         else
  47.             if buttons[buttonID]==nil then
  48.                 if debugMode==true then
  49.                     print("That button ID does not correspond with a button!")
  50.                 end
  51.                 return false,"That button ID does not correspond with a button!"
  52.             else
  53.                 buttons[buttonID]={"Removed"}
  54.             end
  55.         end
  56.     end
  57. end
  58.  
  59.  
  60. function drawAllButtons()
  61.     if monitor==nil then
  62.         if debugMode==true then
  63.             print("Monitor is not yet defined! Use setMonitorSide(side)")
  64.         end
  65.         return false,"Monitor is not yet defined! Use setMonitorSide(side)"
  66.     else
  67.         monitor.setBackgroundColor(backgroundColor)
  68.         monitor.clear()
  69.         for buttonID,buttonInfo in pairs(buttons) do
  70.             local x=buttonInfo['x']
  71.             local y=buttonInfo['y']
  72.             local width=buttonInfo['width']
  73.             local height=buttonInfo['height']
  74.             if buttonInfo['relative']==true then
  75.                 x=math.floor(x*screenx+0.5)
  76.                 y=math.floor(y*screeny+0.5)
  77.                 width=math.floor(width*screenx+0.5)
  78.                 height=math.floor(height*screeny+0.5)
  79.             end
  80.             monitor.setCursorPos(x,y)
  81.             if buttonInfo['active']==true then 
  82.                 if buttonInfo['activeColor']==nil then
  83.                     monitor.setBackgroundColor(activatedColor)
  84.                 else
  85.                     monitor.setBackgroundColor(buttonInfo['activeColor'])
  86.                 end
  87.             else
  88.                 if buttonInfo['idleColor']==nil then
  89.                     monitor.setBackgroundColor(idleColor)
  90.                 else
  91.                     monitor.setBackgroundColor(buttonInfo['idleColor'])
  92.                 end
  93.             end
  94.             for i=0,height-1 do
  95.                 monitor.setCursorPos(x,y+i)
  96.                 for i=1,width do
  97.                     monitor.write(" ")
  98.                 end
  99.             end
  100.             if buttonInfo['textColor']==nil then
  101.                 monitor.setTextColor(textColor)
  102.             else
  103.                 monitor.setTextColor(buttonInfo['textColor'])
  104.             end
  105.             stringX=x+(width/2-string.len(buttonInfo['text'])/2)
  106.             stringY=y+(math.floor(height)/2)
  107.             monitor.setCursorPos(stringX,stringY)
  108.             monitor.write(buttonInfo['text'])
  109.         end
  110.     end
  111. end
  112.  
  113. function getButtonInfo(buttonID)
  114.     if monitor==nil then
  115.         if debugMode==true then
  116.             print("Monitor is not yet defined! Use setMonitorSide(side)")
  117.         end
  118.         return false,"Monitor is not yet defined! Use setMonitorSide(side)"
  119.     else
  120.         if buttonID==nil then
  121.             if debugMode==true then
  122.                 print("Not all required arguments are specified.")
  123.             end
  124.             return false,"Not all required arguments are specified."
  125.         else
  126.             if buttons[buttonID]==nil then
  127.                 if debugMode==true then
  128.                     print("That button ID does not correspond with a button!")
  129.                 end
  130.                 return false,"That button ID does not correspond with a button!"
  131.             else
  132.                 if debugMode==true then
  133.                     for infoID,info in pairs(buttons[buttonID]) do
  134.                         if type(info)=="boolean" then
  135.                             if info==false then
  136.                                 info="false"
  137.                             else
  138.                                 info="true"
  139.                             end
  140.                         elseif type(info)=="function" then
  141.                             info="function"
  142.                         end
  143.                             print(infoID.." :"..info)
  144.                        
  145.                     end
  146.                 end
  147.                 return buttons[buttonID]
  148.             end
  149.         end
  150.     end
  151. end
  152.  
  153. function setButtonInfo(buttonID,infoID,info)
  154.     if monitor==nil then
  155.         if debugMode==true then
  156.             print("Monitor is not yet defined! Use setMonitorSide(side)")
  157.         end
  158.         return false,"Monitor is not yet defined! Use setMonitorSide(side)"
  159.     else
  160.         if buttonID==nil then
  161.             if debugMode==true then
  162.                 print("Not all required arguments are specified.")
  163.             end
  164.             return false,"Not all required arguments are specified."
  165.         else
  166.             if buttons[buttonID]==nil then
  167.                 if debugMode==true then
  168.                     print("That button ID does not correspond with a button!")
  169.                 end
  170.                 return false,"That button ID does not correspond with a button!"
  171.             else
  172.                 buttons[buttonID][infoID]=info
  173.             end
  174.         end
  175.     end
  176. end
  177.  
  178. function run()
  179.     event,side,clickX,clickY=os.pullEvent()
  180.     if event=="monitor_touch" then
  181.         for buttonID,buttonInfo in pairs(buttons) do
  182.             local x=buttonInfo['x']
  183.             local y=buttonInfo['y']
  184.             local width=buttonInfo['width']
  185.             local height=buttonInfo['height']
  186.             if buttonInfo['relative']==true then
  187.                 x=math.floor(x*screenx+0.5)
  188.                 y=math.floor(y*screeny+0.5)
  189.                 width=math.floor(width*screenx+0.5)
  190.                 height=math.floor(height*screeny+0.5)
  191.             end
  192.             if debugMode==true then
  193.                 print("Pos:"..x..","..y)
  194.             end
  195.             if clickX>x and clickX<x+width and clickY>y and clickY<y+height then
  196.                 if debugMode==true then
  197.                     print("Clicked :"..buttonID)
  198.                 end
  199.                 if buttonInfo['toggle']==true then
  200.                     buttonInfo['active']=not buttonInfo['active']
  201.                     if buttonInfo['active']==true then
  202.                         buttonInfo['function'](true)
  203.                     else
  204.                         buttonInfo['function'](false)
  205.                     end
  206.                     drawAllButtons()
  207.                 else
  208.                     buttonInfo['function']()
  209.                     buttonInfo['active']=true
  210.                     drawAllButtons()
  211.                     sleep(0.5)
  212.                     if buttonInfo~=nil then
  213.                         buttonInfo['active']=false
  214.                     end
  215.                     drawAllButtons()
  216.                 end
  217.                
  218.             end
  219.         end
  220.     elseif event=="monitor_resize" then
  221.         if side==monitorSide then
  222.             setMonitorSide(side)
  223.             drawAllButtons()
  224.         end
  225.     end
  226. end
  227.  
  228. --[[
  229. function updateButtonPositions()
  230.     for buttonID,buttonInfo in pairs(buttons) do
  231.         if buttonInfo['relative']==true then
  232.             x=
  233.             y=
  234.             width=
  235.             height=
  236.             x=math.floor(x*screenx+0.5)
  237.             y=math.floor(y*screeny+0.5)
  238.             width=math.floor(width*screenx+0.5)
  239.             height=math.floor(height*screeny+0.5)
  240.         end    
  241.     end
  242. end
  243. ]]
  244.  
  245. function setMonitorSide(side)
  246.     if side==nil then
  247.         if debugMode==true then
  248.             print("Not all required arguments are specified.")
  249.         end
  250.         return false,"Not all required arguments are specified."
  251.     else
  252.         monitor=peripheral.wrap(side)
  253.         screenx,screeny=monitor.getSize()
  254.         monitorSide=side
  255.     end
  256. end
  257.  
  258. function setDebugMode(bool)
  259.     if bool==nil then
  260.         if debugMode==true then
  261.             print("Not all required arguments are specified.")
  262.         end
  263.         return false,"Not all required arguments are specified."
  264.     else
  265.         debugMode=bool
  266.     end
  267. end
  268.  
  269. function setIdleColor(color)
  270.     if color==nil then
  271.         if debugMode==true then
  272.             print("Not all required arguments are specified.")
  273.         end
  274.         return false,"Not all required arguments are specified."
  275.     else
  276.         idleColor=color
  277.         drawAllButtons()
  278.     end
  279. end
  280.  
  281. function setActiveColor(color)
  282.     if color==nil then
  283.         if debugMode==true then
  284.             print("Not all required arguments are specified.")
  285.         end
  286.         return false,"Not all required arguments are specified."
  287.     else
  288.         activatedColor=color
  289.         drawAllButtons()
  290.     end
  291. end
  292.  
  293. function setBackgroundColor(color)
  294.     if color==nil then
  295.         if debugMode==true then
  296.             print("Not all required arguments are specified.")
  297.         end
  298.         return false,"Not all required arguments are specified."
  299.     else
  300.         backgroundColor=color
  301.         drawAllButtons()
  302.     end
  303. end
  304.  
  305. function setTextColor(color)
  306.     if color==nil then
  307.         if debugMode==true then
  308.             print("Not all required arguments are specified.")
  309.         end
  310.         return false,"Not all required arguments are specified."
  311.     else
  312.         textColor=color
  313.         drawAllButtons()
  314.     end
  315. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement