Create homeplus.spk
This commit is contained in:
parent
63b101a374
commit
1eceddcc43
1 changed files with 736 additions and 0 deletions
736
apps/Ale32bit/homeplus.spk
Normal file
736
apps/Ale32bit/homeplus.spk
Normal file
|
@ -0,0 +1,736 @@
|
|||
--
|
||||
-- sPhone Application Package
|
||||
-- Built with SPK builder 1.2
|
||||
--
|
||||
{
|
||||
files = "{\
|
||||
[ \"paint.lua\" ] = \"-- Paint created by nitrogenfingers (edited by dan200)\\\
|
||||
-- http://www.youtube.com/user/NitrogenFingers\\\
|
||||
\\\
|
||||
------------\\\
|
||||
-- Fields --\\\
|
||||
------------\\\
|
||||
\\\
|
||||
-- The width and height of the terminal\\\
|
||||
local w,h = term.getSize()\\\
|
||||
\\\
|
||||
-- The selected colours on the left and right mouse button, and the colour of the canvas\\\
|
||||
local leftColour, rightColour = colours.white, nil\\\
|
||||
local canvasColour = colours.black\\\
|
||||
\\\
|
||||
-- The values stored in the canvas\\\
|
||||
local canvas = {}\\\
|
||||
\\\
|
||||
-- The menu options\\\
|
||||
local mChoices = { \\\"Save\\\",\\\"Exit\\\" }\\\
|
||||
\\\
|
||||
-- The message displayed in the footer bar\\\
|
||||
local fMessage = \\\"Press Ctrl to access menu\\\"\\\
|
||||
\\\
|
||||
-------------------------\\\
|
||||
-- Initialisation --\\\
|
||||
-------------------------\\\
|
||||
\\\
|
||||
-- Determine if we can even run this\\\
|
||||
if not term.isColour() then\\\
|
||||
print(\\\"Requires an Advanced Computer\\\")\\\
|
||||
return\\\
|
||||
end\\\
|
||||
\\\
|
||||
-- Determines if the file exists, and can be edited on this computer\\\
|
||||
local tArgs = {...}\\\
|
||||
if #tArgs == 0 then\\\
|
||||
print(\\\"Usage: paint <path>\\\")\\\
|
||||
return\\\
|
||||
end\\\
|
||||
local sPath = shell.resolve(tArgs[1])\\\
|
||||
local bReadOnly = fs.isReadOnly(sPath)\\\
|
||||
if fs.exists(sPath) and fs.isDir(sPath) then\\\
|
||||
print(\\\"Cannot edit a directory.\\\")\\\
|
||||
return\\\
|
||||
end\\\
|
||||
\\\
|
||||
term.setBackgroundColor(colors.black)\\\
|
||||
term.clear()\\\
|
||||
\\\
|
||||
---------------\\\
|
||||
-- Functions --\\\
|
||||
---------------\\\
|
||||
\\\
|
||||
local function getCanvasPixel( x, y )\\\
|
||||
if canvas[y] then\\\
|
||||
return canvas[y][x]\\\
|
||||
end\\\
|
||||
return nil\\\
|
||||
end\\\
|
||||
\\\
|
||||
--[[\\\
|
||||
Converts a colour value to a text character\\\
|
||||
params: colour = the number to convert to a hex value\\\
|
||||
returns: a string representing the chosen colour\\\
|
||||
]]\\\
|
||||
local function getCharOf( colour )\\\
|
||||
-- Incorrect values always convert to nil\\\
|
||||
if type(colour) == \\\"number\\\" then\\\
|
||||
local value = math.floor( math.log(colour) / math.log(2) ) + 1\\\
|
||||
if value >= 1 and value <= 16 then\\\
|
||||
return string.sub( \\\"0123456789abcdef\\\", value, value )\\\
|
||||
end\\\
|
||||
end\\\
|
||||
return \\\" \\\"\\\
|
||||
end \\\
|
||||
\\\
|
||||
--[[\\\
|
||||
Converts a text character to colour value\\\
|
||||
params: char = the char (from string.byte) to convert to number\\\
|
||||
returns: the colour number of the hex value\\\
|
||||
]]\\\
|
||||
local tColourLookup = {}\\\
|
||||
for n=1,16 do\\\
|
||||
tColourLookup[ string.byte( \\\"0123456789abcdef\\\",n,n ) ] = 2^(n-1)\\\
|
||||
end\\\
|
||||
local function getColourOf( char )\\\
|
||||
-- Values not in the hex table are transparent (canvas coloured)\\\
|
||||
return tColourLookup[char]\\\
|
||||
end\\\
|
||||
\\\
|
||||
--[[ \\\
|
||||
Loads the file into the canvas\\\
|
||||
params: path = the path of the file to open\\\
|
||||
returns: nil\\\
|
||||
]]\\\
|
||||
local function load(path)\\\
|
||||
-- Load the file\\\
|
||||
if fs.exists(path) then\\\
|
||||
local file = fs.open(sPath, \\\"r\\\")\\\
|
||||
local sLine = file.readLine()\\\
|
||||
while sLine do\\\
|
||||
local line = {}\\\
|
||||
for x=1,w-2 do\\\
|
||||
line[x] = getColourOf( string.byte(sLine,x,x) )\\\
|
||||
end\\\
|
||||
table.insert( canvas, line )\\\
|
||||
sLine = file.readLine()\\\
|
||||
end\\\
|
||||
file.close()\\\
|
||||
end\\\
|
||||
end\\\
|
||||
\\\
|
||||
--[[ \\\
|
||||
Saves the current canvas to file \\\
|
||||
params: path = the path of the file to save\\\
|
||||
returns: true if save was successful, false otherwise\\\
|
||||
]]\\\
|
||||
local function save(path)\\\
|
||||
-- Open file\\\
|
||||
local sDir = string.sub(sPath, 1, #sPath - #fs.getName(sPath))\\\
|
||||
if not fs.exists(sDir) then\\\
|
||||
fs.makeDir(sDir)\\\
|
||||
end\\\
|
||||
\\\
|
||||
local file = fs.open( path, \\\"w\\\" )\\\
|
||||
if not file then\\\
|
||||
return false\\\
|
||||
end\\\
|
||||
\\\
|
||||
-- Encode (and trim)\\\
|
||||
local tLines = {}\\\
|
||||
local nLastLine = 0\\\
|
||||
for y=1,h-1 do\\\
|
||||
local sLine = \\\"\\\"\\\
|
||||
local nLastChar = 0\\\
|
||||
for x=1,w-2 do\\\
|
||||
local c = getCharOf( getCanvasPixel( x, y ) )\\\
|
||||
sLine = sLine .. c\\\
|
||||
if c ~= \\\" \\\" then\\\
|
||||
nLastChar = x\\\
|
||||
end\\\
|
||||
end\\\
|
||||
sLine = string.sub( sLine, 1, nLastChar )\\\
|
||||
tLines[y] = sLine\\\
|
||||
if string.len( sLine ) > 0 then\\\
|
||||
nLastLine = y\\\
|
||||
end\\\
|
||||
end\\\
|
||||
\\\
|
||||
-- Save out\\\
|
||||
for n=1,nLastLine do\\\
|
||||
file.writeLine( tLines[ n ] )\\\
|
||||
end\\\
|
||||
file.close()\\\
|
||||
return true\\\
|
||||
end\\\
|
||||
\\\
|
||||
--[[ \\\
|
||||
Draws colour picker sidebar, the pallette and the footer\\\
|
||||
returns: nil\\\
|
||||
]]\\\
|
||||
local function drawInterface()\\\
|
||||
-- Footer\\\
|
||||
term.setCursorPos(1, h)\\\
|
||||
term.setBackgroundColour(colours.black)\\\
|
||||
term.setTextColour(colours.yellow)\\\
|
||||
term.clearLine()\\\
|
||||
term.write(fMessage)\\\
|
||||
\\\
|
||||
-- Colour Picker\\\
|
||||
for i=1,16 do\\\
|
||||
term.setCursorPos(w-1, i)\\\
|
||||
term.setBackgroundColour( 2^(i-1) )\\\
|
||||
term.write(\\\" \\\")\\\
|
||||
end\\\
|
||||
\\\
|
||||
term.setCursorPos(w-1, 17)\\\
|
||||
term.setBackgroundColour( canvasColour )\\\
|
||||
term.setTextColour( colours.grey )\\\
|
||||
term.write(\\\"\\\\127\\\\127\\\")\\\
|
||||
\\\
|
||||
-- Left and Right Selected Colours\\\
|
||||
for i=18,18 do\\\
|
||||
term.setCursorPos(w-1, i)\\\
|
||||
if leftColour ~= nil then\\\
|
||||
term.setBackgroundColour( leftColour )\\\
|
||||
term.write(\\\" \\\")\\\
|
||||
else\\\
|
||||
term.setBackgroundColour( canvasColour )\\\
|
||||
term.setTextColour( colours.grey )\\\
|
||||
term.write(\\\"\\\\127\\\")\\\
|
||||
end\\\
|
||||
if rightColour ~= nil then\\\
|
||||
term.setBackgroundColour( rightColour )\\\
|
||||
term.write(\\\" \\\")\\\
|
||||
else\\\
|
||||
term.setBackgroundColour( canvasColour )\\\
|
||||
term.setTextColour( colours.grey )\\\
|
||||
term.write(\\\"\\\\127\\\")\\\
|
||||
end\\\
|
||||
end\\\
|
||||
\\\
|
||||
-- Padding\\\
|
||||
term.setBackgroundColour( canvasColour )\\\
|
||||
for i=20,h-1 do\\\
|
||||
term.setCursorPos(w-1, i)\\\
|
||||
term.write(\\\" \\\")\\\
|
||||
end\\\
|
||||
end\\\
|
||||
\\\
|
||||
--[[ \\\
|
||||
Converts a single pixel of a single line of the canvas and draws it\\\
|
||||
returns: nil\\\
|
||||
]]\\\
|
||||
local function drawCanvasPixel( x, y )\\\
|
||||
local pixel = getCanvasPixel( x, y )\\\
|
||||
if pixel then\\\
|
||||
term.setBackgroundColour( pixel or canvasColour )\\\
|
||||
term.setCursorPos(x, y)\\\
|
||||
term.write(\\\" \\\")\\\
|
||||
else\\\
|
||||
term.setBackgroundColour( canvasColour )\\\
|
||||
term.setTextColour( colours.grey )\\\
|
||||
term.setCursorPos(x, y)\\\
|
||||
term.write(\\\"\\\\127\\\")\\\
|
||||
end\\\
|
||||
end\\\
|
||||
\\\
|
||||
--[[ \\\
|
||||
Converts each colour in a single line of the canvas and draws it\\\
|
||||
returns: nil\\\
|
||||
]]\\\
|
||||
local function drawCanvasLine( y )\\\
|
||||
for x = 1, 4 do\\\
|
||||
drawCanvasPixel( x, y )\\\
|
||||
end\\\
|
||||
end\\\
|
||||
\\\
|
||||
--[[ \\\
|
||||
Converts each colour in the canvas and draws it\\\
|
||||
returns: nil\\\
|
||||
]]\\\
|
||||
local function drawCanvas()\\\
|
||||
for y = 1, 3 do\\\
|
||||
drawCanvasLine( y )\\\
|
||||
end\\\
|
||||
end\\\
|
||||
\\\
|
||||
--[[\\\
|
||||
Draws menu options and handles input from within the menu.\\\
|
||||
returns: true if the program is to be exited; false otherwise\\\
|
||||
]]\\\
|
||||
local function accessMenu()\\\
|
||||
-- Selected menu option\\\
|
||||
local selection = 1\\\
|
||||
\\\
|
||||
term.setBackgroundColour(colours.black)\\\
|
||||
while true do\\\
|
||||
-- Draw the menu\\\
|
||||
term.setCursorPos(1,h)\\\
|
||||
term.clearLine()\\\
|
||||
term.setTextColour(colours.white)\\\
|
||||
for k,v in pairs(mChoices) do\\\
|
||||
if selection==k then \\\
|
||||
term.setTextColour(colours.yellow)\\\
|
||||
local ox,_ = term.getCursorPos()\\\
|
||||
term.write(\\\"[\\\"..string.rep(\\\" \\\",#v)..\\\"]\\\")\\\
|
||||
term.setCursorPos(ox+1,h)\\\
|
||||
term.setTextColour(colours.white)\\\
|
||||
term.write(v)\\\
|
||||
term.setCursorPos(term.getCursorPos()+1,h)\\\
|
||||
else\\\
|
||||
term.write(\\\" \\\"..v..\\\" \\\")\\\
|
||||
end\\\
|
||||
end\\\
|
||||
\\\
|
||||
-- Handle input in the menu\\\
|
||||
local id,key = os.pullEvent(\\\"key\\\")\\\
|
||||
if id == \\\"key\\\" then\\\
|
||||
-- S and E are shortcuts\\\
|
||||
if key == keys.s then\\\
|
||||
selection = 1\\\
|
||||
key = keys.enter\\\
|
||||
elseif key == keys.e then\\\
|
||||
selection = 2\\\
|
||||
key = keys.enter\\\
|
||||
end\\\
|
||||
\\\
|
||||
if key == keys.right then\\\
|
||||
-- Move right\\\
|
||||
selection = selection + 1\\\
|
||||
if selection > #mChoices then\\\
|
||||
selection = 1\\\
|
||||
end\\\
|
||||
\\\
|
||||
elseif key == keys.left and selection > 1 then\\\
|
||||
-- Move left\\\
|
||||
selection = selection - 1\\\
|
||||
if selection < 1 then\\\
|
||||
selection = #mChoices\\\
|
||||
end\\\
|
||||
\\\
|
||||
elseif key == keys.enter then\\\
|
||||
-- Select an option\\\
|
||||
if mChoices[selection]==\\\"Save\\\" then \\\
|
||||
if bReadOnly then \\\
|
||||
fMessage = \\\"Access Denied\\\"\\\
|
||||
return false\\\
|
||||
end\\\
|
||||
local success = save(sPath)\\\
|
||||
if success then\\\
|
||||
fMessage = \\\"Saved to \\\"..sPath\\\
|
||||
else\\\
|
||||
fMessage = \\\"Error saving to \\\"..sPath\\\
|
||||
end\\\
|
||||
return false\\\
|
||||
elseif mChoices[selection]==\\\"Exit\\\" then \\\
|
||||
return true\\\
|
||||
end\\\
|
||||
elseif key == keys.leftCtrl or keys == keys.rightCtrl then\\\
|
||||
-- Cancel the menu\\\
|
||||
return false \\\
|
||||
end\\\
|
||||
end\\\
|
||||
end\\\
|
||||
end\\\
|
||||
\\\
|
||||
--[[ \\\
|
||||
Runs the main thread of execution. Draws the canvas and interface, and handles\\\
|
||||
mouse and key events.\\\
|
||||
returns: nil\\\
|
||||
]]\\\
|
||||
local function handleEvents()\\\
|
||||
local programActive = true\\\
|
||||
while programActive do\\\
|
||||
local id,p1,p2,p3 = os.pullEvent()\\\
|
||||
if id==\\\"mouse_click\\\" or id==\\\"mouse_drag\\\" then\\\
|
||||
if p2 >= w-1 and p3 >= 1 and p3 <= 17 then\\\
|
||||
if id ~= \\\"mouse_drag\\\" then\\\
|
||||
-- Selecting an items in the colour picker\\\
|
||||
if p3 <= 16 then\\\
|
||||
if p1==1 then\\\
|
||||
leftColour = 2^(p3-1)\\\
|
||||
else\\\
|
||||
rightColour = 2^(p3-1)\\\
|
||||
end\\\
|
||||
else\\\
|
||||
if p1==1 then\\\
|
||||
leftColour = nil\\\
|
||||
else\\\
|
||||
rightColour = nil\\\
|
||||
end\\\
|
||||
end\\\
|
||||
--drawCanvas()\\\
|
||||
drawInterface()\\\
|
||||
end\\\
|
||||
elseif p2 <= 4 and p3 <= 3 then\\\
|
||||
-- Clicking on the canvas\\\
|
||||
local paintColour = nil\\\
|
||||
if p1==1 then\\\
|
||||
paintColour = leftColour\\\
|
||||
elseif p1==2 then\\\
|
||||
paintColour = rightColour\\\
|
||||
end\\\
|
||||
if not canvas[p3] then\\\
|
||||
canvas[p3] = {}\\\
|
||||
end\\\
|
||||
canvas[p3][p2] = paintColour\\\
|
||||
\\\
|
||||
drawCanvasPixel( p2, p3 )\\\
|
||||
end\\\
|
||||
elseif id==\\\"key\\\" then\\\
|
||||
if p1==keys.leftCtrl or p1==keys.rightCtrl then\\\
|
||||
programActive = not accessMenu()\\\
|
||||
drawInterface()\\\
|
||||
end\\\
|
||||
elseif id==\\\"term_resize\\\" then\\\
|
||||
w,h = term.getSize()\\\
|
||||
drawCanvas()\\\
|
||||
drawInterface()\\\
|
||||
end\\\
|
||||
end\\\
|
||||
end\\\
|
||||
\\\
|
||||
-- Init\\\
|
||||
load(sPath)\\\
|
||||
drawCanvas()\\\
|
||||
drawInterface()\\\
|
||||
\\\
|
||||
-- Main loop\\\
|
||||
handleEvents()\\\
|
||||
\\\
|
||||
-- Shutdown\\\
|
||||
term.setBackgroundColour(colours.black)\\\
|
||||
term.setTextColour(colours.white)\\\
|
||||
term.clear()\\\
|
||||
term.setCursorPos(1,1)\\\
|
||||
\",\
|
||||
[ \"homeplus.lua\" ] = \"\\\
|
||||
--setup\\\
|
||||
if not fs.exists(spk.getDataPath()..\\\"/icons/shellIcon\\\") then\\\
|
||||
local f = spk.open(\\\"icons/shellIcon\\\",\\\"w\\\")\\\
|
||||
f.write(\\\"4fff\\\\nf4ff\\\\n4f44\\\")\\\
|
||||
f.close()\\\
|
||||
end\\\
|
||||
\\\
|
||||
if not fs.exists(spk.getDataPath()..\\\"/config\\\") then\\\
|
||||
local f = spk.open(\\\"config\\\",\\\"w\\\")\\\
|
||||
f.write(\\\"{[1] = {\\\\\\\"Shell\\\\\\\", \\\\\\\"/rom/programs/shell\\\\\\\"},}\\\")\\\
|
||||
f.close()\\\
|
||||
end\\\
|
||||
\\\
|
||||
local iconPos = { --Because i hate math (to rewrite), anyway this is for the standard pocket computer size\\\
|
||||
[1] = {3,2,6,4},\\\
|
||||
[2] = {9,2,12,4},\\\
|
||||
[3] = {15,2,18,4},\\\
|
||||
[4] = {21,2,24,4},\\\
|
||||
[5] = {3,8,6,10},\\\
|
||||
[6] = {9,8,12,10},\\\
|
||||
[7] = {15,8,18,10},\\\
|
||||
[8] = {21,8,24,10},\\\
|
||||
[9] = {3,14,6,16},\\\
|
||||
[10] = {9,14,12,16},\\\
|
||||
[11] = {15,14,18,16},\\\
|
||||
[12] = {21,14,24,16},\\\
|
||||
}\\\
|
||||
\\\
|
||||
local objectsDesktop = {}\\\
|
||||
local objCoords = {}\\\
|
||||
\\\
|
||||
local f = spk.open(\\\"config\\\",\\\"r\\\")\\\
|
||||
local objectsDesktop = textutils.unserialise(f.readAll())\\\
|
||||
f.close()\\\
|
||||
\\\
|
||||
local function getCoords(iconNumber)\\\
|
||||
if iconPos[iconNumber] then\\\
|
||||
local x, y, maxx, maxy\\\
|
||||
x = iconPos[iconNumber][1]\\\
|
||||
y = iconPos[iconNumber][2]\\\
|
||||
maxx = iconPos[iconNumber][3]\\\
|
||||
maxy = iconPos[iconNumber][4]\\\
|
||||
return x,y,maxx,maxy\\\
|
||||
end\\\
|
||||
return false\\\
|
||||
end\\\
|
||||
\\\
|
||||
function getProgram(x,y)\\\
|
||||
for k,v in pairs(objCoords) do\\\
|
||||
local px, py, pex, pey = v[1],v[2],v[3],v[4]\\\
|
||||
if x >= px and y >= py and x <= pex and y <= pey then\\\
|
||||
return objectsDesktop[k][1], objectsDesktop[k][2]\\\
|
||||
end\\\
|
||||
end\\\
|
||||
end\\\
|
||||
\\\
|
||||
local function homeSettings()\\\
|
||||
local menu = {\\\
|
||||
\\\"Add app\\\",\\\
|
||||
\\\"Remove app\\\",\\\
|
||||
}\\\
|
||||
while true do\\\
|
||||
local _, id = sPhone.menu(menu,\\\"Home+\\\",\\\"X\\\")\\\
|
||||
if id == 0 then\\\
|
||||
break\\\
|
||||
elseif id == 1 then\\\
|
||||
local function redraw()\\\
|
||||
term.setBackgroundColor(sPhone.theme[\\\"backgroundColor\\\"])\\\
|
||||
term.setTextColor(sPhone.theme[\\\"text\\\"])\\\
|
||||
term.clear()\\\
|
||||
sPhone.header(\\\"Home+: Add\\\",\\\"X\\\")\\\
|
||||
for k,v in pairs(iconPos) do\\\
|
||||
paintutils.drawFilledBox(v[1],v[2]+1,v[3],v[4]+1,colors.red)\\\
|
||||
end\\\
|
||||
for k, v in pairs(objCoords) do\\\
|
||||
paintutils.drawFilledBox(v[1],v[2]+1,v[3],v[4]+1,colors.lime)\\\
|
||||
end\\\
|
||||
end\\\
|
||||
\\\
|
||||
redraw()\\\
|
||||
local w, h = term.getSize()\\\
|
||||
while true do\\\
|
||||
redraw()\\\
|
||||
local _,_,x,y = os.pullEvent(\\\"mouse_click\\\")\\\
|
||||
if y == 1 and x == w then\\\
|
||||
break\\\
|
||||
else\\\
|
||||
local a = getProgram(x-1,y-1)\\\
|
||||
if not a then\\\
|
||||
for k, v in pairs(iconPos) do\\\
|
||||
if (x >= v[1] and y >= v[2]) and (x <= v[3] and y <= v[4]) then\\\
|
||||
local iconPoss = k\\\
|
||||
term.setBackgroundColor(sPhone.theme[\\\"backgroundColor\\\"])\\\
|
||||
term.setTextColor(sPhone.theme[\\\"text\\\"])\\\
|
||||
term.clear()\\\
|
||||
sPhone.header(\\\"Home+: Add\\\")\\\
|
||||
term.setCursorPos(1,3)\\\
|
||||
visum.align(\\\"center\\\",\\\" Path\\\",false,3)\\\
|
||||
visum.align(\\\"center\\\",\\\" (Blank to cancel)\\\",false,4)\\\
|
||||
term.setCursorPos(2,6)\\\
|
||||
write(\\\"/\\\")\\\
|
||||
local path = read()\\\
|
||||
if path ~= \\\"\\\" then\\\
|
||||
if not fs.exists(\\\"/\\\"..path) then\\\
|
||||
sPhone.winOk(\\\"App not found\\\")\\\
|
||||
return\\\
|
||||
else\\\
|
||||
visum.align(\\\"center\\\",\\\" Name\\\",false,8)\\\
|
||||
term.setCursorPos(2,10)\\\
|
||||
local name = read()\\\
|
||||
local f = spk.open(\\\"config\\\",\\\"r\\\")\\\
|
||||
local ics = textutils.unserialise(f.readAll())\\\
|
||||
f.close()\\\
|
||||
ics[iconPoss] = {name,path}\\\
|
||||
objectsDesktop[iconPoss] = {name,path}\\\
|
||||
local f = spk.open(\\\"config\\\",\\\"w\\\")\\\
|
||||
f.write(textutils.serialize(ics))\\\
|
||||
f.close()\\\
|
||||
sPhone.winOk(\\\"Done!\\\")\\\
|
||||
end\\\
|
||||
end\\\
|
||||
break\\\
|
||||
end\\\
|
||||
end\\\
|
||||
end\\\
|
||||
end\\\
|
||||
end\\\
|
||||
break\\\
|
||||
elseif id == 2 then\\\
|
||||
local function redraw()\\\
|
||||
term.setBackgroundColor(sPhone.theme[\\\"backgroundColor\\\"])\\\
|
||||
term.setTextColor(sPhone.theme[\\\"text\\\"])\\\
|
||||
term.clear()\\\
|
||||
sPhone.header(\\\"Home+: Remove\\\",\\\"X\\\")\\\
|
||||
for k,v in pairs(iconPos) do\\\
|
||||
paintutils.drawFilledBox(v[1],v[2]+1,v[3],v[4]+1,colors.red)\\\
|
||||
end\\\
|
||||
for k, v in pairs(objCoords) do\\\
|
||||
paintutils.drawFilledBox(v[1],v[2]+1,v[3],v[4]+1,colors.lime)\\\
|
||||
end\\\
|
||||
end\\\
|
||||
\\\
|
||||
redraw()\\\
|
||||
local w, h = term.getSize()\\\
|
||||
while true do\\\
|
||||
redraw()\\\
|
||||
local _,_,x,y = os.pullEvent(\\\"mouse_click\\\")\\\
|
||||
if y == 1 and x == w then\\\
|
||||
break\\\
|
||||
else\\\
|
||||
local a = getProgram(x-1,y-1)\\\
|
||||
if a then\\\
|
||||
for k, v in pairs(iconPos) do\\\
|
||||
if (x >= v[1] and y >= v[2]) and (x <= v[3] and y <= v[4]) then\\\
|
||||
local iconPoss = k\\\
|
||||
term.setBackgroundColor(sPhone.theme[\\\"backgroundColor\\\"])\\\
|
||||
term.setTextColor(sPhone.theme[\\\"text\\\"])\\\
|
||||
term.clear()\\\
|
||||
local f = spk.open(\\\"config\\\",\\\"r\\\")\\\
|
||||
local ics = textutils.unserialise(f.readAll())\\\
|
||||
f.close()\\\
|
||||
ics[iconPoss] = nil\\\
|
||||
objectsDesktop[iconPoss] = nil\\\
|
||||
local f = spk.open(\\\"config\\\",\\\"w\\\")\\\
|
||||
f.write(textutils.serialize(ics))\\\
|
||||
f.close()\\\
|
||||
sPhone.winOk(\\\"Done!\\\")\\\
|
||||
end\\\
|
||||
end\\\
|
||||
end\\\
|
||||
end\\\
|
||||
end\\\
|
||||
break\\\
|
||||
end\\\
|
||||
end\\\
|
||||
end\\\
|
||||
\\\
|
||||
local function footer()\\\
|
||||
local menu = {\\\
|
||||
\\\"Settings\\\",\\\
|
||||
\\\"Home+ Settings\\\",\\\
|
||||
\\\"Lock\\\",\\\
|
||||
\\\"Info\\\",\\\
|
||||
\\\"Shutdown\\\",\\\
|
||||
\\\"Reboot\\\",\\\
|
||||
}\\\
|
||||
\\\
|
||||
while true do\\\
|
||||
local name, id = sPhone.menu(menu,\\\"Home\\\",\\\"V\\\")\\\
|
||||
if id == 0 then\\\
|
||||
break\\\
|
||||
elseif id == 1 then\\\
|
||||
shell.run(\\\"/.sPhone/apps/system/settings\\\")\\\
|
||||
break\\\
|
||||
elseif id == 2 then\\\
|
||||
homeSettings()\\\
|
||||
elseif id == 3 then\\\
|
||||
sPhone.login()\\\
|
||||
break\\\
|
||||
elseif id == 4 then\\\
|
||||
shell.run(\\\"/.sPhone/apps/system/info\\\")\\\
|
||||
break\\\
|
||||
elseif id == 5 then\\\
|
||||
os.shutdown()\\\
|
||||
elseif id == 6 then\\\
|
||||
os.reboot()\\\
|
||||
end\\\
|
||||
end\\\
|
||||
end\\\
|
||||
\\\
|
||||
local function redraw()\\\
|
||||
term.setBackgroundColor(sPhone.getTheme(\\\"backgroundColor\\\"))\\\
|
||||
term.setTextColor(sPhone.getTheme(\\\"text\\\"))\\\
|
||||
term.clear()\\\
|
||||
term.setCursorPos(1,1)\\\
|
||||
for k, v in pairs(objectsDesktop) do\\\
|
||||
local x, y,endx,endy = getCoords(k)\\\
|
||||
objCoords[k] = {x,y,endx,endy}\\\
|
||||
local icon = paintutils.loadImage(spk.getDataPath()..\\\"/icons/shellIcon\\\")\\\
|
||||
paintutils.drawImage(icon,x,y)\\\
|
||||
local name, sndName\\\
|
||||
if #v[1] > 5 then\\\
|
||||
term.setCursorPos(endx-3,endy+1)\\\
|
||||
name = string.sub(objectsDesktop[k][1],1,5)\\\
|
||||
sndName = string.sub(objectsDesktop[k][1],6,(10 or #v[1]))\\\
|
||||
else\\\
|
||||
name = objectsDesktop[k][1]\\\
|
||||
term.setCursorPos(endx-3,endy+1)\\\
|
||||
end\\\
|
||||
term.setBackgroundColour(sPhone.getTheme(\\\"backgroundColor\\\"))\\\
|
||||
write(name)\\\
|
||||
if sndName then\\\
|
||||
term.setCursorPos(endx-3,endy+2)\\\
|
||||
write(sndName)\\\
|
||||
end\\\
|
||||
end\\\
|
||||
local w,h = term.getSize()\\\
|
||||
paintutils.drawLine(1,h,w,h,sPhone.getTheme(\\\"header\\\"))\\\
|
||||
term.setTextColor(sPhone.getTheme(\\\"headerText\\\"))\\\
|
||||
term.setCursorPos(12,h)\\\
|
||||
write(\\\"====\\\")\\\
|
||||
term.setCursorPos(w-3,h)\\\
|
||||
write(\\\"^^^\\\")\\\
|
||||
term.setCursorPos(w-6,h)\\\
|
||||
write(\\\"S\\\")\\\
|
||||
end\\\
|
||||
\\\
|
||||
local function main()\\\
|
||||
while true do\\\
|
||||
redraw()\\\
|
||||
local ev = {os.pullEvent()}\\\
|
||||
if ev[1] == \\\"key\\\" and ev[2] == keys.leftAlt then\\\
|
||||
sPhone.inHome = false\\\
|
||||
term.setBackgroundColor(colors.black)\\\
|
||||
term.setTextColor(colors.white)\\\
|
||||
term.clear()\\\
|
||||
term.setCursorPos(1,1)\\\
|
||||
sleep(0.1)\\\
|
||||
shell.run(\\\"/rom/programs/shell\\\")\\\
|
||||
sPhone.inHome = true\\\
|
||||
elseif ev[1] == \\\"mouse_click\\\" then\\\
|
||||
local x, y = ev[3], ev[4]\\\
|
||||
local w,h = term.getSize()\\\
|
||||
if y == h then\\\
|
||||
if x >= 12 and x <= 15 then\\\
|
||||
sPhone.inHome = false\\\
|
||||
sleep(0.1)\\\
|
||||
shell.run(\\\"/.sPhone/apps/appList\\\")\\\
|
||||
sPhone.inHome = true\\\
|
||||
elseif x == w-6 then\\\
|
||||
sPhone.inHome = false\\\
|
||||
term.setBackgroundColor(colors.black)\\\
|
||||
term.setTextColor(colors.white)\\\
|
||||
term.clear()\\\
|
||||
term.setCursorPos(1,1)\\\
|
||||
sleep(0.1)\\\
|
||||
shell.run(\\\"/.sPhone/apps/store\\\")\\\
|
||||
sPhone.inHome = true\\\
|
||||
elseif x <= w-1 and x >= w-3 then\\\
|
||||
sPhone.inHome = false\\\
|
||||
footer()\\\
|
||||
sPhone.inHome = true\\\
|
||||
end\\\
|
||||
else\\\
|
||||
local appName, appPath = getProgram(x,y)\\\
|
||||
if appName then\\\
|
||||
if fs.exists(appPath) then\\\
|
||||
sPhone.inHome = false\\\
|
||||
term.setBackgroundColor(colors.black)\\\
|
||||
term.setTextColor(colors.white)\\\
|
||||
term.clear()\\\
|
||||
term.setCursorPos(1,1)\\\
|
||||
sleep(0.1)\\\
|
||||
shell.run(appPath)\\\
|
||||
sPhone.inHome = true\\\
|
||||
end\\\
|
||||
end\\\
|
||||
end\\\
|
||||
end\\\
|
||||
end\\\
|
||||
end\\\
|
||||
\\\
|
||||
local function clockUpdate()\\\
|
||||
local w,h = term.getSize()\\\
|
||||
while true do\\\
|
||||
if sPhone.inHome then\\\
|
||||
term.setCursorBlink(false)\\\
|
||||
term.setBackgroundColor(sPhone.theme[\\\"header\\\"])\\\
|
||||
term.setTextColor(sPhone.theme[\\\"headerText\\\"])\\\
|
||||
term.setCursorPos(1,h)\\\
|
||||
write(\\\" \\\")\\\
|
||||
term.setCursorPos(1,h)\\\
|
||||
write(\\\" \\\"..textutils.formatTime(os.time(),true))\\\
|
||||
end\\\
|
||||
sleep(0)\\\
|
||||
end\\\
|
||||
end\\\
|
||||
\\\
|
||||
parallel.waitForAll(main,clockUpdate)\\\
|
||||
\",\
|
||||
}",
|
||||
config = "{\
|
||||
type = \"home\",\
|
||||
name = \"Home+\",\
|
||||
version = 1,\
|
||||
main = \"homeplus.lua\",\
|
||||
id = \"ale32bit.homeplus\",\
|
||||
author = \"Ale32bit\",\
|
||||
hidden = true,\
|
||||
}",
|
||||
}
|
Loading…
Reference in a new issue