Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Dependencies
- local event = require("event")
- local component = require("component")
- local glass = component.openperipheral_bridge
- local filesystem = require("filesystem")
- local computer = require("computer")
- glassApi = {}
- -- Prefabs (do nothing) only for making object functions
- local bodyPrefab = {}
- local buttonPrefab = {}
- local subBodyPrefab = {}
- local headerPrefab = {}
- -- Main tables for data
- local objects = {}
- local apps = {}
- local headers = {}
- local glassApi = {}
- local onClick = {}
- -- glassApi functions
- function glassApi.newBody(_name,_x,_y,_width,_height,_color,_opacity)
- local object = {}
- setmetatable(object,{__index = bodyPrefab})
- local bodyObj = glass.addBox(_x,_y+10,_width,_height,_color,_opacity)
- object.body = bodyObj
- object.header= object:addHeader(_name,_x,_y,_width)
- object.textObjects = {}
- object.boxObjects = {}
- object.buttonObjects = {}
- object.subBodyObjects = {}
- objects[object.body.getId()] = object
- return object
- end
- function onButton(_object)
- local state = (not _object.enabled)
- local handler = apps[_object.handler]
- local id = _object.id
- local box = _object.box
- if state then box.setColor(0x00ff00)
- else box.setColor(0xff0000) end
- if handler.onButton then
- handler.onButton(id)
- end
- end
- -- bodyPrefab functions
- function bodyPrefab:addHeader(_name,_x,_y,_width)
- local object = {}
- setmetatable(object,{__index = headerPrefab})
- object.box = glass.addBox(_x,_y,_width,10,0xb3b3b3,0.5)
- object.text = glass.addText(5,-9,_name,0x6600ff)
- onclick[object.box.getId()] = {glassApi.drag,self.body.getId}
- onclick[object.text.getId()] = {glassApi.drag,self.body.getId}
- return object
- end
- function bodyPrefab:addBox(_x,_y,_width,_height,_color,_opacity)
- local object = glass.addBox(self.body.getX()+_x,self.body.getY()+_y,_width,_height,_color,_opacity)
- self.boxObjects[object.getId()] = object
- return object
- end
- function bodyPrefab:addText(_x,_y,_text)
- local object = glass.addText(_x,_y,_text)
- self.textObjects[object.getId()] = object
- return object
- end
- function bodyPrefab:addButton(_x,_y,_text,_handle,_id,_default)
- local object = {}
- setmetatable(object,{__index = buttonPrefab})
- local color = 0xff0000
- if _default then color = 0x00ff00 end
- object.box = glass.addBox(_x,_y,10,10,color)
- object.text = glass.addText(_x + 15,_y,_text)
- object.enabled = (_default or false)
- object.handler = _handle
- object.id = (_id or object.box.getId())
- onclick[object.box.getId()] = {glassApi.onButton,object}
- self.buttonObjects[object.box.getId()] = object
- return object
- end
- -- TEMP
- function glassApi.getApps()
- for v in filesystem.list("/home/glassApp/") do
- if not (v == "template") then
- local temp = dofile("/home/glassApp/"..v)
- apps[temp.Id] = temp
- temp.setup()
- end
- end
- end
- function glassApi.run()
- for i,v in pairs(apps) do
- if v.lateSetup then v.lateSetup() end
- end
- p.sync()
- event.timer(2,function() computer.pushSignal("update") end,math.huge)
- while true do
- tab = {event.pull()}
- local isdrag, parentId = isDrag(tab)
- if isdrag then
- drag(objects[parentId])
- elseif tab[1] == "update" then
- print("tick tock")
- for i,v in pairs(apps) do
- if v.update then v.update() end
- end
- p.sync()
- else
- print(tab[1])
- for i,handler in pairs(apps) do
- if handler["on_event_"..tab[1]] then
- handler["on_event_"..tab[1]](tab)
- end
- end
- end
- end
- end
- glassApi.getApps()
- glassApi.run()
- return glassApi
- --End TEMP
Advertisement
Add Comment
Please, Sign In to add comment