3685 lines
87 KiB
Lua
3685 lines
87 KiB
Lua
local assets = {
|
||
[ "bgwindow.lua" ] = {
|
||
id = 8,
|
||
content = "local sl = shapescape.getSlides()\
|
||
local win = sl[1].win\
|
||
\
|
||
local function draw()\
|
||
local w,h = term.getSize()\
|
||
for y=1,h do\
|
||
term.setCursorPos(1,y)\
|
||
term.blit(win.getLine(y))\
|
||
end\
|
||
end\
|
||
\
|
||
draw()\
|
||
\
|
||
while true do\
|
||
local e = {os.pullEvent()}\
|
||
draw()\
|
||
end",
|
||
name = "bgwindow.lua",
|
||
},
|
||
[ "cancel.lua" ] = {
|
||
id = 16,
|
||
content = "shapescape.exit()",
|
||
name = "cancel.lua",
|
||
},
|
||
[ "viewlist.lua" ] = {
|
||
id = 21,
|
||
content = "local e = {shapescape.getEvent()}\
|
||
local sl = shapescape.getSlides()\
|
||
local scolor = colors.lightGray\
|
||
if e[1] == \"mouse_click\" and lUtils.isInside(e[3],e[4],self) then\
|
||
self.ocolor = self.txtcolor\
|
||
self.txtcolor = scolor\
|
||
elseif e[1] == \"mouse_up\" then\
|
||
if self.txtcolor == scolor and lUtils.isInside(e[3],e[4],self) then\
|
||
sl.rMode = 1\
|
||
sl.config.modes[sl.folder] = nil\
|
||
sl.saveConfig()\
|
||
os.queueEvent(\"explorer_reload\")\
|
||
end\
|
||
if self.ocolor then\
|
||
self.txtcolor = self.ocolor\
|
||
self.ocolor = nil\
|
||
end\
|
||
end\
|
||
if sl.rMode == 1 then\
|
||
self.color = colors.lightGray\
|
||
else\
|
||
self.color = 0\
|
||
end",
|
||
name = "viewlist.lua",
|
||
},
|
||
[ "sidedragthingy.lua" ] = {
|
||
id = 4,
|
||
content = "local drag = false\
|
||
local s = shapescape.getSlide()\
|
||
local sl = shapescape.getSlides()\
|
||
while not sl.config do os.pullEvent() end\
|
||
s.sidebar.x2 = sl.config.sidebar.width\
|
||
self.x1 = s.sidebar.x2-1\
|
||
self.x2 = self.x1+2\
|
||
s.main.x1 = self.x2+1\
|
||
while true do\
|
||
local e = {os.pullEvent()}\
|
||
if e[1] == \"mouse_click\" and lUtils.isInside(e[3],e[4],self) then\
|
||
drag = true\
|
||
elseif e[1] == \"mouse_drag\" and drag then\
|
||
self.x1,self.x2 = e[3]-2,e[3]\
|
||
s.sidebar.x2 = self.x2-1\
|
||
s.main.x1 = self.x2+1\
|
||
elseif e[1] == \"mouse_up\" and drag then\
|
||
sl.config.sidebar.width = s.sidebar.x2\
|
||
sl.saveConfig()\
|
||
drag = false\
|
||
end\
|
||
end",
|
||
name = "sidedragthingy.lua",
|
||
},
|
||
[ "bottombar.lua" ] = {
|
||
id = 11,
|
||
content = "local sl = shapescape.getSlides()\
|
||
local str = {}\
|
||
if sl.files then\
|
||
if #sl.files == 1 then\
|
||
table.insert(str,\"1 item | \")\
|
||
else\
|
||
table.insert(str,#sl.files)\
|
||
table.insert(str,\" items | \")\
|
||
end\
|
||
end\
|
||
if sl.selected then\
|
||
local size = 0\
|
||
local count = 0\
|
||
for k,v in pairs(sl.selected) do\
|
||
if size and not v.isDir then\
|
||
size = size+v.size\
|
||
else\
|
||
size = nil\
|
||
end\
|
||
count = count+1\
|
||
end\
|
||
if count > 0 then\
|
||
if count == 1 then\
|
||
table.insert(str,\"1 item selected\")\
|
||
else\
|
||
table.insert(str,count)\
|
||
table.insert(str,\" items selected\")\
|
||
end\
|
||
if size then\
|
||
table.insert(str,string.format(\" %.1f kB\",math.floor(size/100+0.5)/10))\
|
||
end\
|
||
table.insert(str,\" | \")\
|
||
end\
|
||
end\
|
||
self.txt = table.concat(str)",
|
||
name = "bottombar.lua",
|
||
},
|
||
[ "hPrevious.lua" ] = {
|
||
id = 5,
|
||
content = "local sl = shapescape.getSlides()\
|
||
local e = {shapescape.getEvent()}\
|
||
if not sl.history then return end\
|
||
if e[1] == \"mouse_click\" and lUtils.isInside(e[3],e[4],self) and #sl.history > 1 then\
|
||
self.txtcolor = colors.blue\
|
||
elseif e[1] == \"mouse_up\" and #sl.history > 1 then\
|
||
self.txtcolor = colors.white\
|
||
if lUtils.isInside(e[3],e[4],self) then\
|
||
sl.folder = sl.history[#sl.history-1]\
|
||
table.insert(sl.rhistory,sl.history[#sl.history])\
|
||
sl.history[#sl.history] = nil\
|
||
sl.ofolder = sl.folder\
|
||
end\
|
||
elseif e[1] == \"mouse_move\" and #sl.history > 1 then\
|
||
if e[3] and e[4] and lUtils.isInside(e[3],e[4],self) then\
|
||
self.txtcolor = colors.lightBlue\
|
||
else\
|
||
self.txtcolor = colors.white\
|
||
end\
|
||
end\
|
||
if self.txtcolor ~= colors.blue and self.txtcolor ~= colors.lightBlue then\
|
||
if #sl.history <= 1 then\
|
||
self.txtcolor = colors.gray\
|
||
else\
|
||
self.txtcolor = colors.white\
|
||
end\
|
||
end",
|
||
name = "hPrevious.lua",
|
||
},
|
||
[ "searchrender.lua" ] = {
|
||
id = 3,
|
||
content = "local x,y = term.getCursorPos()\
|
||
term.setBackgroundColor(colors.black)\
|
||
term.setTextColor(colors.gray)\
|
||
lUtils.border(self.x1-1,self.y1-1,self.x2+1,self.y2+1,nil,2)\
|
||
if self.txt == \"\" then\
|
||
term.setCursorPos(self.x1,self.y1)\
|
||
term.setTextColor(colors.gray)\
|
||
term.write(\"Search...\")\
|
||
end\
|
||
term.setCursorPos(x,y)\
|
||
term.setTextColor(colors.white)",
|
||
name = "searchrender.lua",
|
||
},
|
||
[ "hList.lua" ] = {
|
||
id = 12,
|
||
content = "local sl = shapescape.getSlides()\
|
||
local s = shapescape.getSlide()\
|
||
local e = {shapescape.getEvent()}\
|
||
if not sl.history then return end\
|
||
if e[1] == \"mouse_click\" and lUtils.isInside(e[3],e[4],self) and (#sl.history > 1 or #sl.rhistory > 0) then\
|
||
self.txtcolor = colors.blue\
|
||
elseif e[1] == \"mouse_up\" and (#sl.history > 1 or #sl.rhistory > 0) then\
|
||
self.txtcolor = colors.white\
|
||
if lUtils.isInside(e[3],e[4],self) then\
|
||
--[[sl.folder = sl.history[#sl.history-1]\
|
||
table.insert(sl.rhistory,sl.history[#sl.history])\
|
||
sl.history[#sl.history] = nil\
|
||
sl.ofolder = sl.folder]]\
|
||
local opt = {}\
|
||
local function jump(obj)\
|
||
local to = obj.id\
|
||
sl.rhistory = {}\
|
||
sl.history = {}\
|
||
for t=1,#opt do\
|
||
if t < to then\
|
||
table.insert(sl.rhistory,opt[t].file)\
|
||
elseif t >= to then\
|
||
table.insert(sl.history,1,opt[t].file)\
|
||
end\
|
||
end\
|
||
sl.folder = obj.file\
|
||
sl.ofolder = obj.file\
|
||
end\
|
||
for i=1,#sl.rhistory do\
|
||
table.insert(opt,{txt=\" \"..sl.getName(sl.rhistory[i]),file=sl.rhistory[i],action=jump})\
|
||
end\
|
||
table.insert(opt,{txt=\"\\7 \"..sl.getName(sl.history[#sl.history]),file=sl.history[#sl.history],action=jump})\
|
||
for i=#sl.history-1,1,-1 do\
|
||
table.insert(opt,{txt=\" \"..sl.getName(sl.history[i]),file=sl.history[i],action=jump})\
|
||
end\
|
||
for i=1,#opt do\
|
||
opt[i].id = i\
|
||
end\
|
||
lOS.contextmenu(2,self.y2+2,0,opt,{fg=colors.white,bg=colors.gray,txt=colors.white,divider=colors.gray,selected=colors.lightGray},true)\
|
||
end\
|
||
elseif e[1] == \"mouse_move\" and (#sl.history > 1 or #sl.rhistory > 0) then\
|
||
if e[3] and e[4] and lUtils.isInside(e[3],e[4],self) then\
|
||
self.txtcolor = colors.lightBlue\
|
||
else\
|
||
self.txtcolor = colors.white\
|
||
end\
|
||
end\
|
||
if self.txtcolor ~= colors.blue and self.txtcolor ~= colors.lightBlue then\
|
||
if #sl.history <= 1 and #sl.rhistory <= 0 then\
|
||
self.txtcolor = colors.gray\
|
||
else\
|
||
self.txtcolor = colors.white\
|
||
end\
|
||
end",
|
||
name = "hList.lua",
|
||
},
|
||
[ "owtxt.lua" ] = {
|
||
id = 10,
|
||
content = "local sl = shapescape.getSlides()\
|
||
local file = sl.OWfile\
|
||
if file and file.type then\
|
||
self.txt = \"Always use this app for .\"..file.type..\" files\"\
|
||
end",
|
||
name = "owtxt.lua",
|
||
},
|
||
[ "viewicons.lua" ] = {
|
||
id = 22,
|
||
content = "local e = {shapescape.getEvent()}\
|
||
local sl = shapescape.getSlides()\
|
||
local scolor = colors.lightGray\
|
||
if e[1] == \"mouse_click\" and lUtils.isInside(e[3],e[4],self) then\
|
||
self.ocolor = self.txtcolor\
|
||
self.txtcolor = scolor\
|
||
elseif e[1] == \"mouse_up\" then\
|
||
if self.txtcolor == scolor and lUtils.isInside(e[3],e[4],self) then\
|
||
sl.rMode = 2\
|
||
sl.config.modes[sl.folder] = 2\
|
||
sl.saveConfig()\
|
||
os.queueEvent(\"explorer_reload\")\
|
||
end\
|
||
if self.ocolor then\
|
||
self.txtcolor = self.ocolor\
|
||
self.ocolor = nil\
|
||
end\
|
||
end\
|
||
if sl.rMode == 2 then\
|
||
self.color = colors.lightGray\
|
||
else\
|
||
self.color = 0\
|
||
end",
|
||
name = "viewicons.lua",
|
||
},
|
||
[ "select.lua" ] = {
|
||
id = 15,
|
||
content = "local sl = shapescape.getSlides()\
|
||
sl.fpathbox.state = true\
|
||
os.queueEvent(\"key\",keys.enter)",
|
||
name = "select.lua",
|
||
},
|
||
[ "dropdown.lua" ] = {
|
||
id = 13,
|
||
content = "self.txt = \"\"\
|
||
local sl = shapescape.getSlides()\
|
||
if sl.dropdown then\
|
||
lOS.contextmenu(unpack(sl.dropdown))\
|
||
sl.dropdown = nil\
|
||
end",
|
||
name = "dropdown.lua",
|
||
},
|
||
[ "owok.lua" ] = {
|
||
id = 19,
|
||
content = "local s = shapescape.getSlide()\
|
||
local sl = shapescape.getSlides()\
|
||
local e = {shapescape.getEvent()}\
|
||
if s.selected then\
|
||
if e[1] == \"mouse_click\" and lUtils.isInside(e[3],e[4],self) then\
|
||
self.isSel = true\
|
||
elseif e[1] == \"mouse_up\" then\
|
||
if lUtils.isInside(e[3],e[4],self) and self.isSel then\
|
||
self.isSel = false\
|
||
-- run the thang\
|
||
sl.OWprogram = s.selected\
|
||
fTypes = lUtils.asset.load(\"LevelOS/data/formats.lconf\")\
|
||
local t = sl.OWfile.type\
|
||
local p = sl.OWprogram.path\
|
||
if s.checkbox.isOn then\
|
||
local deskIcons = lUtils.asset.load(\"LevelOS/assets/Desktop_Icons.limg\")\
|
||
if not fTypes[t] then\
|
||
fTypes[t] = {name=t:upper()..\"-File\",program=p,contextMenu={{\"Open\"},{p}},openWith={p},icon=deskIcons[4]}\
|
||
else\
|
||
fTypes[t].program = p\
|
||
if fTypes[t].openWith and not sl.locateEntry(fTypes[t].openWith,p) then\
|
||
table.insert(fTypes[t].openWith,1,p)\
|
||
end\
|
||
end\
|
||
lUtils.asset.save(fTypes,\"LevelOS/data/formats.lconf\",false)\
|
||
sl.fullReload = true\
|
||
else\
|
||
if fTypes[t] and fTypes[t].openWith and not sl.locateEntry(fTypes[t].openWith,p) then\
|
||
table.insert(fTypes[t].openWith,p)\
|
||
lUtils.asset.save(fTypes,\"LevelOS/data/formats.lconf\",false)\
|
||
sl.fullReload = true\
|
||
end\
|
||
end\
|
||
s.reset = true\
|
||
sl.OWfile = nil\
|
||
shapescape.setSlide(1)\
|
||
end\
|
||
self.isSel = false\
|
||
end\
|
||
if self.isSel then\
|
||
self.color = colors.black\
|
||
else\
|
||
self.color = colors.gray\
|
||
end\
|
||
self.txtcolor = colors.white\
|
||
else\
|
||
self.color = colors.lightGray\
|
||
self.txtcolor = colors.gray\
|
||
end",
|
||
name = "owok.lua",
|
||
},
|
||
[ "folderUp.lua" ] = {
|
||
id = 7,
|
||
content = "local sl = shapescape.getSlides()\
|
||
local e = {shapescape.getEvent()}\
|
||
if not sl.folder then return end\
|
||
local cPath = sl.split_path(sl.folder)\
|
||
if e[1] == \"mouse_click\" and lUtils.isInside(e[3],e[4],self) and #cPath > 0 then\
|
||
self.txtcolor = colors.blue\
|
||
elseif e[1] == \"mouse_up\" and #cPath > 0 then\
|
||
self.txtcolor = colors.white\
|
||
if lUtils.isInside(e[3],e[4],self) then\
|
||
sl.folder = fs.getDir(sl.folder)\
|
||
end\
|
||
elseif e[1] == \"mouse_move\" and #cPath > 0 then\
|
||
if e[3] and e[4] and lUtils.isInside(e[3],e[4],self) then\
|
||
self.txtcolor = colors.lightBlue\
|
||
else\
|
||
self.txtcolor = colors.white\
|
||
end\
|
||
end\
|
||
if self.txtcolor ~= colors.blue and self.txtcolor ~= colors.lightBlue then\
|
||
if #cPath <= 0 then\
|
||
self.txtcolor = colors.gray\
|
||
else\
|
||
self.txtcolor = colors.white\
|
||
end\
|
||
end",
|
||
name = "folderUp.lua",
|
||
},
|
||
[ "filepathbox.lua" ] = {
|
||
id = 14,
|
||
content = "local sl = shapescape.getSlides()\
|
||
sl.fpathbox = self\
|
||
while true do\
|
||
local e = {os.pullEvent()}\
|
||
if e[1] == \"key\" and e[2] == keys.enter and self.state then\
|
||
local rtbl = {}\
|
||
if self.changed then\
|
||
if not self.txt:find('\"') then\
|
||
table.insert(rtbl,fs.combine(sl.folder,self.txt))\
|
||
else\
|
||
for pth in str:gmatch('\"([^\"]*)\"') do\
|
||
table.insert(rtbl,fs.combine(sl.folder,pth))\
|
||
end\
|
||
end\
|
||
else\
|
||
for k,v in pairs(sl.ret) do\
|
||
table.insert(rtbl,(k))\
|
||
end\
|
||
end\
|
||
shapescape.exit(rtbl)\
|
||
end\
|
||
end",
|
||
name = "filepathbox.lua",
|
||
},
|
||
[ "owlist.lua" ] = {
|
||
id = 17,
|
||
content = "local sl = shapescape.getSlides()\
|
||
local s = shapescape.getSlide()\
|
||
local programs = {}\
|
||
local porder = {}\
|
||
local dIcons = lUtils.asset.load(\"LevelOS/assets/Desktop_Icons.limg\")\
|
||
local function findPrograms(pth)\
|
||
local list = fs.list(pth)\
|
||
local foundProgram = false\
|
||
local folders = {}\
|
||
if pth ~= \"Program_Files\" and fs.exists(fs.combine(pth,\"main.lua\")) then\
|
||
foundProgram = true\
|
||
else\
|
||
for f=1,#list do\
|
||
local pr = fs.combine(pth,list[f])\
|
||
if fs.isDir(pr) then\
|
||
table.insert(folders,pr)\
|
||
elseif lUtils.getFileType(pr) == \".lua\" or lUtils.getFileType(pr) == \"\" then\
|
||
if pth ~= \"Program_Files\" then\
|
||
foundProgram = true\
|
||
break\
|
||
else\
|
||
local p = {path=pr,name=sl.getName(pr)}\
|
||
local ext = lUtils.getFileType(pr)\
|
||
p.name = p.name:sub(1,#p.name-#ext)\
|
||
p.icon = dIcons[3]\
|
||
programs[p.path] = p\
|
||
end\
|
||
end\
|
||
end\
|
||
end\
|
||
if foundProgram then\
|
||
local p = {path=pth,name=sl.getName(pth)}\
|
||
if fs.exists(fs.combine(pth,\"icon.limg\")) then\
|
||
p.icon = lUtils.asset.load(fs.combine(pth,\"icon.limg\"))[1]\
|
||
end\
|
||
programs[p.path] = p\
|
||
else\
|
||
for t=1,#folders do\
|
||
findPrograms(folders[t])\
|
||
end\
|
||
end\
|
||
end\
|
||
local scrollY\
|
||
local mSelect\
|
||
local selected\
|
||
local function generate()\
|
||
programs = {} -- add lua option with lua icon and stuff\
|
||
programs[\"Lua\"] = {name=\"Lua\",path=\"Lua\"}\
|
||
programs[\"rom/programs/edit.lua\"] = {name=\"Edit\",path=\"rom/programs/edit.lua\"} -- add icon here too wait i dont even have one so make one ig\
|
||
local p = {name=\"Paint\",path=\"rom/programs/fun/advanced/paint.lua\"}\
|
||
programs[p.path] = p\
|
||
programs[\"LevelOS/notepad.lua\"] = {name=\"Notepad\",path=\"LevelOS/notepad.lua\",icon={{\"\\159\\159 \",\" \",\"77 \"},{\"\\157\\141\\149\",\"888\",\"77 \"},{\"\\136\\140\\149\",\"778\",\"88 \"}}}\
|
||
findPrograms(\"Program_Files\")\
|
||
porder = {}\
|
||
for k,v in pairs(programs) do\
|
||
table.insert(porder,k)\
|
||
end\
|
||
table.sort(porder,function(a,b) return programs[a].name:lower() < programs[b].name:lower() end)\
|
||
scrollY = 0\
|
||
mSelect = nil\
|
||
selected = nil\
|
||
end\
|
||
local function render()\
|
||
-- idk\
|
||
term.setBackgroundColor(colors.white)\
|
||
term.clear()\
|
||
local y = 1-scrollY\
|
||
local w,h = term.getSize()\
|
||
for k,v in ipairs(porder) do\
|
||
local p = programs[v]\
|
||
if selected == p then\
|
||
term.setBackgroundColor(colors.gray)\
|
||
term.setTextColor(colors.white)\
|
||
elseif mSelect == p then\
|
||
term.setBackgroundColor(colors.lightGray)\
|
||
term.setTextColor(colors.black)\
|
||
else\
|
||
term.setBackgroundColor(colors.white)\
|
||
term.setTextColor(colors.black)\
|
||
end\
|
||
lOS.boxClear(1,y,w,y+2)\
|
||
if p.icon then\
|
||
lUtils.renderImg(p.icon,2,y)\
|
||
else\
|
||
lUtils.renderImg(dIcons[3],2,y)\
|
||
end\
|
||
term.setCursorPos(6,y+1)\
|
||
term.write(p.name)\
|
||
y = y+3\
|
||
end\
|
||
end\
|
||
generate()\
|
||
render()\
|
||
while true do\
|
||
local e = {os.pullEvent()}\
|
||
if s.reset and sl.OWfile then\
|
||
s.reset = false\
|
||
generate()\
|
||
end\
|
||
local w,h = term.getSize()\
|
||
if e[1] == \"mouse_move\" or e[1] == \"mouse_click\" then\
|
||
mSelect = nil\
|
||
end\
|
||
if e[1]:find(\"mouse\") and e[3] and e[4] and lUtils.isInside(e[3],e[4],{x1=1,y1=1,x2=w,y2=h}) then\
|
||
if e[1] == \"mouse_up\" then\
|
||
selected = nil\
|
||
end\
|
||
if e[1] == \"mouse_scroll\" then\
|
||
-- stuff\
|
||
if (e[2] == -1 and scrollY > 0) or (e[2] == 1 and scrollY < (#porder*3-h)) then\
|
||
scrollY = scrollY+e[2]\
|
||
end\
|
||
render()\
|
||
elseif e[1] == \"mouse_click\" or e[1] == \"mouse_move\" or e[1] == \"mouse_up\" then\
|
||
local y = math.ceil((e[4]+scrollY)/3)\
|
||
if porder[y] then\
|
||
local p = programs[porder[y]]\
|
||
if e[1] == \"mouse_up\" and mSelect == p then\
|
||
selected = p\
|
||
elseif e[1] == \"mouse_click\" or e[1] == \"mouse_move\" then\
|
||
mSelect = p\
|
||
end\
|
||
render()\
|
||
end\
|
||
end\
|
||
end\
|
||
if e[1] == \"mouse_up\" then\
|
||
mSelect = nil\
|
||
end\
|
||
s.selected = selected\
|
||
end",
|
||
name = "owlist.lua",
|
||
},
|
||
[ "owcheckbox.lua" ] = {
|
||
id = 18,
|
||
content = "local e = {shapescape.getEvent()}\
|
||
local s = shapescape.getSlide()\
|
||
s.checkbox = self\
|
||
if e[1] == \"mouse_click\" and lUtils.isInside(e[3],e[4],self) then\
|
||
self.isSel = true\
|
||
elseif e[1] == \"mouse_up\" then\
|
||
if lUtils.isInside(e[3],e[4],self) and self.isSel then\
|
||
self.isOn = not self.isOn\
|
||
end\
|
||
self.isSel = false\
|
||
end\
|
||
if self.isSel then\
|
||
self.color = colors.black\
|
||
elseif self.isOn then\
|
||
self.color = colors.green\
|
||
self.border.color = colors.gray\
|
||
else\
|
||
self.color = colors.white\
|
||
self.border.color = colors.lightGray\
|
||
end",
|
||
name = "owcheckbox.lua",
|
||
},
|
||
[ "openwithwhite.lua" ] = {
|
||
id = 9,
|
||
content = "local clickoutside = false\
|
||
local sl = shapescape.getSlides()\
|
||
local s = shapescape.getSlide()\
|
||
while true do\
|
||
local e = {os.pullEvent()}\
|
||
if e[1] == \"mouse_click\" then\
|
||
if lUtils.isInside(e[3],e[4],self) then\
|
||
clickoutside = false\
|
||
else\
|
||
clickoutside = true\
|
||
end\
|
||
elseif e[1] == \"mouse_up\" then\
|
||
if clickoutside and not lUtils.isInside(e[3],e[4],self) then\
|
||
clickoutside = false\
|
||
s.reset = true\
|
||
sl.OWfile = nil\
|
||
shapescape.setSlide(1)\
|
||
end\
|
||
end\
|
||
end",
|
||
name = "openwithwhite.lua",
|
||
},
|
||
[ "hNext.lua" ] = {
|
||
id = 6,
|
||
content = "local sl = shapescape.getSlides()\
|
||
local e = {shapescape.getEvent()}\
|
||
if not sl.history then return end\
|
||
if e[1] == \"mouse_click\" and lUtils.isInside(e[3],e[4],self) and #sl.rhistory > 0 then\
|
||
self.txtcolor = colors.blue\
|
||
elseif e[1] == \"mouse_up\" and #sl.rhistory > 0 then\
|
||
self.txtcolor = colors.white\
|
||
if lUtils.isInside(e[3],e[4],self) then\
|
||
sl.folder = sl.rhistory[#sl.rhistory]\
|
||
sl.rhistory[#sl.rhistory] = nil\
|
||
sl.ofolder = sl.folder\
|
||
table.insert(sl.history,sl.folder)\
|
||
end\
|
||
elseif e[1] == \"mouse_move\" and #sl.rhistory > 0 then\
|
||
if e[3] and e[4] and lUtils.isInside(e[3],e[4],self) then\
|
||
self.txtcolor = colors.lightBlue\
|
||
else\
|
||
self.txtcolor = colors.white\
|
||
end\
|
||
end\
|
||
if self.txtcolor ~= colors.blue and self.txtcolor ~= colors.lightBlue then\
|
||
if #sl.rhistory <= 0 then\
|
||
self.txtcolor = colors.gray\
|
||
else\
|
||
self.txtcolor = colors.white\
|
||
end\
|
||
end",
|
||
name = "hNext.lua",
|
||
},
|
||
[ "tree.lua" ] = {
|
||
id = 1,
|
||
content = "local sl = shapescape.getSlides()\
|
||
local s = shapescape.getSlide()\
|
||
s.sidebar = self\
|
||
local objs = {}\
|
||
local tree = {\"Quick access\",\"LevelCloud\",\"This PC\",\"Local disk\",path=\"\"}\
|
||
local function genTree(tEntry)\
|
||
local list = fs.list(tEntry.path)\
|
||
for i,f in ipairs(tEntry) do\
|
||
tEntry[i] = nil\
|
||
end\
|
||
for f=1,#list do\
|
||
if fs.isDir(fs.combine(tEntry.path,list[f])) then\
|
||
tEntry[#tEntry+1] = list[f]\
|
||
end\
|
||
end\
|
||
end\
|
||
tree[\"Quick access\"] = {\
|
||
path=\"Quick access\",\
|
||
nopath=true,\
|
||
open=true,\
|
||
}\
|
||
local function reloadQuickAccess()\
|
||
if not sl.config.quickaccess then sl.config.quickaccess = {} return end\
|
||
local l = sl.config.quickaccess\
|
||
for t=#tree[\"Quick access\"],1,-1 do\
|
||
tree[\"Quick access\"][\"Quick access/\"..tree[\"Quick access\"][t]] = nil\
|
||
table.remove(tree[\"Quick access\"],t)\
|
||
end\
|
||
for t=1,#l do\
|
||
local n = sl.getName(l[t])\
|
||
tree[\"Quick access\"][#tree[\"Quick access\"]+1] = n\
|
||
tree[\"Quick access\"][\"Quick access/\"..n] = {\
|
||
path = l[t],\
|
||
open = false,\
|
||
}\
|
||
end\
|
||
end\
|
||
reloadQuickAccess()\
|
||
sl.reloadQuickAccess = reloadQuickAccess\
|
||
--[[tree[\"Quick access\"][\"Quick access/LevelOS\"] = {\
|
||
path=\"User/Cloud/Public/LevelOS\",\
|
||
open=false,\
|
||
}]]\
|
||
if fs.exists(\"User/Cloud\") then\
|
||
tree[\"LevelCloud\"] = {\
|
||
path=\"User/Cloud\",\
|
||
open=false,\
|
||
auto=true,\
|
||
}\
|
||
end\
|
||
tree[\"This PC\"] = {\
|
||
path=\"User\",\
|
||
open=true,\
|
||
\"Desktop\",\
|
||
\"Documents\",\
|
||
\"Downloads\",\
|
||
\"Games\",\
|
||
\"Images\",\
|
||
\"Music\",\
|
||
\"Scripts\",\
|
||
}\
|
||
--[[for t=#tree[\"This PC\"]-2,1,-1 do\
|
||
if not fs.exists(fs.combine(tree[\"This PC\"].path,tree[\"This PC\"][t])) then\
|
||
table.remove(tree[\"This PC\"],t)\
|
||
end\
|
||
end]]\
|
||
tree[\"Local disk\"] = {\
|
||
path=\"\",\
|
||
open=false,\
|
||
auto=true,\
|
||
}\
|
||
for k=#sl.disks,1,-1 do\
|
||
local v = sl.disks[k]\
|
||
local dPath = v.getMountPath()\
|
||
local dName = sl.getName(dPath)\
|
||
tree[\"This PC\"][#tree[\"This PC\"]+1] = dName\
|
||
tree[\"This PC\"][\"User/\"..dName] = {path=dPath,open=false,auto=true}\
|
||
genTree(tree[\"This PC\"][\"User/\"..dName])\
|
||
end\
|
||
table.insert(tree,\"rom\")\
|
||
tree[\"rom\"] = {\
|
||
path=\"rom\",\
|
||
open=false,\
|
||
}\
|
||
if tree[\"LevelCloud\"] then\
|
||
genTree(tree[\"LevelCloud\"])\
|
||
end\
|
||
genTree(tree[\"Local disk\"])\
|
||
genTree(tree[\"rom\"])\
|
||
--local cList = fs.list(dir)\
|
||
local x,y = 0,1\
|
||
local symbols = {\
|
||
[\"Quick access\"] = {symbol=\"*\",color=colors.blue},\
|
||
[\"User/Cloud\"] = {symbol=\"\",color=colors.blue},\
|
||
[\"\"] = {symbol=\"\",color=colors.lightGray},\
|
||
[\"rom\"] = {symbol=\"\",color=colors.red},\
|
||
[\"User\"] = {symbol=\"\",color=colors.lightBlue},\
|
||
[\"User/Desktop\"] = {symbol=\"\",color=colors.lightBlue},\
|
||
[\"User/Documents\"] = {symbol=\"\",color=colors.lightGray},\
|
||
[\"User/Downloads\"] = {symbol=\"\",color=colors.blue},\
|
||
[\"User/Images\"] = {symbol=\"\",color=colors.lightBlue},\
|
||
[\"User/Scripts\"] = {symbol=\"\",color=colors.cyan},\
|
||
[\"User/Games\"] = {symbol=\"\",color=colors.lightGray},\
|
||
[\"User/Music\"] = {symbol=\"\",color=colors.blue},\
|
||
}\
|
||
sl.symbols = symbols\
|
||
local selected1\
|
||
local selected2\
|
||
local scrollY = 0\
|
||
local hadselected = false\
|
||
local function updateTree(tree)\
|
||
for i=#tree,1,-1 do\
|
||
local f = tree[i]\
|
||
local file = fs.combine(tree.path,f)\
|
||
if not fs.exists(file) then\
|
||
tree[file] = nil\
|
||
end\
|
||
tree[i] = nil\
|
||
end\
|
||
local ls = fs.list(tree.path)\
|
||
for f=1,#ls do\
|
||
local file = fs.combine(tree.path,ls[f])\
|
||
if fs.isDir(file) then\
|
||
tree[#tree+1] = ls[f]\
|
||
if tree[file] and tree.auto then\
|
||
updateTree(tree[file])\
|
||
end\
|
||
end\
|
||
end\
|
||
end\
|
||
local function updateFullTree()\
|
||
for k,v in ipairs(tree) do\
|
||
if tree[v] and tree[v].auto then\
|
||
updateTree(tree[v])\
|
||
end\
|
||
end\
|
||
end\
|
||
sl.updateFullTree = updateFullTree\
|
||
local function renderTree(tree)\
|
||
x = x+1\
|
||
for i,f in ipairs(tree) do\
|
||
local file = fs.combine(tree.path,f)\
|
||
if not tree[file] then\
|
||
if not fs.exists(file) then\
|
||
--error(\"No tree[\"..file..\"]!\")\
|
||
else\
|
||
tree[file] = {path=file,open=false,auto=true}\
|
||
genTree(tree[file])\
|
||
end\
|
||
end\
|
||
local t = tree[file]\
|
||
if t and (fs.exists(t.path) or t.nopath) then\
|
||
t.x,t.y = x,y\
|
||
objs[#objs+1] = t\
|
||
term.setCursorPos(x,y)\
|
||
local selected\
|
||
if sl.folder and not hadselected then\
|
||
selected = ((t.open and t.path == sl.folder) or (not t.open and string.find(sl.folder..\"/\",t.path..\"/\",nil,true) == 1))\
|
||
end\
|
||
if selected then\
|
||
term.setBackgroundColor(colors.gray)\
|
||
hadselected = true\
|
||
else\
|
||
term.setBackgroundColor(colors.black)\
|
||
end\
|
||
term.clearLine()\
|
||
term.setCursorPos(x,y)\
|
||
y = y+1\
|
||
if t.open then\
|
||
if selected2 == t then\
|
||
term.setTextColor(colors.blue)\
|
||
elseif selected then\
|
||
term.setTextColor(colors.white)\
|
||
else\
|
||
term.setTextColor(colors.lightGray)\
|
||
end\
|
||
term.write(\" \")\
|
||
elseif #t > 0 then\
|
||
if selected2 == t then\
|
||
term.setTextColor(colors.blue)\
|
||
elseif selected then\
|
||
term.setTextColor(colors.lightGray)\
|
||
else\
|
||
term.setTextColor(colors.gray)\
|
||
end\
|
||
term.write(\" \")\
|
||
else\
|
||
term.write(\" \")\
|
||
end\
|
||
if symbols[t.path] then\
|
||
term.setTextColor(symbols[t.path].color)\
|
||
term.write(symbols[t.path].symbol..\" \")\
|
||
elseif sl.disks[t.path] then\
|
||
term.setTextColor(colors.blue)\
|
||
term.write(\" \")\
|
||
else\
|
||
term.setTextColor(colors.yellow)\
|
||
term.write(\" \")\
|
||
end\
|
||
if selected1 == t then\
|
||
term.setTextColor(colors.lightGray)\
|
||
elseif fs.isReadOnly(t.path) then\
|
||
term.setTextColor(colors.lightGray)\
|
||
else\
|
||
term.setTextColor(colors.white)\
|
||
end\
|
||
term.write(sl.getName(t.path))\
|
||
if t.open then\
|
||
renderTree(t)\
|
||
end\
|
||
if x == 1 then\
|
||
y = y+1\
|
||
end\
|
||
end\
|
||
end\
|
||
x = x-1\
|
||
end\
|
||
local function render()\
|
||
objs = {}\
|
||
hadselected = false\
|
||
term.setBackgroundColor(colors.black)\
|
||
term.clear()\
|
||
x,y = 0,1+scrollY\
|
||
renderTree(tree)\
|
||
end\
|
||
render()\
|
||
local ofolder\
|
||
while true do\
|
||
local e = {os.pullEvent()}\
|
||
local w,h = term.getSize()\
|
||
if e[1] == \"mouse_scroll\" and lUtils.isInside(e[3]+self.x1-1,e[4]+self.y1-1,self) then\
|
||
if (e[2] == -1 and scrollY < 0) or (e[2] == 1 and y > h) then\
|
||
scrollY = scrollY-e[2]\
|
||
render()\
|
||
end\
|
||
elseif e[1]:find(\"mouse\") then\
|
||
if e[1] == \"mouse_move\" or e[1] == \"mouse_click\" or e[1] == \"mouse_up\" then selected1 = nil selected2 = nil end\
|
||
if e[3] and e[4] and lUtils.isInside(e[3]+self.x1-1,e[4]+self.y1-1,self) then\
|
||
for k,v in pairs(objs) do\
|
||
if e[4] == v.y then\
|
||
if e[3] == v.x and #v > 0 then\
|
||
if e[1] == \"mouse_move\" or e[1] == \"mouse_click\" then\
|
||
selected2 = v\
|
||
elseif e[1] == \"mouse_up\" then\
|
||
v.open = not v.open\
|
||
end\
|
||
else\
|
||
if e[1] == \"mouse_move\" or e[1] == \"mouse_click\" then\
|
||
selected1 = v\
|
||
elseif e[1] == \"mouse_up\" and not v.nopath then\
|
||
if e[2] == 1 then\
|
||
sl.folder = v.path\
|
||
os.queueEvent(\"explorer_change_folder\")\
|
||
elseif e[2] == 2 then\
|
||
sl.cMenu(v.path,e[3],e[4])\
|
||
end\
|
||
end\
|
||
end\
|
||
break\
|
||
end\
|
||
end\
|
||
end\
|
||
render()\
|
||
elseif ofolder ~= sl.folder then\
|
||
ofolder = sl.folder\
|
||
render()\
|
||
end\
|
||
end",
|
||
name = "tree.lua",
|
||
},
|
||
[ "mainscreen.lua" ] = {
|
||
id = 0,
|
||
content = "if not blittle then\
|
||
os.loadAPI(\"blittle\")\
|
||
end\
|
||
local sl = shapescape.getSlides()\
|
||
local s = shapescape.getSlide()\
|
||
local imgcache\
|
||
local nimgcache\
|
||
local shortcache\
|
||
s.main = self\
|
||
if not lOS.fCut then\
|
||
lOS.fCut = {}\
|
||
end\
|
||
if not lOS.fClipboard then\
|
||
lOS.fClipboard = {}\
|
||
end\
|
||
local tW,tH = lOS.wAll.getSize()\
|
||
if tW > 85+12 and tH > 33+12 and LevelOS and LevelOS.self and LevelOS.self.window then\
|
||
LevelOS.setWin(85,33)\
|
||
os.queueEvent(\"term_resize\")\
|
||
os.queueEvent(\"term_resize\")\
|
||
end\
|
||
local tArgs = {...}\
|
||
local cSlide = sl.cSlide\
|
||
if tArgs[2] then\
|
||
if tArgs[2] == \"SelFile\" and cSlide ~= 3 then\
|
||
sl.ret = {}\
|
||
shapescape.setSlide(3)\
|
||
elseif tArgs[2] == \"SelFolder\" and cSlide ~= 4 then\
|
||
sl.ret = {}\
|
||
shapescape.setSlide(4)\
|
||
elseif tArgs[2] == \"SelSave\" and cSlide ~= 5 then\
|
||
sl.ret = {}\
|
||
shapescape.setSlide(5)\
|
||
end\
|
||
end\
|
||
local deskIcons = lUtils.asset.load(\"LevelOS/assets/Desktop_Icons.limg\")\
|
||
\
|
||
local config\
|
||
if fs.exists(\"LevelOS/data/explorer.lconf\") then\
|
||
config = lUtils.asset.load(\"LevelOS/data/explorer.lconf\")\
|
||
end\
|
||
local function saveConfig()\
|
||
lUtils.asset.save(config,\"LevelOS/data/explorer.lconf\")\
|
||
end\
|
||
\
|
||
local fTypes = lUtils.asset.load(\"LevelOS/data/formats.lconf\")\
|
||
sl.saveConfig = saveConfig\
|
||
if not config then\
|
||
config = {\
|
||
_VERSION=\"1.0\",\
|
||
tabs = {\
|
||
{\"Name\",w=18,on=true},\
|
||
{\"Status\",w=8,on=false},\
|
||
{\"Type\",w=10,on=true},\
|
||
{\"Size\",w=9,on=true},\
|
||
{\"Date Modified\",w=16,on=true},\
|
||
{\"Date Created\",w=16,on=false},\
|
||
},\
|
||
modes = {[\"User/Cloud/Images\"]=2,[\"User/Images\"]=2},\
|
||
sidebar = {width=13}\
|
||
}\
|
||
saveConfig()\
|
||
end\
|
||
\
|
||
sl.config = config\
|
||
\
|
||
if tArgs[1] and fs.exists(tArgs[1]) then\
|
||
sl.folder = tArgs[1]\
|
||
else\
|
||
sl.folder = \"\"\
|
||
end\
|
||
\
|
||
local function uFP(filepath2) -- unique filepath\
|
||
if fs.exists(filepath2) == true then\
|
||
t = 1\
|
||
while fs.exists(string.sub(filepath2,1,string.len(filepath2)-string.len(lUtils.getFileType(filepath2)))..\"_(\"..t..\")\"..lUtils.getFileType(filepath2)) == true do\
|
||
t = t+1\
|
||
end\
|
||
filepath2 = string.sub(filepath2,1,string.len(filepath2)-string.len(lUtils.getFileType(filepath2)))..\"_(\"..t..\")\"..lUtils.getFileType(filepath2)\
|
||
end\
|
||
return filepath2\
|
||
end\
|
||
sl.uFP = uFP\
|
||
\
|
||
local disks = {peripheral.find(\"drive\",function(name,object) return object.hasData() end)}\
|
||
for t=1,#disks do\
|
||
disks[disks[t].getMountPath()] = disks[t]\
|
||
end\
|
||
sl.disks = disks\
|
||
\
|
||
local function getName(path)\
|
||
local isDisk = false\
|
||
if sl.disks[path] and sl.disks[path].getDiskLabel() then\
|
||
str = sl.disks[path].getDiskLabel()..\" (\"..string.gsub(path,\"_\",\" \")..\")\"\
|
||
isDisk = true\
|
||
elseif path == \"\" then\
|
||
str = \"Local disk\"\
|
||
else\
|
||
str = string.gsub(fs.getName(path),\"_\",\" \")\
|
||
if lUtils.getFileType(str) == \".llnk\" then\
|
||
str = str:sub(1,#str-5)\
|
||
end\
|
||
end\
|
||
return str,isDisk\
|
||
end\
|
||
sl.getName = getName\
|
||
\
|
||
local files -- includes all entries from fs.attributes\
|
||
local scrollY = 0\
|
||
\
|
||
function locateEntry(tTable,tEntry)\
|
||
if type(tTable) ~= \"table\" then\
|
||
error(\"Invalid input #1\",2)\
|
||
end\
|
||
for t=1,#tTable do\
|
||
if tTable[t] == tEntry then\
|
||
return true,t\
|
||
end\
|
||
end\
|
||
return false,0\
|
||
end\
|
||
sl.locateEntry = locateEntry\
|
||
\
|
||
local function openWith(file)\
|
||
-- open with GUI\
|
||
--[[term.setBackgroundColor(colors.white)\
|
||
local w,h = term.getSize()\
|
||
lOS.boxClear(]]\
|
||
sl.OWfile = file\
|
||
shapescape.setSlide(2)\
|
||
coroutine.yield()\
|
||
return sl.OWprogram\
|
||
end\
|
||
sl.openWith = openWith\
|
||
\
|
||
local function getIcon(path)\
|
||
if sl.symbols and sl.symbols[path] then\
|
||
--term.setTextColor(sl.symbols[file.path].color)\
|
||
--term.write(sl.symbols[file.path].symbol)\
|
||
return {sl.symbols[path].symbol,lUtils.toBlit(sl.symbols[path].color)}\
|
||
else\
|
||
if fs.isDir(path) then\
|
||
if sl.disks[path] then\
|
||
return {\"\",lUtils.toBlit(colors.blue)}\
|
||
else\
|
||
return {\"\",lUtils.toBlit(colors.yellow)}\
|
||
end\
|
||
else\
|
||
return {\"\",lUtils.toBlit(colors.white)}\
|
||
end\
|
||
--term.write(\"\")\
|
||
end\
|
||
end\
|
||
sl.getIcon = getIcon\
|
||
\
|
||
local NAME = {name=\"Name\",width=18}\
|
||
sl.NAME = NAME\
|
||
function NAME.render(file)\
|
||
local path = file.path\
|
||
if shortcache[file.path] then\
|
||
path = shortcache[file.path][1]\
|
||
end\
|
||
local isCut = locateEntry(lOS.fCut,file.path)\
|
||
if not isCut then\
|
||
if sl.symbols and sl.symbols[path] then\
|
||
term.setTextColor(sl.symbols[path].color)\
|
||
term.write(sl.symbols[path].symbol)\
|
||
else\
|
||
if fs.isDir(path) then\
|
||
if disks[path] then\
|
||
term.setTextColor(colors.blue)\
|
||
term.write(\"\")\
|
||
else\
|
||
term.setTextColor(colors.yellow)\
|
||
term.write(\"\")\
|
||
end\
|
||
else\
|
||
term.setTextColor(colors.white)\
|
||
term.write(\"\")\
|
||
end\
|
||
end\
|
||
if fs.isReadOnly(file.path) then\
|
||
term.setTextColor(colors.lightGray)\
|
||
else\
|
||
term.setTextColor(colors.white)\
|
||
end\
|
||
else\
|
||
term.setTextColor(colors.lightGray)\
|
||
term.write(\" \")\
|
||
end\
|
||
local str = \" \"..sl.getName(file.path)\
|
||
if #str >= NAME.width-1 then\
|
||
str = str:sub(1,NAME.width-4)..\"..\"\
|
||
end\
|
||
local x,y = term.getCursorPos()\
|
||
term.write(str)\
|
||
if sl.search then\
|
||
local b,e = sl.getName(file.path):lower():find(sl.search:lower(),nil,true)\
|
||
if b < NAME.width-2 then\
|
||
if e >= NAME.width-2 then\
|
||
e = NAME.width-3\
|
||
end\
|
||
local nx,ny = term.getCursorPos()\
|
||
local bg = term.getBackgroundColor()\
|
||
term.setCursorPos(x+b,y)\
|
||
term.setBackgroundColor(colors.orange)\
|
||
term.write(str:sub(b+1,e+1))\
|
||
term.setBackgroundColor(bg)\
|
||
term.setCursorPos(nx,ny)\
|
||
end\
|
||
end\
|
||
term.setTextColor(colors.white)\
|
||
end\
|
||
\
|
||
local TYPE = {name=\"Type\",width=10}\
|
||
function TYPE.func(file)\
|
||
if fs.isDir(file.path) then\
|
||
if disks[file.path] then\
|
||
return \"Disk\"\
|
||
else\
|
||
return \"Folder\"\
|
||
end\
|
||
elseif fTypes[file.type] then\
|
||
return fTypes[file.type].name\
|
||
else\
|
||
return file.type:upper()..\"-file\"\
|
||
end\
|
||
end\
|
||
\
|
||
local SIZE = {name=\"Size\",width=9}\
|
||
function SIZE.func(file)\
|
||
if not fs.isDir(file.path) then\
|
||
return string.format(\"%.1f kB\",math.floor(file.size/100+0.5)/10)\
|
||
else\
|
||
return \"\"\
|
||
end\
|
||
end\
|
||
\
|
||
local MODIFIED = {name=\"Date Modified\",width=16}\
|
||
function MODIFIED.func(file)\
|
||
if not file.modification then return \"\" end\
|
||
local t = file.modification\
|
||
return os.date(\"%d-%m-%y %H:%M\",t/1000)\
|
||
end\
|
||
\
|
||
local CREATED = {name=\"Date Created\",width=16}\
|
||
function CREATED.func(file)\
|
||
if not file.created then return \"\" end\
|
||
local t = file.created\
|
||
return os.date(\"%d-%m-%y %H:%M\",t/1000)\
|
||
end\
|
||
\
|
||
local STATUS = {name=\"Status\",width=8}\
|
||
function STATUS.render(file)\
|
||
-- nothing yet, cloud doesn't support this yet\
|
||
-- IF timestamp of file is HIGHER than cloud reported timestamp, file is NOT SYNCED YET\
|
||
-- IF timestamp of file is LOWER than cloud reported timestamp or file only exists in CLOUD TABLE, file is AVAILABLE ONLINE\
|
||
-- IF timestamp of file is EQUAL to cloud reported timestamp, file is AVAILABLE COMPLETELY\
|
||
if lOS.cloud.lastSync and lOS.cloud.files[file.path] then\
|
||
if lOS.cloud.conflicts[file.path] then\
|
||
term.setTextColor(colors.red)\
|
||
term.write(\"×\")\
|
||
elseif file.modification > lOS.cloud.lastSync then\
|
||
term.setTextColor(colors.blue)\
|
||
term.write(\"\\24\")\
|
||
else\
|
||
term.setTextColor(colors.lime)\
|
||
term.write(\"\\7\")\
|
||
end\
|
||
end\
|
||
term.setTextColor(colors.white)\
|
||
end\
|
||
local tabRef = {}\
|
||
local aTabs = {NAME,TYPE,SIZE,MODIFIED,CREATED,STATUS}\
|
||
for k,v in ipairs(config.tabs) do\
|
||
for i,t in pairs(aTabs) do\
|
||
if v[1] == t.name then\
|
||
t.id = k\
|
||
t.width = v.w\
|
||
tabRef[k] = t\
|
||
table.remove(aTabs,i)\
|
||
break\
|
||
end\
|
||
end\
|
||
end\
|
||
aTabs = nil\
|
||
local tabs = {NAME,TYPE,SIZE,MODIFIED}\
|
||
sl.rMode = 1\
|
||
local selected = {}\
|
||
sl.selected = selected\
|
||
local mSelected = nil\
|
||
local renamebox\
|
||
local function render()\
|
||
shortcache = lOS.explorer.shortcache\
|
||
imgcache = lOS.explorer.imgcache\
|
||
nimgcache = lOS.explorer.nimgcache\
|
||
local oterm = term.current()\
|
||
if oterm ~= self.window then\
|
||
term.redirect(self.window)\
|
||
end\
|
||
if not files then return end\
|
||
local w,h = term.getSize()\
|
||
if sl.rMode == 1 then\
|
||
while #files+scrollY <= h-3 and scrollY < 0 do\
|
||
scrollY = scrollY+1\
|
||
end\
|
||
term.setBackgroundColor(colors.black)\
|
||
term.clear()\
|
||
tabs[1].x = 2\
|
||
term.setBackgroundColor(colors.black)\
|
||
term.setTextColor(colors.lightGray)\
|
||
for i=1,#tabs do\
|
||
term.setCursorPos(tabs[i].x,1)\
|
||
term.write(tabs[i].name..string.rep(\" \",tabs[i].width-#tabs[i].name-1)..\"\\149\")\
|
||
if tabs[i+1] then\
|
||
tabs[i+1].x = tabs[i].x+tabs[i].width\
|
||
end\
|
||
end\
|
||
term.setTextColor(colors.white)\
|
||
for i=1,math.min(#files+scrollY,h-2) do\
|
||
local file = files[i-scrollY]\
|
||
file.x1 = tabs[1].x\
|
||
file.y1 = i+1+1\
|
||
file.y2 = file.y1\
|
||
file.x2 = tabs[#tabs].x+tabs[#tabs].width-1\
|
||
local fc = fs.combine\
|
||
local rPath = file.path\
|
||
local isShort = false\
|
||
if shortcache[file.path] then\
|
||
isShort = true\
|
||
rPath = shortcache[file.path][1]\
|
||
elseif file.type == \"llnk\" then\
|
||
local info = lUtils.asset.load(file.path)\
|
||
if info and type(info[1]) == \"string\" then\
|
||
isShort = true\
|
||
rPath = info[1] -- if linked to folder, assume user wants to go to folder, if linked to main.lua it links to program (do context menu shizz)\
|
||
imgcache[file.path] = info.icon\
|
||
shortcache[file.path] = info\
|
||
end\
|
||
end\
|
||
if selected[file.path] then\
|
||
term.setBackgroundColor(colors.gray)\
|
||
term.setCursorPos(file.x1,file.y1)\
|
||
term.write(string.rep(\" \",file.x2-(file.x1-1)))\
|
||
elseif mSelected and lUtils.isInside(mSelected[1],mSelected[2],file) then\
|
||
term.setBackgroundColor(colors.pink)\
|
||
term.setCursorPos(file.x1,file.y1)\
|
||
term.write(string.rep(\" \",file.x2-(file.x1-1)))\
|
||
end\
|
||
for t=1,#tabs do\
|
||
term.setCursorPos(tabs[t].x,i+1+1)\
|
||
if tabs[t].render then\
|
||
tabs[t].render(file)\
|
||
elseif tabs[t].func then\
|
||
local str = tabs[t].func(file)\
|
||
if str and #str >= tabs[t].width then\
|
||
str = str:sub(1,tabs[t].width-3)..\"..\"\
|
||
end\
|
||
term.write(tostring(str))\
|
||
end\
|
||
end\
|
||
if renamebox and sl.renaming == file.path then\
|
||
renamebox.render()\
|
||
end\
|
||
term.setBackgroundColor(colors.black)\
|
||
end\
|
||
elseif sl.rMode == 2 then\
|
||
term.setBackgroundColor(colors.black)\
|
||
term.clear()\
|
||
local fx,fy = 2,1+scrollY\
|
||
local fw,fh = 7,5\
|
||
for i=1,#files do\
|
||
local file = files[i]\
|
||
if selected[file.path] then\
|
||
term.setBackgroundColor(colors.gray)\
|
||
elseif mSelected and file.x1 and lUtils.isInside(mSelected[1],mSelected[2],file) then\
|
||
term.setBackgroundColor(colors.pink)\
|
||
else\
|
||
term.setBackgroundColor(colors.black)\
|
||
end\
|
||
lineH = lOS.explorer.drawIcon(file.path,fx,fy,false,false,4,{\"\\24\",\"3\",\"0\"})-4\
|
||
fh = math.max(lineH+4,fh)\
|
||
file.x1,file.y1 = fx,fy\
|
||
file.x2,file.y2 = fx+7-1,fy+5-1+lineH-1\
|
||
fx = fx+fw+1\
|
||
if fx+fw > w then\
|
||
fx = 2\
|
||
fy = fy+fh\
|
||
fh = 5\
|
||
end\
|
||
end\
|
||
end\
|
||
if oterm ~= self.window then\
|
||
term.redirect(oterm)\
|
||
end\
|
||
end\
|
||
\
|
||
local function genFile(f)\
|
||
local file = {path=f,name=fs.getName(f),type=lUtils.getFileType(f):sub(2),readOnly=fs.isReadOnly(f),isDir=fs.isDir(f)}\
|
||
if not ((file.isDir and file.readOnly) or sl.disks[file.path]) then\
|
||
local a = fs.attributes(f)\
|
||
for k,v in pairs(a) do\
|
||
file[k] = v\
|
||
end\
|
||
end\
|
||
return file\
|
||
end\
|
||
sl.genFile = genFile\
|
||
\
|
||
local function updateFiles()\
|
||
while not fs.exists(sl.folder) do\
|
||
sl.folder = fs.getDir(sl.folder)\
|
||
end\
|
||
local inCloud = sl.folder:find(\"User/Cloud\",nil,true) == 1\
|
||
tabs = {}\
|
||
for t=1,#tabRef do\
|
||
if (tabRef[t] == STATUS and inCloud) or config.tabs[tabRef[t].id].on then\
|
||
table.insert(tabs,tabRef[t])\
|
||
end\
|
||
end\
|
||
if config.modes[sl.folder] then\
|
||
sl.rMode = config.modes[sl.folder]\
|
||
else\
|
||
sl.rMode = 1\
|
||
end\
|
||
if LevelOS.self and LevelOS.self.window then\
|
||
if sl.search then\
|
||
LevelOS.setTitle(sl.search..\" - Search Results in \"..sl.getName(sl.folder))\
|
||
LevelOS.self.window.icon = {\"\",lUtils.toBlit(colors.lightBlue)}\
|
||
else\
|
||
LevelOS.setTitle(sl.getName(sl.folder))\
|
||
LevelOS.self.window.icon = sl.getIcon(sl.folder)\
|
||
end\
|
||
end\
|
||
local fi = fs.list(sl.folder)\
|
||
table.sort(fi,function(a,b) return a:lower() < b:lower() end)\
|
||
local folders = {}\
|
||
local nonfolders = {}\
|
||
for t=1,#fi do\
|
||
local f = fs.combine(sl.folder,fi[t])\
|
||
local file = genFile(f)\
|
||
if not (sl.search and not file.name:lower():find(sl.search:lower(),nil,true)) then\
|
||
if file.isDir then\
|
||
table.insert(folders,file)\
|
||
else\
|
||
table.insert(nonfolders,file)\
|
||
end\
|
||
end\
|
||
end\
|
||
files = folders\
|
||
for k,v in ipairs(nonfolders) do\
|
||
table.insert(files,v)\
|
||
end\
|
||
sl.files = files\
|
||
sl.updateFullTree()\
|
||
end\
|
||
while not sl.symbols do\
|
||
os.sleep(0.1)\
|
||
end\
|
||
updateFiles()\
|
||
render()\
|
||
sl.ofolder = sl.folder\
|
||
local ofolder = sl.folder\
|
||
sl.history = {sl.folder}\
|
||
sl.rhistory = {}\
|
||
local mousemove = false\
|
||
local tID = os.startTimer(10)\
|
||
local timerTimeout = os.epoch(\"utc\")+15000\
|
||
local function count(tbl)\
|
||
local c = 0\
|
||
for k,v in pairs(tbl) do\
|
||
c = c+1\
|
||
end\
|
||
return c\
|
||
end\
|
||
local contextcache = {}\
|
||
--[[if not fs.isDir(file) and b[2] == 1 and fTypes[f.type] and fTypes[f.type].c then\
|
||
local found,num = locateEntry(fTypes[f.type].c[1],b[3])\
|
||
local p = fTypes[f.type].c[2][num]\
|
||
if p == \"Lua\" then\
|
||
lOS.execute(f.path)\
|
||
else\
|
||
lOS.execute(p..\" \"..f.path)\
|
||
end\
|
||
elseif b[3] == \"Open\" and fs.isDir(file) then\
|
||
selected = {}\
|
||
sl.folder = f.path\
|
||
updateFiles()\
|
||
scrollY = 0\
|
||
elseif b[3] == \"Delete\" then\
|
||
for k,v in pairs(selected) do\
|
||
fs.delete(k)\
|
||
end\
|
||
selected = {}\
|
||
updateFiles()\
|
||
scrollY = 0\
|
||
end]]\
|
||
local function cMenu(f, x, y)\
|
||
local options = lOS.explorer.genContextMenu(f,s,sl,selected,updateFiles,render,LevelOS,false)\
|
||
local output = {lOS.contextmenu(x,y,30,options,nil,true)}\
|
||
renamebox = sl.renamebox\
|
||
return unpack(output)\
|
||
end\
|
||
sl.cMenu = cMenu\
|
||
local function updateReturn()\
|
||
local tbl = {}\
|
||
for k,v in pairs(sl.ret) do\
|
||
if not selected[k] then\
|
||
sl.ret[k] = nil\
|
||
else\
|
||
table.insert(tbl,k)\
|
||
end\
|
||
end\
|
||
if #tbl > 1 then\
|
||
sl.fpathbox.txt = \"\"\
|
||
for t=1,#tbl do\
|
||
sl.fpathbox.txt = sl.fpathbox.txt..'\"'..fs.getName(tbl[t])..'\" '\
|
||
end\
|
||
sl.fpathbox.changed = false\
|
||
elseif #tbl == 1 then\
|
||
sl.fpathbox.txt = fs.getName(tbl[1])\
|
||
sl.fpathbox.changed = false\
|
||
else\
|
||
sl.fpathbox.changed = true\
|
||
end\
|
||
end\
|
||
\
|
||
local function fPaste(obj)\
|
||
local tFolder = sl.folder\
|
||
for c=1,#lOS.fClipboard do\
|
||
if fs.exists(lOS.fClipboard[c]) == true then\
|
||
fs.copy(lOS.fClipboard[c],uFP(fs.combine(tFolder,fs.getName(lOS.fClipboard[c]))))\
|
||
end\
|
||
if locateEntry(lOS.fCut,lOS.fClipboard[c]) == true then\
|
||
fs.delete(lOS.fClipboard[c])\
|
||
table.remove(lOS.fCut,({locateEntry(lOS.fCut,lOS.fClipboard[c])})[2])\
|
||
end\
|
||
end\
|
||
lOS.fClipboard = {}\
|
||
lOS.fCut = {}\
|
||
updateFiles()\
|
||
end\
|
||
\
|
||
local function fRename(obj)\
|
||
lOS.explorer.fRename(obj,s,sl,render,LevelOS)\
|
||
renamebox = sl.renamebox\
|
||
end\
|
||
\
|
||
local function fOpenWith(obj)\
|
||
if LevelOS and LevelOS.self and LevelOS.self.window then\
|
||
LevelOS.self.window.events = nil\
|
||
end\
|
||
LevelOS.overlay = nil\
|
||
lOS.noEvents = false\
|
||
local p = sl.openWith(obj.file)\
|
||
if p then\
|
||
p = p.path\
|
||
local f = obj.file\
|
||
if p == \"Lua\" then\
|
||
lOS.execute(f.path)\
|
||
else\
|
||
lOS.execute(p..\" \"..f.path)\
|
||
end\
|
||
end\
|
||
end\
|
||
\
|
||
local function fNew(obj)\
|
||
local pth = uFP(fs.combine(sl.folder,\"New_\"..obj.txt:gsub(\" \",\"_\")..\".\"..obj.format))\
|
||
lUtils.fwrite(pth,obj.preset)\
|
||
term.redirect(self.window)\
|
||
updateFiles()\
|
||
render()\
|
||
fRename(pth)\
|
||
-- rename\
|
||
end\
|
||
\
|
||
local function fNewFolder(obj)\
|
||
local pth = uFP(fs.combine(sl.folder,\"New_Folder\"))\
|
||
fs.makeDir(pth)\
|
||
term.redirect(self.window)\
|
||
updateFiles()\
|
||
render()\
|
||
fRename(pth)\
|
||
-- rename\
|
||
end\
|
||
\
|
||
local dragmenu\
|
||
while true do\
|
||
local w,h = term.getSize()\
|
||
local sObj = {x1=1,y1=1,x2=w,y2=h}\
|
||
local e = {os.pullEvent()}\
|
||
if sl.fullReload then\
|
||
os.queueEvent(\"explorer_full_reload\")\
|
||
sl.fullReload = false\
|
||
elseif sl.reload then\
|
||
os.queueEvent(\"explorer_reload\")\
|
||
sl.reload = false\
|
||
end\
|
||
if e[1] == \"explorer_full_reload\" then\
|
||
term.setBackgroundColor(colors.black)\
|
||
term.clear()\
|
||
fTypes = lUtils.asset.load(\"LevelOS/data/formats.lconf\")\
|
||
contextcache = {}\
|
||
imgcache = {}\
|
||
nimgcache = {}\
|
||
shortcache = {}\
|
||
updateFiles()\
|
||
os.sleep(0.2)\
|
||
render()\
|
||
end\
|
||
if dragmenu and (e[1] == \"mouse_drag\" or e[1] == \"mouse_up\") then\
|
||
--dragmenu.x = e[3]-dragmenu.width+1\
|
||
dragmenu.width = e[3]-dragmenu.x+1\
|
||
if e[1] == \"mouse_up\" then\
|
||
config.tabs[dragmenu.id].w = dragmenu.width\
|
||
saveConfig()\
|
||
dragmenu = nil\
|
||
end\
|
||
render()\
|
||
elseif renamebox then\
|
||
if e[1] == \"char\" and e[2] == \" \" then\
|
||
e[2] = \"_\"\
|
||
end\
|
||
if e[1] == \"key\" and e[2] == keys.enter then\
|
||
renamebox.state = false\
|
||
--sl.renaming = nil\
|
||
else\
|
||
renamebox.update(unpack(e))\
|
||
if sl.rMode == 1 then\
|
||
renamebox.x2 = math.min(math.max(NAME.width,#renamebox.txt+5),w)\
|
||
end\
|
||
render()\
|
||
renamebox.render()\
|
||
end\
|
||
if not renamebox.state then\
|
||
local pth = fs.combine(sl.ofolder,renamebox.txt)\
|
||
if renamebox.isShortcut then\
|
||
pth = pth..\".llnk\"\
|
||
end\
|
||
if pth == sl.renaming or fs.combine(pth,\"\") == sl.ofolder then\
|
||
-- nothing\
|
||
elseif fs.exists(pth) then\
|
||
local newPth = uFP(pth)\
|
||
local r = {lUtils.popup(\"Rename File\",\"Do you want to rename \\\"\"..fs.getName(sl.renaming):gsub(\"_\",\" \")..\"\\\" to \\\"\"..fs.getName(newPth):gsub(\"_\",\" \")..\"\\\"?\\n\\nThere is already a file with the same name in this location.\",41,11,{\"Yes\",\"No\"})}\
|
||
if r[1] and r[3] == \"Yes\" then\
|
||
fs.move(sl.renaming,newPth)\
|
||
end\
|
||
else\
|
||
fs.move(sl.renaming,pth)\
|
||
end\
|
||
renamebox = nil\
|
||
sl.renamebox = nil\
|
||
sl.renaming = nil\
|
||
term.setCursorBlink(false)\
|
||
s.win.setPaletteColor(colors.pink,unpack(sl.opink))\
|
||
updateFiles()\
|
||
render()\
|
||
end\
|
||
else\
|
||
if e[1] == \"mouse_move\" or e[1] == \"mouse_up\" or e[1] == \"mouse_click\" then\
|
||
mSelected = nil\
|
||
end\
|
||
if sl.ofolder ~= sl.folder then\
|
||
scrollY = 0\
|
||
sl.ofolder = sl.folder\
|
||
ofolder = sl.folder\
|
||
table.insert(sl.history,sl.folder)\
|
||
sl.rhistory = {}\
|
||
sl.search = nil\
|
||
updateFiles()\
|
||
render()\
|
||
elseif ofolder ~= sl.folder then\
|
||
ofolder = sl.folder\
|
||
sl.search = nil\
|
||
updateFiles()\
|
||
render()\
|
||
elseif (e[1] == \"timer\" and tID == e[2]) or os.epoch(\"utc\") > timerTimeout then\
|
||
if not (e[1] == \"timer\" and tID == e[2]) then\
|
||
_G.expLog = \"Timer timed out at \"..os.date()\
|
||
end\
|
||
updateFiles()\
|
||
render()\
|
||
tID = os.startTimer(4)\
|
||
timerTimeout = os.epoch(\"utc\")+15000\
|
||
end\
|
||
if e[1] == \"mouse_scroll\" and lUtils.isInside(e[3],e[4],sObj) then\
|
||
if sl.rMode == 1 and ((e[2] > 0 and #files+scrollY > h-2) or (e[2] < 0 and scrollY < 0)) then\
|
||
scrollY = scrollY-e[2]\
|
||
elseif sl.rMode == 2 and ((e[2] > 0 and files[#files].y2+1 > h) or (e[2] < 0 and scrollY < 0)) then\
|
||
scrollY = scrollY-e[2]\
|
||
end\
|
||
render()\
|
||
elseif (e[1] == \"mouse_click\" or e[1] == \"mouse_up\" or e[1] == \"mouse_move\" or e[1] == \"mouse_drag\") and e[3] and e[4] and lUtils.isInside(e[3],e[4],sObj) then\
|
||
if e[1] == \"mouse_move\" then\
|
||
if not mousemove then\
|
||
shapescape.getSlide().win.setPaletteColor(colors.pink,0.15,0.15,0.15)\
|
||
mousemove = true\
|
||
end\
|
||
mSelected = {e[3],e[4]}\
|
||
render()\
|
||
elseif not (sl.rMode == 1 and e[4] <= 1) then\
|
||
local clickedfile = false\
|
||
if not (sl.rMode == 1 and e[4] == 2) then\
|
||
for i,f in ipairs(files) do\
|
||
if f.x1 and lUtils.isInside(e[3],e[4],f) then\
|
||
clickedfile = true\
|
||
if e[1] == \"mouse_drag\" and e[2] == 2 then\
|
||
selected[f.path] = f\
|
||
if sl.ret then\
|
||
if (f.isDir and tArgs[2] == \"SelFolder\") or (tArgs[2] == \"SelFile\" and not f.isDir) then\
|
||
sl.ret[f.path] = f\
|
||
updateReturn()\
|
||
end\
|
||
end\
|
||
elseif e[1] == \"mouse_click\" then\
|
||
if e[2] == 1 then\
|
||
if lUtils.isHolding(keys.leftShift) then\
|
||
local startSel = math.huge\
|
||
local endSel = -1\
|
||
for i1,f1 in ipairs(files) do\
|
||
if selected[f1.path] then\
|
||
if i1 < startSel then\
|
||
startSel = i1\
|
||
end\
|
||
if i1 > endSel then\
|
||
endSel = i1\
|
||
end\
|
||
end\
|
||
end\
|
||
if i > startSel and i > endSel then\
|
||
if startSel < 0 then\
|
||
startSel = i\
|
||
end\
|
||
endSel = i\
|
||
elseif i >= startSel and i < endSel then\
|
||
if startSel < 0 then\
|
||
startSel = i\
|
||
end\
|
||
endSel = i\
|
||
elseif i < startSel then\
|
||
startSel,endSel = i,startSel\
|
||
end\
|
||
selected = {}\
|
||
for i1=startSel,endSel do\
|
||
selected[files[i1].path] = files[i1]\
|
||
if (files[i1].isDir and tArgs[2] == \"SelFolder\") or (tArgs[2] == \"SelFile\" and not files[i1].isDir) then\
|
||
sl.ret[files[i1].path] = files[i1]\
|
||
updateReturn()\
|
||
end\
|
||
end\
|
||
elseif lUtils.isHolding(keys.leftCtrl) then\
|
||
if selected[f.path] then\
|
||
selected[f.path] = nil\
|
||
if sl.ret then\
|
||
if count(sl.ret) > 1 then\
|
||
sl.ret[f.path] = nil\
|
||
updateReturn()\
|
||
end\
|
||
end\
|
||
else\
|
||
selected[f.path] = f\
|
||
if (f.isDir and tArgs[2] == \"SelFolder\") or (tArgs[2] == \"SelFile\" and not f.isDir) then\
|
||
sl.ret[f.path] = f\
|
||
updateReturn()\
|
||
end\
|
||
end\
|
||
elseif selected[f.path] and count(selected) == 1 and selected[f.path].lastClick and selected[f.path].lastClick > os.epoch(\"utc\")-1000 then\
|
||
local nf = f\
|
||
local cmd = nf.path\
|
||
local invalidShort = false\
|
||
if shortcache[f.path] then\
|
||
local rPath = shortcache[f.path][1]\
|
||
f.sPath = rPath\
|
||
f.sName = fs.getName(rPath)\
|
||
if not fs.exists(rPath) then\
|
||
invalidShort = true\
|
||
else\
|
||
nf = genFile(shortcache[f.path][1])\
|
||
end\
|
||
local args = shortcache[f.path].args\
|
||
if args and #args > 0 then\
|
||
cmd = cmd..\" \"..table.concat(args, \" \")\
|
||
end\
|
||
end\
|
||
if invalidShort then\
|
||
lOS.explorer.fInvShort({file=f},updateFiles,render)\
|
||
else\
|
||
if nf.isDir then\
|
||
selected = {}\
|
||
sl.folder = nf.path\
|
||
updateFiles()\
|
||
scrollY = 0\
|
||
break\
|
||
elseif (tArgs[2] == \"SelFile\") then\
|
||
sl.ret = {[f.path]=f}\
|
||
updateReturn()\
|
||
shapescape.exit({f.path})\
|
||
elseif shortcache[f.path] and shortcache[f.path].program then -- if needs to be executed with special program\
|
||
local p = shortcache[f.path].program\
|
||
if p == \"Lua\" then\
|
||
lOS.execute(cmd)\
|
||
else\
|
||
lOS.execute(p..\" \"..cmd)\
|
||
end\
|
||
elseif fTypes[nf.type] and fTypes[nf.type].program then\
|
||
local p = fTypes[nf.type].program\
|
||
if p == \"Lua\" then\
|
||
lOS.execute(f.path)\
|
||
else\
|
||
lOS.execute(p..\" \"..nf.path)\
|
||
end\
|
||
elseif nf.type == \"\" then\
|
||
lOS.execute(f.path)\
|
||
else\
|
||
fOpenWith({file=nf})\
|
||
-- open with prompt\
|
||
end\
|
||
end\
|
||
else\
|
||
selected = {[f.path]=f}\
|
||
if (f.isDir and tArgs[2] == \"SelFolder\") or (tArgs[2] == \"SelFile\" and not f.isDir) then\
|
||
sl.ret = {[f.path] = f}\
|
||
updateReturn()\
|
||
end\
|
||
f.lastClick = os.epoch(\"utc\")\
|
||
end\
|
||
elseif e[2] == 2 then\
|
||
if count(selected) > 0 and not selected[f.path] then\
|
||
selected = {[f.path]=f}\
|
||
if (f.isDir and tArgs[2] == \"SelFolder\") or (tArgs[2] == \"SelFile\" and not f.isDir) then\
|
||
sl.ret = {[f.path] = f}\
|
||
updateReturn()\
|
||
end\
|
||
end\
|
||
end\
|
||
elseif e[1] == \"mouse_up\" then\
|
||
if e[2] == 2 then\
|
||
if count(selected) > 0 then\
|
||
cMenu(f,e[3],e[4])\
|
||
else\
|
||
clickedfile = false\
|
||
end\
|
||
end\
|
||
end\
|
||
break\
|
||
end\
|
||
end\
|
||
end\
|
||
if not clickedfile then\
|
||
selected = {}\
|
||
if e[1] == \"mouse_up\" and e[2] == 2 then\
|
||
cMenu(nil, e[3], e[4])\
|
||
end\
|
||
end\
|
||
render()\
|
||
elseif sl.rMode == 1 and e[4] == 1 then\
|
||
if e[1] == \"mouse_click\" and e[2] == 1 then\
|
||
for k,v in ipairs(tabs) do\
|
||
if e[3] == v.x+v.width-1 then\
|
||
dragmenu = v\
|
||
end\
|
||
end\
|
||
elseif e[1] == \"mouse_up\" and e[2] == 2 then\
|
||
local opt = {}\
|
||
for t=1,#config.tabs do\
|
||
local o = {}\
|
||
if config.tabs[t].on then\
|
||
o.txt = {\" \\7 \"..config.tabs[t][1],\"\",\"888\"}\
|
||
else\
|
||
o.txt = \" \"..config.tabs[t][1]\
|
||
end\
|
||
o.action = function() config.tabs[t].on = not config.tabs[t].on saveConfig() sl.reload = true os.queueEvent(\"explorer_reload\") os.queueEvent(\"explorer_reload\") end\
|
||
table.insert(opt,o)\
|
||
end\
|
||
lOS.contextmenu(e[3],e[4],20,opt)\
|
||
end\
|
||
end\
|
||
elseif e[1] == \"term_resize\" or e[1] == \"explorer_reload\" then\
|
||
updateFiles()\
|
||
render()\
|
||
saveConfig()\
|
||
end\
|
||
end\
|
||
sl.selected = selected\
|
||
end",
|
||
name = "mainscreen.lua",
|
||
},
|
||
[ "topbar.lua" ] = {
|
||
id = 2,
|
||
content = "local sl = shapescape.getSlides()\
|
||
local function split(str, pat)\
|
||
local t = {} -- NOTE: use {n = 0} in Lua-5.0\
|
||
local fpat = \"(.-)\" .. pat\
|
||
local last_end = 1\
|
||
local s, e, cap = str:find(fpat, 1)\
|
||
while s do\
|
||
if s ~= 1 or cap ~= \"\" then\
|
||
table.insert(t,cap)\
|
||
end\
|
||
last_end = e+1\
|
||
s, e, cap = str:find(fpat, last_end)\
|
||
end\
|
||
if last_end <= #str then\
|
||
cap = str:sub(last_end)\
|
||
table.insert(t, cap)\
|
||
end\
|
||
return t\
|
||
end\
|
||
local function split_path(str)\
|
||
return split(str,'[\\\\/]+')\
|
||
end\
|
||
sl.split_path = split_path\
|
||
local robjs = {}\
|
||
local function render()\
|
||
local w,h = term.getSize()\
|
||
term.setBackgroundColor(colors.black)\
|
||
term.setTextColor(colors.gray)\
|
||
lUtils.border(1,1,w,h,\"fill\",2)\
|
||
robjs = {w=1}\
|
||
local olist = {}\
|
||
local cPath = split_path(sl.folder)\
|
||
table.insert(cPath,1,\"\")\
|
||
local isDisk\
|
||
local isRom\
|
||
local ico = sl.getIcon(sl.folder)\
|
||
if sl.search then\
|
||
local str = \"Search Results in \"..sl.getName(sl.folder)\
|
||
if robjs.w+#str+3 > w-2 then\
|
||
robjs[1] = {\" \\171 \"}\
|
||
else\
|
||
table.insert(robjs,{\" > \"})\
|
||
table.insert(robjs,{str})\
|
||
robjs.w = robjs.w+#str+3\
|
||
ico = {\"\",lUtils.toBlit(colors.lightBlue)}\
|
||
end\
|
||
else\
|
||
for i=#cPath,1,-1 do\
|
||
local str\
|
||
if i == 2 and sl.disks[cPath[2]] and sl.disks[cPath[i]].getDiskLabel() then\
|
||
str = string.gsub(cPath[2],\"_\",\" \")..\" (\"..sl.disks[cPath[2]].getDiskLabel()..\")\"\
|
||
isDisk = true\
|
||
elseif i == 1 then\
|
||
str = \"Local disk\"\
|
||
else\
|
||
str = string.gsub(cPath[i],\"_\",\" \")\
|
||
end\
|
||
if i == 2 and str == \"rom\" then\
|
||
isRom = true\
|
||
end\
|
||
if robjs.w+#str+3 > w-2 then\
|
||
for t=1,i do\
|
||
olist[t] = cPath[t]\
|
||
end\
|
||
if olist[2] and (sl.disks[olist[2]] or olist[2] == \"rom\") then\
|
||
table.remove(olist,1)\
|
||
end\
|
||
robjs[1] = {\" \\171 \",list=olist}\
|
||
break\
|
||
else\
|
||
table.insert(robjs,1,{str,path=fs.combine(table.unpack(cPath,1,i))})\
|
||
table.insert(robjs,1,{\" > \"})\
|
||
robjs.w = robjs.w+#str+3\
|
||
end\
|
||
if isDisk or isRom then\
|
||
break\
|
||
end\
|
||
end\
|
||
end\
|
||
term.setCursorPos(2,2)\
|
||
term.blit(ico[1],ico[2],lUtils.toBlit(term.getBackgroundColor()))\
|
||
robjs[1].x = 3\
|
||
term.setTextColor(colors.lightGray)\
|
||
term.write(robjs[1][1])\
|
||
\
|
||
for i=2,#robjs do\
|
||
robjs[i].x = robjs[i-1].x+#robjs[i-1][1]\
|
||
if robjs[i][1] == \" > \" then\
|
||
term.setTextColor(colors.lightGray)\
|
||
else\
|
||
term.setTextColor(colors.white)\
|
||
end\
|
||
term.write(robjs[i][1])\
|
||
end\
|
||
end\
|
||
\
|
||
render()\
|
||
os.sleep(0.5)\
|
||
render()\
|
||
local ofolder = sl.folder\
|
||
local function gotofolder(obj)\
|
||
sl.folder = obj.path\
|
||
os.queueEvent(\"explorer_update\")\
|
||
os.queueEvent(\"explorer_update\")\
|
||
end\
|
||
local getIcon = sl.getIcon\
|
||
local ow,oh = term.getSize()\
|
||
local osearch = sl.search\
|
||
while true do\
|
||
local e = {os.pullEvent()}\
|
||
local w,h = term.getSize()\
|
||
if e[1] == \"term_resize\" or ofolder ~= sl.folder or ow ~= w or oh ~= h or osearch ~= sl.search then\
|
||
ow,oh = w,h\
|
||
ofolder = sl.folder\
|
||
osearch = sl.search\
|
||
render()\
|
||
elseif e[1]:find(\"mouse\") and e[3] and e[4] and e[4] == 2 and e[3] > 1 and e[3] < w then\
|
||
render()\
|
||
local cObj = false\
|
||
for k,v in ipairs(robjs) do\
|
||
if e[3] >= v.x and e[3] <= v.x+(#v[1]-1) then\
|
||
cObj = true\
|
||
local int = 1\
|
||
local a = v\
|
||
if a[1] == \" > \" and k > 1 then\
|
||
int = 2\
|
||
a = robjs[k-1]\
|
||
k = k-1\
|
||
end\
|
||
if e[1] == \"mouse_click\" then\
|
||
term.setBackgroundColor(colors.gray)\
|
||
term.setCursorPos(a.x,2)\
|
||
term.setTextColor(colors.white)\
|
||
term.write(a[1])\
|
||
if robjs[k+1] and k > 1 then\
|
||
term.setTextColor(colors.lightGray)\
|
||
term.write(\" > \")\
|
||
end\
|
||
elseif e[1] == \"mouse_up\" then\
|
||
if k == 1 and a.list then\
|
||
-- idk\
|
||
if a.list then\
|
||
--sl.dropdown = {self.x1+a.x-3,self.y2,0,a.list}\
|
||
local opt = {}\
|
||
for f=#a.list,1,-1 do\
|
||
local pth = fs.combine(unpack(a.list,1,f))\
|
||
local ico = getIcon(pth)\
|
||
table.insert(opt,{txt={ico[1]..\" \"..sl.getName(a.list[f]),ico[2]},path=pth,action=gotofolder})\
|
||
end\
|
||
sl.dropdown = {self.x1+a.x-3,self.y2,0,opt,{bg=colors.white,fg=colors.lightGray,txt=colors.black}}\
|
||
end\
|
||
elseif int == 1 and a.path then\
|
||
sl.folder = a.path\
|
||
os.queueEvent(\"explorer_change_folder\")\
|
||
elseif a.path then\
|
||
term.setCursorPos(a.x,2)\
|
||
term.setBackgroundColor(colors.gray)\
|
||
term.setTextColor(colors.white)\
|
||
term.write(a[1])\
|
||
term.setTextColor(colors.lightGray)\
|
||
term.write(\" \\31 \")\
|
||
os.sleep(0)\
|
||
local opt = {}\
|
||
local ls = fs.list(a.path)\
|
||
for f=1,#ls do\
|
||
local pth = fs.combine(a.path,ls[f])\
|
||
if fs.isDir(pth) then\
|
||
local ico = getIcon(pth)\
|
||
table.insert(opt,{txt={ico[1]..\" \"..ls[f],ico[2]},path=pth,action=gotofolder})\
|
||
if robjs[k+2] and robjs[k+2][1] == ls[f] then\
|
||
opt[#opt].color = colors.black\
|
||
--table.insert(opt,{txt=\"\\7 \"..ls[f],path=fs.combine(a.path,ls[f]),color=colors.black,action=gotofolder})\
|
||
--else\
|
||
--table.insert(opt,{txt=\" \"..ls[f],path=fs.combine(a.path,ls[f]),action=gotofolder})\
|
||
end\
|
||
end\
|
||
end\
|
||
sl.dropdown = {self.x1+a.x+#a[1]-3,self.y2,0,opt,{bg=colors.white,fg=colors.lightGray,txt=colors.gray}}\
|
||
render()\
|
||
--os.pullEvent()\
|
||
-- dropdown menu\
|
||
end\
|
||
end\
|
||
end\
|
||
end\
|
||
if not cObj then\
|
||
if e[1] == \"mouse_up\" then\
|
||
local w,h = term.getSize()\
|
||
term.setBackgroundColor(colors.black)\
|
||
term.setTextColor(colors.gray)\
|
||
lUtils.border(1,1,w,h,\"fill\",2)\
|
||
local ico = sl.getIcon(sl.folder)\
|
||
term.setCursorPos(2,2)\
|
||
term.blit(ico[1],ico[2],lUtils.toBlit(term.getBackgroundColor()))\
|
||
term.setTextColor(colors.white)\
|
||
local ibox = lUtils.input(4,2,w-1,2,{text=sl.folder,overflowY=\"none\",overflowX=\"scroll\",selectColor=colors.blue})\
|
||
ibox.state = true\
|
||
--ibox.txt = sl.folder\
|
||
ibox.select = {1,#ibox.txt}\
|
||
ibox.cursor.a = #ibox.txt+1\
|
||
ibox.cursor.x = #ibox.txt+1\
|
||
ibox.update(\"timer\")\
|
||
ibox.render()\
|
||
while ibox.state do\
|
||
local e = {os.pullEvent()}\
|
||
if e[1] == \"char\" and e[2] == \" \" then\
|
||
e[2] = \"_\"\
|
||
end\
|
||
if e[1] == \"key\" and e[2] == keys.enter then\
|
||
break\
|
||
else\
|
||
ibox.update(unpack(e))\
|
||
ibox.render()\
|
||
end\
|
||
end\
|
||
term.setCursorBlink(false)\
|
||
if fs.exists(ibox.txt) then\
|
||
sl.folder = fs.combine(ibox.txt,\"\")\
|
||
end\
|
||
render()\
|
||
end\
|
||
end\
|
||
end\
|
||
end",
|
||
name = "topbar.lua",
|
||
},
|
||
[ "searchupdate.lua" ] = {
|
||
id = 20,
|
||
content = "local sl = shapescape.getSlides()\
|
||
while true do\
|
||
local e = {os.pullEvent()}\
|
||
if self.state and e[1] == \"key\" and e[2] == keys.enter then\
|
||
self.state = false\
|
||
if #self.txt >= 1 then\
|
||
sl.search = self.txt\
|
||
os.queueEvent(\"explorer_reload\")\
|
||
end\
|
||
end\
|
||
end",
|
||
name = "searchupdate.lua",
|
||
},
|
||
}
|
||
|
||
local nAssets = {}
|
||
for key,value in pairs(assets) do nAssets[key] = value nAssets[assets[key].id] = assets[key] end
|
||
assets = nAssets
|
||
nAssets = nil
|
||
|
||
local slides = {
|
||
{
|
||
y = 22,
|
||
x = 65,
|
||
h = 19,
|
||
w = 51,
|
||
objs = {
|
||
{
|
||
type = "rect",
|
||
x2 = 14,
|
||
y2 = 19,
|
||
y1 = 3,
|
||
x1 = 12,
|
||
color = 32768,
|
||
oy2 = 0,
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = 4,
|
||
},
|
||
},
|
||
snap = {
|
||
Top = "Snap top",
|
||
Right = "Snap left",
|
||
Left = "Snap left",
|
||
Bottom = "Snap bottom",
|
||
},
|
||
border = {
|
||
color = 128,
|
||
type = 1,
|
||
},
|
||
},
|
||
{
|
||
type = "rect",
|
||
color = 32768,
|
||
y2 = 3,
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
ox2 = 0,
|
||
x2 = 51,
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
x1 = 1,
|
||
snap = {
|
||
Top = "Snap top",
|
||
Right = "Snap right",
|
||
Left = "Snap left",
|
||
Bottom = "Snap top",
|
||
},
|
||
y1 = 1,
|
||
},
|
||
{
|
||
txt = " ",
|
||
type = "text",
|
||
color = 0,
|
||
y2 = 2,
|
||
y1 = 2,
|
||
txtcolor = 128,
|
||
x2 = 2,
|
||
input = false,
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = 5,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
x1 = 1,
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
},
|
||
{
|
||
txt = "",
|
||
type = "text",
|
||
x2 = 5,
|
||
y2 = 2,
|
||
y1 = 2,
|
||
txtcolor = 128,
|
||
color = 0,
|
||
input = false,
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = 6,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
x1 = 4,
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
},
|
||
{
|
||
txt = "",
|
||
type = "text",
|
||
color = 0,
|
||
y2 = 2,
|
||
y1 = 2,
|
||
txtcolor = 128,
|
||
x2 = 6,
|
||
input = false,
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = 12,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
x1 = 6,
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
},
|
||
{
|
||
txt = "",
|
||
type = "text",
|
||
color = 0,
|
||
y2 = 2,
|
||
y1 = 2,
|
||
txtcolor = 128,
|
||
x2 = 8,
|
||
input = false,
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = 7,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
x1 = 8,
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
},
|
||
{
|
||
x2 = 51,
|
||
y2 = 19,
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
x1 = 1,
|
||
oy1 = 0,
|
||
txt = " ?? items |",
|
||
type = "text",
|
||
oy2 = 0,
|
||
txtcolor = 1,
|
||
ox2 = 0,
|
||
color = 128,
|
||
y1 = 19,
|
||
input = false,
|
||
snap = {
|
||
Top = "Snap bottom",
|
||
Right = "Snap right",
|
||
Left = "Snap left",
|
||
Bottom = "Snap bottom",
|
||
},
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = 11,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
},
|
||
{
|
||
lines = {
|
||
"",
|
||
},
|
||
color = 32768,
|
||
y2 = 2,
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
x1 = 34,
|
||
scr = 0,
|
||
history = {},
|
||
ox1 = 17,
|
||
changed = false,
|
||
x2 = 49,
|
||
txt = "",
|
||
type = "input",
|
||
blit = {},
|
||
txtcolor = 1,
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = 3,
|
||
},
|
||
update = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = 20,
|
||
},
|
||
},
|
||
rhistory = {},
|
||
ox2 = 2,
|
||
state = false,
|
||
dLines = {
|
||
"",
|
||
},
|
||
opt = {
|
||
overflowX = "scroll",
|
||
overflowY = "none",
|
||
cursorColor = 256,
|
||
indentChar = " ",
|
||
tabSize = 4,
|
||
minWidth = 16,
|
||
overflow = "scroll",
|
||
minHeight = 1,
|
||
},
|
||
cursor = {
|
||
y = 1,
|
||
x = 1,
|
||
a = 1,
|
||
},
|
||
scrollX = 0,
|
||
ref = {
|
||
1,
|
||
1,
|
||
},
|
||
snap = {
|
||
Top = "Snap top",
|
||
Right = "Snap right",
|
||
Left = "Snap right",
|
||
Bottom = "Snap top",
|
||
},
|
||
y1 = 2,
|
||
},
|
||
{
|
||
type = "window",
|
||
color = 32768,
|
||
y2 = 18,
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = 0,
|
||
},
|
||
update = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
ox2 = 0,
|
||
oy2 = 1,
|
||
x2 = 51,
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
input = false,
|
||
x1 = 15,
|
||
snap = {
|
||
Top = "Snap top",
|
||
Right = "Snap right",
|
||
Left = "Snap left",
|
||
Bottom = "Snap bottom",
|
||
},
|
||
y1 = 4,
|
||
},
|
||
{
|
||
type = "window",
|
||
color = 128,
|
||
y2 = 18,
|
||
oy2 = 1,
|
||
x1 = 1,
|
||
x2 = 13,
|
||
event = {
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = 1,
|
||
},
|
||
update = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
input = false,
|
||
y1 = 4,
|
||
snap = {
|
||
Top = "Snap top",
|
||
Right = "Snap left",
|
||
Left = "Snap left",
|
||
Bottom = "Snap bottom",
|
||
},
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
},
|
||
{
|
||
type = "window",
|
||
color = 256,
|
||
y2 = 3,
|
||
y1 = 1,
|
||
ox2 = 20,
|
||
x2 = 31,
|
||
x1 = 10,
|
||
input = false,
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = 2,
|
||
},
|
||
update = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
snap = {
|
||
Top = "Snap top",
|
||
Right = "Snap right",
|
||
Left = "Snap left",
|
||
Bottom = "Snap top",
|
||
},
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
},
|
||
{
|
||
txt = "dropdown",
|
||
type = "text",
|
||
color = 0,
|
||
y2 = 1,
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
txtcolor = 1,
|
||
x2 = 8,
|
||
input = false,
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = 13,
|
||
},
|
||
},
|
||
x1 = 1,
|
||
y1 = 1,
|
||
},
|
||
{
|
||
x2 = 48,
|
||
y2 = 19,
|
||
x1 = 48,
|
||
ox1 = 3,
|
||
oy1 = 0,
|
||
txt = "=",
|
||
type = "text",
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = 21,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
ox2 = 3,
|
||
y1 = 19,
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
color = 0,
|
||
input = false,
|
||
txtcolor = 1,
|
||
snap = {
|
||
Top = "Snap bottom",
|
||
Right = "Snap right",
|
||
Left = "Snap right",
|
||
Bottom = "Snap bottom",
|
||
},
|
||
oy2 = 0,
|
||
},
|
||
{
|
||
x2 = 50,
|
||
y2 = 19,
|
||
x1 = 50,
|
||
ox1 = 1,
|
||
oy1 = 0,
|
||
txt = "",
|
||
type = "text",
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = 22,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
ox2 = 1,
|
||
y1 = 19,
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
color = 0,
|
||
input = false,
|
||
txtcolor = 8,
|
||
snap = {
|
||
Top = "Snap bottom",
|
||
Right = "Snap right",
|
||
Left = "Snap right",
|
||
Bottom = "Snap bottom",
|
||
},
|
||
oy2 = 0,
|
||
},
|
||
},
|
||
c = 1,
|
||
},
|
||
{
|
||
y = 22,
|
||
x = 65,
|
||
h = 19,
|
||
w = 51,
|
||
objs = {
|
||
{
|
||
type = "window",
|
||
color = 32768,
|
||
y2 = 19,
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = 8,
|
||
},
|
||
update = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
x1 = 1,
|
||
x2 = 51,
|
||
ox2 = 0,
|
||
oy2 = 0,
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
snap = {
|
||
Top = "Snap top",
|
||
Right = "Snap right",
|
||
Left = "Snap left",
|
||
Bottom = "Snap bottom",
|
||
},
|
||
y1 = 1,
|
||
},
|
||
{
|
||
type = "rect",
|
||
oy2 = -9,
|
||
color = 1,
|
||
y2 = 19,
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
ox2 = -12,
|
||
x2 = 38,
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = 9,
|
||
},
|
||
update = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
x1 = 14,
|
||
ox1 = 12,
|
||
oy1 = 9,
|
||
snap = {
|
||
Top = "Snap center",
|
||
Right = "Snap center",
|
||
Left = "Snap center",
|
||
Bottom = "Snap center",
|
||
},
|
||
y1 = 1,
|
||
},
|
||
{
|
||
x2 = 37,
|
||
y2 = 3,
|
||
x1 = 15,
|
||
ox1 = 11,
|
||
oy1 = 8,
|
||
txt = "How do you want to open this file?",
|
||
type = "text",
|
||
oy2 = 7,
|
||
txtcolor = 32768,
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
color = 0,
|
||
input = false,
|
||
y1 = 2,
|
||
snap = {
|
||
Top = "Snap center",
|
||
Right = "Snap center",
|
||
Left = "Snap center",
|
||
Bottom = "Snap center",
|
||
},
|
||
ox2 = -11,
|
||
},
|
||
{
|
||
type = "window",
|
||
oy2 = -2,
|
||
color = 1,
|
||
y2 = 12,
|
||
y1 = 4,
|
||
ox2 = -12,
|
||
x2 = 38,
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = 17,
|
||
},
|
||
update = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
x1 = 14,
|
||
ox1 = 12,
|
||
oy1 = 6,
|
||
snap = {
|
||
Top = "Snap center",
|
||
Right = "Snap center",
|
||
Left = "Snap center",
|
||
Bottom = "Snap center",
|
||
},
|
||
border = {
|
||
color = 256,
|
||
type = 1,
|
||
},
|
||
},
|
||
{
|
||
color = 0,
|
||
y2 = 16,
|
||
x1 = 19,
|
||
ox1 = 7,
|
||
oy1 = -4,
|
||
txt = "Always use this app for ??? files",
|
||
type = "text",
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = 10,
|
||
},
|
||
},
|
||
txtcolor = 32768,
|
||
oy2 = -6,
|
||
y1 = 14,
|
||
x2 = 37,
|
||
input = false,
|
||
ox2 = -11,
|
||
snap = {
|
||
Top = "Snap center",
|
||
Right = "Snap center",
|
||
Left = "Snap center",
|
||
Bottom = "Snap center",
|
||
},
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
},
|
||
{
|
||
color = 256,
|
||
y2 = 18,
|
||
x1 = 28,
|
||
ox1 = -2,
|
||
oy1 = -6,
|
||
txt = " OK",
|
||
type = "text",
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = 19,
|
||
},
|
||
},
|
||
ox2 = -11,
|
||
txtcolor = 32768,
|
||
y1 = 16,
|
||
x2 = 37,
|
||
input = false,
|
||
oy2 = -8,
|
||
snap = {
|
||
Top = "Snap center",
|
||
Right = "Snap center",
|
||
Left = "Snap center",
|
||
Bottom = "Snap center",
|
||
},
|
||
border = {
|
||
color = 1,
|
||
type = 1,
|
||
},
|
||
},
|
||
{
|
||
type = "rect",
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = 18,
|
||
},
|
||
},
|
||
x2 = 17,
|
||
y2 = 15,
|
||
y1 = 14,
|
||
ox2 = 9,
|
||
color = 0,
|
||
oy2 = -5,
|
||
x1 = 15,
|
||
ox1 = 11,
|
||
oy1 = -4,
|
||
snap = {
|
||
Top = "Snap center",
|
||
Right = "Snap center",
|
||
Left = "Snap center",
|
||
Bottom = "Snap center",
|
||
},
|
||
border = {
|
||
color = 256,
|
||
type = 1,
|
||
},
|
||
},
|
||
},
|
||
c = 2,
|
||
},
|
||
{
|
||
y = 21,
|
||
x = 65,
|
||
h = 19,
|
||
w = 51,
|
||
objs = {
|
||
{
|
||
type = "rect",
|
||
x2 = 14,
|
||
y2 = 15,
|
||
border = {
|
||
color = 128,
|
||
type = 1,
|
||
},
|
||
x1 = 12,
|
||
color = 32768,
|
||
oy2 = 4,
|
||
y1 = 3,
|
||
snap = {
|
||
Top = "Snap top",
|
||
Right = "Snap left",
|
||
Left = "Snap left",
|
||
Bottom = "Snap bottom",
|
||
},
|
||
event = {
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = 4,
|
||
},
|
||
update = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
},
|
||
{
|
||
type = "rect",
|
||
color = 32768,
|
||
y2 = 3,
|
||
y1 = 1,
|
||
x1 = 1,
|
||
x2 = 51,
|
||
event = {
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
ox2 = 0,
|
||
snap = {
|
||
Top = "Snap top",
|
||
Right = "Snap right",
|
||
Left = "Snap left",
|
||
Bottom = "Snap top",
|
||
},
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
},
|
||
{
|
||
txt = " ",
|
||
type = "text",
|
||
color = 0,
|
||
y2 = 2,
|
||
y1 = 2,
|
||
txtcolor = 128,
|
||
x2 = 2,
|
||
input = false,
|
||
event = {
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = 5,
|
||
},
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
x1 = 1,
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
},
|
||
{
|
||
txt = "",
|
||
type = "text",
|
||
x2 = 5,
|
||
y2 = 2,
|
||
y1 = 2,
|
||
txtcolor = 128,
|
||
color = 0,
|
||
input = false,
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = 6,
|
||
},
|
||
},
|
||
x1 = 4,
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
},
|
||
{
|
||
txt = "",
|
||
type = "text",
|
||
color = 0,
|
||
y2 = 2,
|
||
y1 = 2,
|
||
txtcolor = 128,
|
||
x2 = 6,
|
||
input = false,
|
||
event = {
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = 12,
|
||
},
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
x1 = 6,
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
},
|
||
{
|
||
txt = "",
|
||
type = "text",
|
||
color = 0,
|
||
y2 = 2,
|
||
y1 = 2,
|
||
txtcolor = 128,
|
||
x2 = 8,
|
||
input = false,
|
||
event = {
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = 7,
|
||
},
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
x1 = 8,
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
},
|
||
{
|
||
lines = {
|
||
"",
|
||
},
|
||
color = 32768,
|
||
y2 = 2,
|
||
y1 = 2,
|
||
x1 = 34,
|
||
scrollX = 0,
|
||
cursor = {
|
||
y = 1,
|
||
x = 1,
|
||
a = 1,
|
||
},
|
||
ox1 = 17,
|
||
x2 = 49,
|
||
txt = "",
|
||
opt = {
|
||
overflowX = "scroll",
|
||
overflowY = "none",
|
||
cursorColor = 256,
|
||
indentChar = " ",
|
||
tabSize = 4,
|
||
minWidth = 16,
|
||
overflow = "scroll",
|
||
minHeight = 1,
|
||
},
|
||
ox2 = 2,
|
||
state = false,
|
||
history = {},
|
||
event = {
|
||
render = {
|
||
[ 2 ] = 3,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
rhistory = {},
|
||
txtcolor = 1,
|
||
blit = {},
|
||
dLines = {
|
||
"",
|
||
},
|
||
type = "input",
|
||
scr = 0,
|
||
changed = false,
|
||
ref = {
|
||
1,
|
||
1,
|
||
},
|
||
snap = {
|
||
Top = "Snap top",
|
||
Right = "Snap right",
|
||
Left = "Snap right",
|
||
Bottom = "Snap top",
|
||
},
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
},
|
||
{
|
||
type = "window",
|
||
color = 32768,
|
||
y2 = 14,
|
||
oy2 = 5,
|
||
x1 = 15,
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
x2 = 51,
|
||
ox2 = 0,
|
||
input = false,
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = 0,
|
||
},
|
||
update = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
snap = {
|
||
Top = "Snap top",
|
||
Right = "Snap right",
|
||
Left = "Snap left",
|
||
Bottom = "Snap bottom",
|
||
},
|
||
y1 = 4,
|
||
},
|
||
{
|
||
type = "window",
|
||
x2 = 13,
|
||
y2 = 14,
|
||
y1 = 4,
|
||
x1 = 1,
|
||
color = 128,
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = 1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
input = false,
|
||
oy2 = 5,
|
||
snap = {
|
||
Top = "Snap top",
|
||
Right = "Snap left",
|
||
Left = "Snap left",
|
||
Bottom = "Snap bottom",
|
||
},
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
},
|
||
{
|
||
type = "window",
|
||
x2 = 31,
|
||
y2 = 3,
|
||
y1 = 1,
|
||
x1 = 10,
|
||
color = 256,
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = 2,
|
||
},
|
||
update = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
input = false,
|
||
ox2 = 20,
|
||
snap = {
|
||
Top = "Snap top",
|
||
Right = "Snap right",
|
||
Left = "Snap left",
|
||
Bottom = "Snap top",
|
||
},
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
},
|
||
{
|
||
txt = "dropdown",
|
||
type = "text",
|
||
color = 0,
|
||
y2 = 1,
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
txtcolor = 1,
|
||
x2 = 8,
|
||
input = false,
|
||
event = {
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = 13,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
x1 = 1,
|
||
y1 = 1,
|
||
},
|
||
{
|
||
type = "rect",
|
||
color = 128,
|
||
y2 = 19,
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
x1 = 1,
|
||
y1 = 15,
|
||
x2 = 51,
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
ox2 = 0,
|
||
oy1 = 4,
|
||
snap = {
|
||
Top = "Snap bottom",
|
||
Right = "Snap right",
|
||
Left = "Snap left",
|
||
Bottom = "Snap bottom",
|
||
},
|
||
oy2 = 0,
|
||
},
|
||
{
|
||
color = 32768,
|
||
y2 = 18,
|
||
x1 = 43,
|
||
ox1 = 8,
|
||
oy1 = 1,
|
||
txt = " Cancel",
|
||
type = "text",
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = 16,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
ox2 = 1,
|
||
txtcolor = 1,
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
x2 = 50,
|
||
input = false,
|
||
y1 = 18,
|
||
snap = {
|
||
Top = "Snap bottom",
|
||
Right = "Snap right",
|
||
Left = "Snap right",
|
||
Bottom = "Snap bottom",
|
||
},
|
||
oy2 = 1,
|
||
},
|
||
{
|
||
x2 = 41,
|
||
y2 = 18,
|
||
x1 = 34,
|
||
ox1 = 17,
|
||
oy1 = 1,
|
||
txt = " Select",
|
||
type = "text",
|
||
event = {
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_up = {
|
||
[ 2 ] = 15,
|
||
},
|
||
},
|
||
txtcolor = 1,
|
||
y1 = 18,
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
color = 32768,
|
||
input = false,
|
||
ox2 = 10,
|
||
snap = {
|
||
Top = "Snap bottom",
|
||
Right = "Snap right",
|
||
Left = "Snap right",
|
||
Bottom = "Snap bottom",
|
||
},
|
||
oy2 = 1,
|
||
},
|
||
{
|
||
color = 0,
|
||
y2 = 16,
|
||
x1 = 4,
|
||
oy1 = 3,
|
||
txt = "File Name:",
|
||
type = "text",
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
txtcolor = 1,
|
||
oy2 = 3,
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
input = false,
|
||
x2 = 13,
|
||
snap = {
|
||
Top = "Snap bottom",
|
||
Right = "Snap left",
|
||
Left = "Snap left",
|
||
Bottom = "Snap bottom",
|
||
},
|
||
y1 = 16,
|
||
},
|
||
{
|
||
lines = {
|
||
"",
|
||
},
|
||
x2 = 32,
|
||
y2 = 16,
|
||
cursor = {
|
||
y = 1,
|
||
x = 1,
|
||
a = 1,
|
||
},
|
||
x1 = 15,
|
||
state = false,
|
||
scr = 0,
|
||
changed = false,
|
||
oy1 = 3,
|
||
txtcolor = 1,
|
||
txt = "",
|
||
opt = {
|
||
overflowX = "scroll",
|
||
overflowY = "none",
|
||
cursorColor = 1,
|
||
indentChar = " ",
|
||
tabSize = 4,
|
||
minWidth = 9,
|
||
overflow = "scroll",
|
||
minHeight = 1,
|
||
},
|
||
oy2 = 3,
|
||
history = {},
|
||
scrollX = 0,
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = 14,
|
||
},
|
||
update = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
rhistory = {},
|
||
ox2 = 19,
|
||
blit = {},
|
||
dLines = {
|
||
"",
|
||
},
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
type = "input",
|
||
color = 32768,
|
||
ref = {
|
||
1,
|
||
1,
|
||
},
|
||
snap = {
|
||
Top = "Snap bottom",
|
||
Right = "Snap right",
|
||
Left = "Snap left",
|
||
Bottom = "Snap bottom",
|
||
},
|
||
y1 = 16,
|
||
},
|
||
{
|
||
color = 32768,
|
||
y2 = 16,
|
||
x1 = 34,
|
||
ox1 = 17,
|
||
oy1 = 3,
|
||
txt = "All files (*.*) ",
|
||
type = "text",
|
||
event = {
|
||
mouse_up = {
|
||
[ 2 ] = -1,
|
||
},
|
||
mouse_click = {
|
||
[ 2 ] = -1,
|
||
},
|
||
focus = {
|
||
[ 2 ] = -1,
|
||
},
|
||
render = {
|
||
[ 2 ] = -1,
|
||
},
|
||
Coroutine = {
|
||
[ 2 ] = -1,
|
||
},
|
||
update = {
|
||
[ 2 ] = -1,
|
||
},
|
||
},
|
||
ox2 = 1,
|
||
txtcolor = 1,
|
||
border = {
|
||
color = 0,
|
||
type = 1,
|
||
},
|
||
x2 = 50,
|
||
input = false,
|
||
y1 = 16,
|
||
snap = {
|
||
Top = "Snap bottom",
|
||
Right = "Snap right",
|
||
Left = "Snap right",
|
||
Bottom = "Snap bottom",
|
||
},
|
||
oy2 = 3,
|
||
},
|
||
},
|
||
c = 3,
|
||
},
|
||
}
|
||
|
||
for s=1,#slides do
|
||
local slide = slides[s]
|
||
for o=1,#slide.objs do
|
||
local obj = slide.objs[o]
|
||
for key,value in pairs(obj.event) do
|
||
if assets[ value[2] ] then
|
||
lUtils.shapescape.addScript(obj,value[2],key,assets,LevelOS,slides)
|
||
else
|
||
obj.event[key] = {function() end,-1}
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
local tArgs = {...}
|
||
if tArgs[1] and tArgs[1] == "load" then
|
||
return {assets=assets,slides=slides}
|
||
end
|
||
|
||
|
||
return lUtils.shapescape.run(slides,...) |