ClientOS/LevelOS/settings.lua
2025-10-21 00:40:14 +02:00

121 lines
4.5 KiB
Lua

--ccvs = mwm.newCvs() -- config canvas aka settings canvas
btns = {}
function _G.btn(x,y,width,lines)
btns[#btns+1] = {}
thebtn = btns[#btns]
thebtn.x = x
thebtn.y = y
thebtn.w = width
thebtn.h = #lines+2
function thebtn.render(px,py)
if px == nil then
px,py = thebtn.x,thebtn.y
end
thebtn.blit = {{"\151",tostring(lUtils.toBlit(colors.gray)),tostring(lUtils.toBlit(term.getBackgroundColor()))}}
for t=1,thebtn.w-2 do
thebtn.blit[1][1] = thebtn.blit[1][1].."\131"
thebtn.blit[1][2] = thebtn.blit[1][2]..lUtils.toBlit(colors.gray)
thebtn.blit[1][3] = thebtn.blit[1][3]..lUtils.toBlit(term.getBackgroundColor())
end
thebtn.blit[1][1] = thebtn.blit[1][1].."\148"
thebtn.blit[1][2] = thebtn.blit[1][2]..lUtils.toBlit(term.getBackgroundColor())
thebtn.blit[1][3] = thebtn.blit[1][3]..lUtils.toBlit(colors.gray)
for t=1,#lines do
thebtn.blit[t+1] = {"\149",tostring(lUtils.toBlit(colors.gray)),tostring(lUtils.toBlit(term.getBackgroundColor()))}
for w=1,width-2 do
thebtn.blit[t+1][1] = thebtn.blit[t+1][1].." "
if t == 1 then
thebtn.blit[t+1][2] = thebtn.blit[t+1][2]..lUtils.toBlit(term.getTextColor())
else
thebtn.blit[t+1][2] = thebtn.blit[t+1][2]..lUtils.toBlit(colors.lightGray)
end
thebtn.blit[t+1][3] = thebtn.blit[t+1][3]..lUtils.toBlit(term.getBackgroundColor())
end
local thetxt = ""
if string.len(lines[t]) > thebtn.w-2 then
thetxt = string.sub(lines[t],thebtn.w-2)
else
thetxt = lines[t]
end
thebtn.blit[t+1][1] = "\149"..thetxt..string.sub(thebtn.blit[t+1][1],2+string.len(thetxt),string.len(thebtn.blit[t+1][1]))
thebtn.blit[t+1][1] = thebtn.blit[t+1][1].."\149"
thebtn.blit[t+1][2] = thebtn.blit[t+1][2]..tostring(lUtils.toBlit(term.getBackgroundColor()))
thebtn.blit[t+1][3] = thebtn.blit[t+1][3]..lUtils.toBlit(colors.gray)
end
thebtn.blit[#thebtn.blit+1] = {"\138",tostring(lUtils.toBlit(term.getBackgroundColor())),tostring(lUtils.toBlit(colors.gray))}
local tempblit = thebtn.blit[#thebtn.blit]
for t=1,thebtn.w-2 do
tempblit[1] = tempblit[1].."\143"
tempblit[2] = tempblit[2]..lUtils.toBlit(term.getBackgroundColor())
tempblit[3] = tempblit[3]..lUtils.toBlit(colors.gray)
end
tempblit[1] = tempblit[1].."\133"
tempblit[2] = tempblit[2]..lUtils.toBlit(term.getBackgroundColor())
tempblit[3] = tempblit[3]..lUtils.toBlit(colors.gray)
for t=1,#thebtn.blit do
term.setCursorPos(px,py+(t-1))
term.blit(table.unpack(thebtn.blit[t]))
end
end
return thebtn
end
lSettings = {{"Peripherals","Monitors, Speakers,","Printers"},{"Personal Settings","Background, Welcome","Screen"},{"E","Fookin nonsense","aha"},{"Hello","How are you","Mr Valentine"},{"Hey","I am good thank",":)"}}
btnW = 21
btnH = 5
scrl = 0
function setrender(scr) -- settings render, scroll (Y)
if scr == nil then
scr = 0
end
term.setBackgroundColor(colors.black)
term.clear()
local w,h = term.getSize()
term.setCursorPos(math.ceil(w/2)-math.floor(string.len("Settings")/2),2-scr)
term.setTextColor(colors.white)
term.write("Settings")
local cX = math.ceil(w/2)+1
local cY = 4
while cX-(btnW+1) > 1 do
cX = cX-(btnW+1)
end
local OGcX = cX
btns = {}
for t=1,#lSettings do
--term.setCursorPos(cX,cY-scr)
btn(cX,cY-scr,btnW,lSettings[t]).render()
if cX+(btnW*2+2) <= w then
cX = cX+(btnW+1)
else
cX = OGcX
cY = cY+btnH+1
end
end
end
setrender()
local aw,ah = term.getSize()
local ow,oh = aw,ah
while true do
e = {os.pullEvent()}
if e[1] == "mouse_scroll" then
scrl = scrl+e[2]
setrender(scrl)
elseif e[1] == "mouse_click" then
for t=1,#btns do
if e[3] >= btns[t].x and e[4] >= btns[t].y and e[3] <= btns[t].x+(btns[t].w-1) and e[4] <= btns[t].y+(btns[t].h-1) then
term.setCursorPos(1,1)
print("Yey")
term.setBackgroundColor(colors.gray)
btns[t].render(btns[t].x,btns[t].y)
end
end
elseif e[1] == "mouse_up" then
term.setBackgroundColor(colors.black)
setrender(scrl)
end
aw,ah = term.getSize()
if aw ~= ow or ah ~= oh then
setrender(scrl)
ow,oh = aw,ah
end
end
os.sleep(3)