1
0
mirror of https://github.com/20kdc/OC-KittenOS.git synced 2024-11-23 10:58:06 +11:00

Fix app-nbox2018 saving and make app-nprt2018 work, along with some minor modifications all over the place

This commit is contained in:
20kdc 2018-04-22 11:54:47 +01:00
parent 2b15193aa9
commit 1bb8d16298
7 changed files with 183 additions and 13 deletions

View File

@ -6,6 +6,16 @@ The first commit is after I got the installer working again after the new compre
That's what the "SYSTEM HEROES" thing is about.
## Authors
Most code and data here by 20kdc.
Exceptions must be noted in this section, on a per-file basis, including submitted patches.
## About code/README.asc
It exists because it needs to exist.
## Known Issues (That Aren't KittenOS NEO's Fault)
Touch calibration could be off if the setPrecise support mess didn't work properly.

View File

@ -58,6 +58,7 @@ local lIM = 1
-- Stops the main loop
local shuttingDown = false
-- Also used for settings.
local savingThrow = neo.requestAccess("x.neo.sys.manage")
local function suggestAppsStop()
@ -677,7 +678,14 @@ local function key(ku, ka, kc, down)
return
end
if ka == 13 then
if down and (not waitingShutdownCallback) then neo.executeAsync("app-launcher") end return
if down and (not waitingShutdownCallback) then
local lApp = "app-launcher"
if savingThrow then
lApp = savingThrow.getSetting("sys-everest.launcher") or lApp
end
neo.executeAsync(lApp)
end
return
end
end
if focus then
@ -774,10 +782,17 @@ while not shuttingDown do
end
for k, v in ipairs(tags) do
local surf = table.remove(surfaces, v - (k - 1))
if os1 == surf then
os1 = nil
end
updateRegion(surf[1], surf[2], surf[3], surf[4], surf[5], {})
end
checkWSC()
changeFocus(os1)
if os1 then
changeFocus(os1)
else
changeFocus(surfaces[1])
end
end
if s[1] == "x.neo.sys.screens" then
if s[2] == "available" then

View File

