Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Button API modifiert - (c) monster010
- local monitor
- local button = {}
- function construct(montor)
- monitor = montor
- end
- function getBtns()
- return button
- end
- function add(name, label, func, fargs, x, y, width, height, bgnormal, bgpressed, color, colorp)
- if not bgnormal then bgnormal = colors.lime end
- if not bgpressed then bgpressed = colors.red end
- if not color then color = colors.white end
- if not colorp then colorp = colors.white end
- button[name] = {}
- button[name]["label"] = label
- button[name]["func"] = func
- button[name]["args"] = fargs
- button[name]["xmin"] = x
- button[name]["ymin"] = y
- button[name]["xmax"] = x + width - 1
- button[name]["ymax"] = y + height - 1
- button[name]["bgn"] = bgnormal
- button[name]["bgp"] = bgpressed
- button[name]["color"] = color
- button[name]["colorp"] = colorp
- button[name]["active"] = false
- end
- function clear()
- button = {}
- end
- function getClick()
- event,side,x,y = os.pullEvent("monitor_touch")
- checkxy(x,y)
- end
- function checkxy(x, y)
- for name, data in pairs(button) do
- if y >= data["ymin"] and y <= data["ymax"] then
- if x >= data["xmin"] and x <= data["xmax"] then
- if not data["args"] then
- data["func"]()
- else
- data["func"](data["args"])
- end
- return true
- end
- end
- end
- return false
- end
- function screen()
- local bgcolor
- local color
- for name, data in pairs(button) do
- if data["active"] == true then
- bgcolor = data["bgp"]
- color = data["colorp"]
- else
- bgcolor = data["bgn"]
- color = data["color"]
- end
- fill(data["label"], bgcolor, color, data)
- end
- end
- function fill(label, bgcolor, color, bData)
- monitor.setBackgroundColor(bgcolor)
- monitor.setTextColor(color)
- local yspot = math.floor((bData["ymin"] + bData["ymax"]) / 2)
- local xspot = math.floor((bData["xmax"] - bData["xmin"] - string.len(label)) / 2) + 1
- for j = bData["ymin"], bData["ymax"] do
- monitor.setCursorPos(bData["xmin"], j)
- if j == yspot then
- for k = 0, bData["xmax"] - bData["xmin"] - string.len(label) + 1 do
- if k == xspot then
- monitor.write(label)
- else
- monitor.write(" ")
- end
- end
- else
- for i = bData["xmin"], bData["xmax"] do
- monitor.write(" ")
- end
- end
- end
- monitor.setBackgroundColor(colors.black)
- monitor.setTextColor(colors.white)
- end
- function set(name, stat, refresh)
- if not refresh then refresh = false end
- button[name]["active"] = stat
- if refresh then
- screen()
- end
- end
- function toggle(name)
- button[name]["active"] = not button[name]["active"]
- screen()
- end
- function flash(name)
- toggle(name)
- sleep(0.15)
- toggle(name)
- end
Advertisement
Add Comment
Please, Sign In to add comment