OC-KittenOS/code/apps/app-control.lua

234 lines
6.0 KiB
Lua

-- This is released into the public domain.
-- No warranty is provided, implied or otherwise.
-- app-control: Settings changer
local settings = neo.requireAccess("x.neo.sys.manage", "management")
local globals = neo.requireAccess("x.neo.pub.globals", "gbm")
local event = require("event")(neo)
local neoux, err = require("neoux")
if not neoux then error(err) end
neoux = neoux(event, neo)
local running = true
local mainGen
local currentGen
local window
local function returner()
currentGen = mainGen
window.reset(currentGen())
end
local function scrGen()
local tx = {}
local elems = {
}
local y = 1
for k, v in ipairs(globals.getKnownMonitors()) do
table.insert(tx, v[1]:sub(1, 16) .. "..." )
table.insert(tx, "")
table.insert(elems, neoux.tcbutton(21, y, "max", function (w)
globals.changeMonitorSetup(v[1], 320, 200, 32, v[6])
globals.forceRescan()
end))
local cw, ch = v[3], v[4]
table.insert(elems, neoux.tcfield(1, y + 1, 5, function (tx)
if tx then cw = math.max(0, math.floor(tonumber(tx) or 0)) end
return tostring(cw)
end))
table.insert(elems, neoux.tcfield(6, y + 1, 5, function (tx)
if tx then ch = math.max(0, math.floor(tonumber(tx) or 0)) end
return tostring(ch)
end))
table.insert(elems, neoux.tcbutton(12, y + 1, "set", function (w)
globals.changeMonitorSetup(v[1], math.max(cw, 1), math.max(ch, 1), v[5], v[6])
globals.forceRescan()
end))
local nx = 8
if v[5] == 8 then
nx = 4
elseif v[5] == 4 then
nx = 1
end
table.insert(elems, neoux.tcbutton(18, y + 1, v[5] .. "b", function (w)
globals.changeMonitorSetup(v[1], v[3], v[4], nx, v[6])
globals.forceRescan()
end))
local tm = "ti"
local to = "yes"
if v[6] == "yes" then
tm = "TI"
to = "no"
end
table.insert(elems, neoux.tcbutton(22, y + 1, tm, function (w)
globals.changeMonitorSetup(v[1], v[3], v[4], v[5], to)
globals.forceRescan()
end))
y = y + 2
end
table.insert(elems, neoux.tcrawview(1, 1, tx))
return 25, #tx, nil, neoux.tcwindow(25, #tx, elems, returner, 0xFFFFFF, 0)
end
local function logGen()
local computer = neo.requireAccess("k.computer", "user management")
local tx = {
"Password:",
" (Keep blank to disable.)",
"MC Usernames Allowed:"
}
local users = table.pack(computer.users())
for k, v in ipairs(users) do
tx[k + 3] = " " .. v
end
local workingName = ""
return 25, #tx + 1, nil, neoux.tcwindow(25, #tx + 1, {
neoux.tcrawview(1, 1, tx),
neoux.tcfield(11, 1, 15, function (str)
if str then
settings.setSetting("password", str)
end
return settings.getSetting("password")
end),
neoux.tcfield(1, #tx + 1, 19, function (str)
workingName = str or workingName
return workingName
end),
neoux.tcbutton(20, #tx + 1, "+", function (w)
local ok, err = computer.addUser(workingName)
if not ok then
neoux.startDialog(err)
end
w.reset(logGen())
end),
neoux.tcbutton(23, #tx + 1, "-", function (w)
computer.removeUser(workingName)
w.reset(logGen())
end),
}, returner, 0xFFFFFF, 0)
end
local advPage = 1
local advPlusH = false
local function advAsker(info, def, r, parent)
info = unicode.safeTextFormat(info)
local ww = math.max(25, unicode.len(info))
return function ()
return ww, 2, nil, neoux.tcwindow(ww, 2, {
neoux.tcrawview(1, 1, {info}),
neoux.tcfield(1, 2, ww, function (tx)
def = tx or def
return def
end)
}, function (w)
r(def)
currentGen = parent
w.reset(parent())
end, 0xFFFFFF, 0)
end
end
local function advGen()
local set = settings.listSettings()
table.sort(set)
-- things get complicated here...
local pages = math.max(1, math.ceil(#set / 7))
advPage = math.max(1, math.min(advPage, pages))
local elems = {
neoux.tcbutton(23, 1, "+", function (w)
advPage = advPage + 1
w.reset(advGen())
end),
neoux.tcrawview(4, 1, {neoux.pad(advPage .. " / " .. pages, 14, true, true)}),
neoux.tcbutton(1, 1, "-", function (w)
advPage = advPage - 1
advPlusH = true
w.reset(advGen())
end),
neoux.tcbutton(18, 1, "add", function (w)
currentGen = advAsker("setting ID", "my.setting", function (r)
settings.setSetting(r, "")
end, currentGen)
w.reset(currentGen())
end),
}
local ofs = (advPage - 1) * 7
for i = 1, 7 do
local s = set[i + ofs]
if s then
local tx = s .. "=" .. (settings.getSetting(s) or "")
table.insert(elems, neoux.tcbutton(1, i + 1, unicode.sub(unicode.safeTextFormat(tx), 1, 20), function (w)
currentGen = advAsker(s .. ":", settings.getSetting(s) or "", function (r)
settings.setSetting(s, r)
end, currentGen)
w.reset(currentGen())
end))
table.insert(elems, neoux.tcbutton(23, i + 1, "-", function (w)
settings.delSetting(s)
end))
end
end
local ph
if advPlusH then
advPlusH = false
ph = 3
end
return 25, 8, nil, neoux.tcwindow(25, 8, elems, returner, 0xFFFFFF, 0, ph)
end
function mainGen()
return 25, 8, nil, neoux.tcwindow(25, 8, {
neoux.tcbutton(1, 1, "Screens", function (window)
currentGen = scrGen
window.reset(currentGen())
end),
neoux.tcrawview(2, 2, {
"Size, depth, touchmode."
}),
neoux.tcbutton(1, 3, "Login & Access", function (window)
currentGen = logGen
window.reset(currentGen())
end),
neoux.tcrawview(2, 4, {
"Allowed users, password."
}),
neoux.tcbutton(1, 5, "Advanced Settings", function (window)
advPage = 1
currentGen = advGen
window.reset(currentGen())
end),
neoux.tcrawview(2, 6, {
"The raw settings data."
}),
neoux.tchdivider(1, 7, 25),
neoux.tcbutton(1, 8, "Relog", function (window)
neo.requireAccess("x.neo.sys.session", "Everest session").endSession(true)
end),
neoux.tcbutton(8, 8, "Reboot", function (window)
settings.shutdown(true)
end),
neoux.tcbutton(16, 8, "Shutdown", function (window)
settings.shutdown(false)
end),
}, function ()
window.close()
running = false
end, 0xFFFFFF, 0)
end
currentGen = mainGen
window = neoux.create(currentGen())
while running do
local src, id, k, v = event.pull()
if src == "x.neo.sys.manage" then
if id == "set_setting" then
window.reset(currentGen())
end
end
end