Jump to content
  • Sky
  • Blueberry
  • Slate
  • Blackcurrant
  • Watermelon
  • Strawberry
  • Orange
  • Banana
  • Apple
  • Emerald
  • Chocolate
  • Charcoal
  • 0
Kiirox

About ButtonAPI

Question

Hi, i would like to know how we can do a text that when we touch it execute some code. Thanks for your help!

 

main.lua

local component = require("component")
local event = require("event")
local computer = require("computer")
local gpu = component.gpu
local term = require("term")
 
local version = "1.0"
 
local h, w = gpu.getResolution()
 
API = require("buttonAPI")

local function base()
  gpu.setBackground(0x0000cc)
  gpu.fill(1,1,h,1," ")
  gpu.set((h / 2) - 5,1,"TopiGui v"..version)
  gpu.setBackground(0xcccccc)
  gpu.fill(1,2,h,w, " ")

  while true do
    gpu.setBackground(0x0000cc)
    memoryPercentage = computer.freeMemory() * 100 / computer.totalMemory()
    energyPercentage = computer.energy() * 100 / computer.maxEnergy()
    gpu.set(h / 1.25,1,"RAM: "..string.format(" %2.0f", memoryPercentage).." % Free")
    gpu.set(h / 1.1,1,"Energy: "..string.format(" %2.0f", energyPercentage).." % ") 
    os.sleep(1)
  end
end 

function API.fillTable()
  API.setTable("Exit", exit, 10,20,3,5)
  API.screen()
end

function getClick()
  local _, _, x, y = event.pull(1,touch)
  if x == nil or y == nil then
    local h, w = gpu.getResolution()
    gpu.set(h, w, ".")
    gpu.set(h, w, " ")
  else 
    API.checkxy(x,y)
  end
end

function tor()
  computer.shutdown()
end

base()
API.fillTable() 

while true do
  getClick()
end

buttonAPI.lua

local API = {}
local button={}

local component = require("component")
local colors = require("colors")
local term = require("term")
local mon = component.gpu
local w, h = mon.getResolution()
local Green = 0x00AA00
local Red = 0xAA0000
local Black = 0x000000

buttonStatus = nil

function API.clear()
  mon.setBackground(Black)
  mon.fill(1, 1, w, h, " ")
end

function API.clearTable()
  button = {}
  API.clear()
end
               
function API.setTable(name, func, xmin, xmax, ymin, ymax)
  button[name] = {}
  button[name]["func"] = func
  button[name]["active"] = false
  button[name]["xmin"] = xmin
  button[name]["ymin"] = ymin
  button[name]["xmax"] = xmax
  button[name]["ymax"] = ymax
end

function API.fill(text, color, bData)
  local yspot = math.floor((bData["ymin"] + bData["ymax"]) /2)
  local xspot = math.floor((bData["xmax"] + bData["xmin"] - string.len(text)) /2)+1
  local oldColor = mon.setBackground(color)
  mon.fill(bData["xmin"], bData["ymin"], (bData["xmax"]-bData["xmin"]+1), (bData["ymax"]-bData["ymin"]+1), " ")
  mon.set(xspot, yspot, text)
  mon.setBackground(oldColor)
end
     
function API.screen()
  local currColor
  for name,data in pairs(button) do
    local on = data["active"]
    if on == true then currColor = Green else currColor = Red end
    API.fill(name, currColor, data)
  end
end

function API.toggleButton(name)
  button[name]["active"] = not button[name]["active"]
  buttonStatus = button[name]["active"]
  API.screen()
end     

function API.flash(name,length)
  API.toggleButton(name)
  API.screen()
  os.sleep(length)
  API.toggleButton(name)
  API.screen()
end
                                             
function API.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
        data["func"]()
          return true
      end
    end
  end
  return false
end
     
function API.heading(text)
  w, h = mon.getResolution()
  term.setCursor((w-string.len(text))/2+1, 1)
  term.write(text)
end
     
function API.label(w, h, text)
  term.setCursor(w, h)
  term.write(text)
end

return API

 

Link to post
Share on other sites

1 answer to this question

Recommended Posts

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use and Privacy Policy.