@ -183,6 +183,7 @@ donkonitDFProvider(function (pkg, pid, sendSig)
neo.ensurePath(path, prefixWS)
if path:sub(#path, #path) == "/" then error("Expected no / at end") end
local fw, closer = require("sys-filewrap").create(fs.primary, path, mode)
if not fw then return nil, closer end
local oc = fw.close
fw.close = function ()
oc()

View File

@ -347,14 +347,12 @@ newNeoux = function (event, neo)
selectable = true,
key = function (window, update, a, c, d)
if d then
if a == 13 then
return true
elseif a == 8 then
if a == 8 then
local str = textprop()
textprop(unicode.sub(str, 1, unicode.len(str) - 1))
update()
return true
elseif a ~= 0 then
elseif a >= 32 then
textprop(textprop() .. unicode.char(a))
update()
return true

View File

@ -6,7 +6,6 @@
-- program start
local holos = neo.requestAccess("c.hologram")
local icecap = neo.requireAccess("x.neo.pub.base", "filedialogs")
local window = neo.requireAccess("x.neo.pub.window", "window")(40, 13)
local fmttext = require("fmttext")
@ -90,6 +89,12 @@ local programStates = {
elseif kc == 68 then
-- Tint
if selectedBox then tintDigi = 1 programState = "tint" end
elseif ka == 127 or ka == 8 then
-- Delete
if selectedBox then
boxes[state][selectedBox] = nil
selectedBox = nil
end
else
local cc = unicode.char(ka):upper()
if boxes[state][cc] then
@ -243,9 +248,10 @@ local function onRect(x, y, minX, minY, maxX, maxY)
end
local function getPixel(x, y, p)
-- the reason is obvious for plane1, but less so for plane2
-- just consider that without this, the top of the screen would be facing you, but X would remain your left/right
y = 17 - y
if p == 1 then
-- plane 1 uses inverted Y
y = 17 - y
if x == cx and y == cy then
return cursorBlink
end
@ -451,7 +457,7 @@ local function exportBoxes(shapes, st)
v.minX,
v.minY,
v.minZ,
v.minX,
v.maxX,
v.maxY,
v.maxZ,
texture = v.tex,
@ -569,7 +575,7 @@ while true do
if not xyz then
cy = math.min(16, cy + 1)
else
cz = math.max(1, cz - 1)
cz = math.min(16, cz + 1)
end
refresh()
elseif d == 205 then
@ -579,7 +585,7 @@ while true do
if not xyz then
cy = math.max(1, cy - 1)
else
cz = math.min(16, cz + 1)
cz = math.max(1, cz - 1)
end
refresh()
else

View File

@ -1 +1,137 @@
Hello World.
-- This is released into the public domain.
-- No warranty is provided, implied or otherwise.
-- app-nprt2018.lua : 3D printing application
-- Authors: 20kdc
local callerPkg, callerPid, sentModel = ...
local event = require("event")(neo)
local neoux = require("neoux")(event, neo)
local tp = neo.requireAccess("c.printer3d", "")
local running = true
local window, genCurrent
local function regen()
window.reset(genCurrent())
end
local function runModel(mdl, printers, rep)
if not mdl then return end
for _, v in ipairs(printers) do
v.reset()
v.setLabel(mdl.label or "Block")
v.setTooltip(mdl.tooltip or "A 3D-printed block.")
v.setRedstoneEmitter(mdl.emitRedstore or false)
v.setButtonMode(mdl.buttonMode or false)
for _, vs in ipairs(mdl.shapes) do
v.addShape(vs[1], vs[2], vs[3], vs[4], vs[5], vs[6], vs.texture or "", vs.state or false, vs.tint or 0xFFFFFF)
end
v.commit(rep)
end
end
local function gaugeProgress(printers)
local avg = 0
local busy = false
for _, v in ipairs(printers) do
local state, substate = v.status()
if state == "idle" then
avg = avg + 100
else
busy = true
avg = avg + substate
end
end
if not busy then return end
-- if busy, #printers cannot be 0
return math.ceil(avg / #printers)
end
local function engagePS2(printers, rep)
window.close()
local model = sentModel
if not model then
local m = neoux.fileDialog(false)
if m then
model = require("serial").deserialize("return " .. m.read("*a"))
m.close()
end
end
if not model then
genCurrent = genMain
window = neoux.create(genCurrent())
return
end
local percent = 0
genCurrent = function ()
local str = "Printing... " .. percent .. "%"
local tx = "printing"
return #str, 1, tx, function (w, ev, t)
if ev == "close" then
for _, v in ipairs(printers) do
v.reset()
end
end
if ev == "line" then
if t == 1 then
w.span(1, 1, str, 0xFFFFFF, 0)
end
end
end
end
window = neoux.create(genCurrent())
runModel(model, printers, rep)
while true do
percent = gaugeProgress(printers)
if not percent then break end
regen()
event.sleepTo(os.uptime() + 1)
end
window.close()
if sentModel then
running = false
else
genCurrent = genMain
window = neoux.create(genCurrent())
end
end
function genMain()
local rep = 1
local elems = {
neoux.tcrawview(1, 1, {
"Repeats: ",
"Choose Printer: "
}),
neoux.tcfield(9, 1, 7, function (tx)
if tx then rep = math.max(0, math.floor(tonumber(tx) or 0)) end
return tostring(rep)
end)
}
local max = 16
local all = {}
for v in tp.list() do
table.insert(all, v)
local us = unicode.safeTextFormat(v.address)
table.insert(elems, neoux.tcbutton(1, #elems + 1, us, function (w)
engagePS2({v}, rep)
end))
max = math.max(max, unicode.len(us) + 2)
end
table.insert(elems, neoux.tcbutton(1, #elems + 1, "All", function (w)
engagePS2(all, rep)
end))
return max, #elems, nil, neoux.tcwindow(max, #elems, elems, function (w)
running = false
w.close()
end, 0xFFFFFF, 0)
end
genCurrent = genMain
window = neoux.create(genCurrent())
while running do
event.pull()
end

View File

@ -7,6 +7,10 @@ As "*" is used as a part of some of
-- System-wide permissions --
sys-everest.launcher: The launcher
application. If not present, then
app-launcher is used by default.
pub.<anything>: Public settings,
readable and writable by anything
with x.neo.pub.globals access.