Cobra_Tomtrein-temp-

GlassApi 2.0

Apr 1st, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.72 KB | None | 0 0
  1. -- Dependencies
  2. local event = require("event")
  3. local component = require("component")
  4. local glass = component.openperipheral_bridge
  5. local filesystem = require("filesystem")
  6. local computer = require("computer")
  7. glassApi = {}
  8.  
  9.  
  10. -- Prefabs (do nothing) only for making object functions
  11. local bodyPrefab = {}
  12. local buttonPrefab = {}
  13. local subBodyPrefab = {}
  14. local headerPrefab = {}
  15.  
  16.  
  17. -- Main tables for data
  18. local objects = {}
  19. local apps = {}
  20. local headers = {}
  21. local glassApi = {}
  22. local onClick = {}
  23.  
  24. -- glassApi functions
  25. function glassApi.newBody(_name,_x,_y,_width,_height,_color,_opacity)
  26. local object = {}
  27. setmetatable(object,{__index = bodyPrefab})
  28. local bodyObj = glass.addBox(_x,_y+10,_width,_height,_color,_opacity)
  29. object.body = bodyObj
  30. object.header= object:addHeader(_name,_x,_y,_width)
  31. object.textObjects = {}
  32. object.boxObjects = {}
  33. object.buttonObjects = {}
  34. object.subBodyObjects = {}
  35. objects[object.body.getId()] = object
  36. return object
  37. end
  38.  
  39. function onButton(_object)
  40. local state = (not _object.enabled)
  41. local handler = apps[_object.handler]
  42. local id = _object.id
  43. local box = _object.box
  44. if state then box.setColor(0x00ff00)
  45. else box.setColor(0xff0000) end
  46. if handler.onButton then
  47. handler.onButton(id)
  48. end
  49. end
  50.  
  51.  
  52.  
  53. -- bodyPrefab functions
  54.  
  55. function bodyPrefab:addHeader(_name,_x,_y,_width)
  56. local object = {}
  57. setmetatable(object,{__index = headerPrefab})
  58. object.box = glass.addBox(_x,_y,_width,10,0xb3b3b3,0.5)
  59. object.text = glass.addText(5,-9,_name,0x6600ff)
  60. onclick[object.box.getId()] = {glassApi.drag,self.body.getId}
  61. onclick[object.text.getId()] = {glassApi.drag,self.body.getId}
  62. return object
  63. end
  64.  
  65. function bodyPrefab:addBox(_x,_y,_width,_height,_color,_opacity)
  66. local object = glass.addBox(self.body.getX()+_x,self.body.getY()+_y,_width,_height,_color,_opacity)
  67. self.boxObjects[object.getId()] = object
  68. return object
  69. end
  70.  
  71. function bodyPrefab:addText(_x,_y,_text)
  72. local object = glass.addText(_x,_y,_text)
  73. self.textObjects[object.getId()] = object
  74. return object
  75. end
  76.  
  77. function bodyPrefab:addButton(_x,_y,_text,_handle,_id,_default)
  78. local object = {}
  79. setmetatable(object,{__index = buttonPrefab})
  80. local color = 0xff0000
  81. if _default then color = 0x00ff00 end
  82. object.box = glass.addBox(_x,_y,10,10,color)
  83. object.text = glass.addText(_x + 15,_y,_text)
  84. object.enabled = (_default or false)
  85. object.handler = _handle
  86. object.id = (_id or object.box.getId())
  87. onclick[object.box.getId()] = {glassApi.onButton,object}
  88. self.buttonObjects[object.box.getId()] = object
  89. return object
  90. end
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115. -- TEMP
  116. function glassApi.getApps()
  117. for v in filesystem.list("/home/glassApp/") do
  118. if not (v == "template") then
  119. local temp = dofile("/home/glassApp/"..v)
  120. apps[temp.Id] = temp
  121. temp.setup()
  122. end
  123. end
  124. end
  125.  
  126.  
  127.  
  128.  
  129.  
  130. function glassApi.run()
  131. for i,v in pairs(apps) do
  132. if v.lateSetup then v.lateSetup() end
  133. end
  134. p.sync()
  135. event.timer(2,function() computer.pushSignal("update") end,math.huge)
  136. while true do
  137. tab = {event.pull()}
  138. local isdrag, parentId = isDrag(tab)
  139. if isdrag then
  140. drag(objects[parentId])
  141. elseif tab[1] == "update" then
  142. print("tick tock")
  143. for i,v in pairs(apps) do
  144. if v.update then v.update() end
  145. end
  146. p.sync()
  147. else
  148. print(tab[1])
  149. for i,handler in pairs(apps) do
  150. if handler["on_event_"..tab[1]] then
  151. handler["on_event_"..tab[1]](tab)
  152. end
  153. end
  154. end
  155. end
  156. end
  157.  
  158. glassApi.getApps()
  159. glassApi.run()
  160. return glassApi
  161. --End TEMP
Advertisement
Add Comment
Please, Sign In to add comment