Upload System Image
This commit is contained in:
1
Program_Files/LevelOS/Notepad/icon.limg
Normal file
1
Program_Files/LevelOS/Notepad/icon.limg
Normal file
@@ -0,0 +1 @@
|
||||
{{{""," ","77 ",},{"","888","77 ",},{"","778","88 ",},},}
|
||||
273
Program_Files/LevelOS/Notepad/main.lua
Normal file
273
Program_Files/LevelOS/Notepad/main.lua
Normal file
@@ -0,0 +1,273 @@
|
||||
local tArgs = {...}
|
||||
local tFilepath = ""
|
||||
if tArgs[1] ~= nil then
|
||||
tFilepath = tArgs[1]
|
||||
end
|
||||
local isReadOnly = false
|
||||
if tArgs[2] ~= nil and tArgs[2] == "true" then
|
||||
isReadOnly = true
|
||||
end
|
||||
local tCol = {bg=colors.white,txt=colors.black,misc=colors.lightGray,misc2=colors.gray}
|
||||
local btns = {{"File",{{"New","New window","Open...","Save","Save as..."},"Print","Quit"}},{"Edit",{"Undo",{"Search","Replace"},{"Time"}}},{"View",{"Dark Mode"}}}
|
||||
local function topbar()
|
||||
local w,h = term.getSize()
|
||||
theline = ""
|
||||
for t=1,w-1 do
|
||||
theline = theline.."\131"
|
||||
end
|
||||
term.setCursorPos(1,1)
|
||||
term.setBackgroundColor(tCol.bg)
|
||||
term.setTextColor(tCol.misc)
|
||||
term.clearLine()
|
||||
term.setCursorPos(1,2)
|
||||
term.write(theline)
|
||||
term.setCursorPos(1,1)
|
||||
term.setTextColor(tCol.txt)
|
||||
for t=1,#btns do
|
||||
btns[t].x = ({term.getCursorPos()})[1]
|
||||
btns[t].w = string.len(btns[t][1])+2
|
||||
term.write(" "..btns[t][1].." ")
|
||||
end
|
||||
end
|
||||
local w,h = term.getSize()
|
||||
local a = {}
|
||||
local function txt()
|
||||
a = {{width=w-1,height=h-4,sTable={},filepath="",lines={""},changed=false},0,0,1,1}
|
||||
if tFilepath ~= "" then
|
||||
if fs.exists(tFilepath) == true then
|
||||
local openfile = fs.open(tFilepath,"r")
|
||||
a[1].lines = {}
|
||||
for line in openfile.readLine do
|
||||
a[1].lines[#a[1].lines+1] = line
|
||||
end
|
||||
openfile.close()
|
||||
if a[1].lines[1] == nil then
|
||||
a[1].lines[1] = ""
|
||||
end
|
||||
end
|
||||
end
|
||||
while true do
|
||||
local w,h = term.getSize()
|
||||
a[1].width = w-1
|
||||
a[1].height = h-4
|
||||
a[1].sTable = {background={tCol.bg},text={tCol.txt},cursor={colors.red}}
|
||||
term.setCursorPos(1,5)
|
||||
term.setBackgroundColor(colors.white)
|
||||
term.setTextColor(colors.black)
|
||||
--print("I am present.")
|
||||
local changesAllowed = true
|
||||
if isReadOnly == true or (tFilepath ~= "" and fs.isReadOnly(tFilepath) == true) then
|
||||
changesAllowed = false
|
||||
end
|
||||
a = {lUtils.drawEditBox(a[1],1,3,a[2],a[3],a[4],a[5],true,true,nil,changesAllowed)}
|
||||
--term.setCursorPos(1,3)
|
||||
--term.clearLine()
|
||||
--term.write("HIII: ")
|
||||
--term.write(textutils.serialize(a))
|
||||
os.sleep(0)
|
||||
end
|
||||
end
|
||||
_G.thetxtfunction = txt
|
||||
local function save()
|
||||
if tFilepath == "" then
|
||||
while true do
|
||||
local i = {lUtils.inputbox("Filepath","Please enter a new filepath:",29,10,{"Done","Cancel"})}
|
||||
if i[2] == false or i[4] == "Cancel" then
|
||||
return false
|
||||
end
|
||||
if fs.exists(i[1]) == true then
|
||||
lUtils.popup("Error","This path already exists!",29,9,{"OK"})
|
||||
else
|
||||
tFilepath = i[1]
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
local savefile = fs.open(tFilepath,"w")
|
||||
for t=1,#a[1].lines do
|
||||
savefile.writeLine(a[1].lines[t])
|
||||
end
|
||||
savefile.close()
|
||||
return true
|
||||
end
|
||||
function uwansave()
|
||||
local name = ""
|
||||
if tFilepath == "" then
|
||||
name = "Untitled"
|
||||
else
|
||||
name = fs.getName(tFilepath)
|
||||
end
|
||||
local c = {lUtils.popup("Notepad","Do you want to save your changes in "..name.."?",30,8,{"Save","Don't save","Cancel"})}
|
||||
if c[1] == false then return false
|
||||
elseif c[3] == "Save" then
|
||||
if tFilepath == "" then
|
||||
-- select file path with explorer asap
|
||||
return false
|
||||
end
|
||||
local ayyy = fs.open(tFilepath,"w")
|
||||
for t=1,#a[1].lines do
|
||||
ayyy.writeLine(a[1].lines[t])
|
||||
end
|
||||
end
|
||||
if c[3] ~= "Cancel" then
|
||||
return true
|
||||
end
|
||||
end
|
||||
local function scrollbars()
|
||||
local w,h = term.getSize()
|
||||
term.setCursorPos(1,h-1)
|
||||
term.setBackgroundColor(tCol.misc)
|
||||
term.setTextColor(tCol.misc2)
|
||||
term.clearLine()
|
||||
term.setCursorPos(1,h-1)
|
||||
term.write("\17")
|
||||
term.setCursorPos(w-1,h-1)
|
||||
term.write("\16")
|
||||
for t=2,h-2 do
|
||||
term.setCursorPos(w,t)
|
||||
if t == 3 then
|
||||
term.write("\30")
|
||||
elseif t == h-2 then
|
||||
term.write("\31")
|
||||
else
|
||||
term.write(" ")
|
||||
end
|
||||
end
|
||||
term.setCursorPos(1,h)
|
||||
for t=1,w do
|
||||
term.write("\131")
|
||||
end
|
||||
end
|
||||
function LevelOS.close()
|
||||
local u = true
|
||||
if a[1].changed == true then
|
||||
u = uwansave()
|
||||
end
|
||||
if u == true then
|
||||
return
|
||||
else
|
||||
regevents()
|
||||
end
|
||||
end
|
||||
function regevents()
|
||||
scrollbars()
|
||||
local txtcor = coroutine.create(txt)
|
||||
topbar()
|
||||
coroutine.resume(txtcor)
|
||||
while true do
|
||||
e = {os.pullEvent()}
|
||||
scrollbars()
|
||||
if not ((e[1] == "mouse_click" or e[1] == "mouse_up") and e[4] == 1) then
|
||||
coroutine.resume(txtcor,table.unpack(e))
|
||||
end
|
||||
--term.setCursorPos(1,3)
|
||||
--term.setBackgroundColor(colors.white)
|
||||
--term.setTextColor(colors.black)
|
||||
--term.clearLine()
|
||||
--term.setCursorPos(1,3)
|
||||
--term.write(coroutine.status(txtcor).." "..textutils.serialize(a[1]))
|
||||
if e[1] == "term_resize" then
|
||||
topbar()
|
||||
scrollbars()
|
||||
coroutine.resume(txtcor,"mouse_click",1,1,1)
|
||||
elseif e[1] == "mouse_click" then
|
||||
if e[4] == 1 then
|
||||
topbar()
|
||||
term.setCursorBlink(false)
|
||||
local oldcursorpos = {term.getCursorPos()}
|
||||
for t=1,#btns do
|
||||
if e[3] >= btns[t].x and e[3] <= btns[t].x+btns[t].w-1 then
|
||||
-- open menu and color button light blue
|
||||
term.setCursorPos(btns[t].x,1)
|
||||
term.setBackgroundColor(colors.blue)
|
||||
term.write(" "..btns[t][1].." ")
|
||||
local disabled = {}
|
||||
if btns[t][1] == "File" then
|
||||
if a[1].changed == false then
|
||||
disabled = {"Save","Save as..."}
|
||||
end
|
||||
end
|
||||
local b = {lUtils.clickmenu(btns[t].x,2,20,btns[t][2],true,disabled)}
|
||||
if b[1] ~= false then
|
||||
if b[3] == "New" then
|
||||
local d = true
|
||||
if a[1].changed == true then
|
||||
d = uwansave()
|
||||
end
|
||||
if d == true then
|
||||
tFilepath = ""
|
||||
txtcor = coroutine.create(txt)
|
||||
os.startTimer(0.1)
|
||||
end
|
||||
elseif b[3] == "New window" then
|
||||
lOS.execute(LevelOS.path)
|
||||
elseif b[3] == "Open..." then
|
||||
local u = true
|
||||
if a[1].changed == true then
|
||||
u = uwansave()
|
||||
end
|
||||
if u == true then
|
||||
local d = {lUtils.explorer("/","SelFile false")}
|
||||
if d[1] ~= nil then
|
||||
if fs.exists(d[1]) == true then
|
||||
a = {}
|
||||
txtcor = coroutine.create(txt)
|
||||
coroutine.resume(txtcor)
|
||||
tFilepath = d[1]
|
||||
local openfile = fs.open(tFilepath,"r")
|
||||
a[1].lines = {}
|
||||
for line in openfile.readLine do
|
||||
a[1].lines[#a[1].lines+1] = line
|
||||
end
|
||||
openfile.close()
|
||||
if a[1].lines[1] == nil then
|
||||
a[1].lines[1] = ""
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif b[3] == "Save" then
|
||||
if save() == true then
|
||||
a[1].changed = false
|
||||
end
|
||||
elseif b[3] == "Save as..." then
|
||||
local oldF = tFilepath
|
||||
tFilepath = ""
|
||||
if save() == false then
|
||||
tFilepath = oldF
|
||||
else
|
||||
a[1].changed = false
|
||||
end
|
||||
elseif b[3] == "Quit" then
|
||||
local u = true
|
||||
if a[1].changed == true then
|
||||
u = uwansave()
|
||||
end
|
||||
if u == true then
|
||||
return
|
||||
end
|
||||
elseif b[3] == "Dark Mode" then
|
||||
tCol = {bg=colors.black,txt=colors.white,misc=colors.gray,misc2=colors.lightGray}
|
||||
topbar()
|
||||
scrollbars()
|
||||
coroutine.resume(txtcor,"mouse_click",1,1,1)
|
||||
btns[3][2][1] = "Light Mode"
|
||||
elseif b[3] == "Light Mode" then
|
||||
tCol = {bg=colors.white,txt=colors.black,misc=colors.lightGray,misc2=colors.gray}
|
||||
topbar()
|
||||
scrollbars()
|
||||
coroutine.resume(txtcor,"mouse_click",1,1,1)
|
||||
btns[3][2][1] = "Dark Mode"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
topbar()
|
||||
term.setCursorPos(table.unpack(oldcursorpos))
|
||||
term.setTextColor(colors.red)
|
||||
term.setCursorBlink(true)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
regevents()
|
||||
1
Program_Files/LevelOS/Notepad/taskbar.limg
Normal file
1
Program_Files/LevelOS/Notepad/taskbar.limg
Normal file
@@ -0,0 +1 @@
|
||||
{{{""," 0","00 ",},{"
","000"," ",},},}
|
||||
Reference in New Issue
Block a user