diff options
| author | Andrew Lee <alee14498@protonmail.com> | 2020-11-15 21:12:34 -0500 |
|---|---|---|
| committer | Andrew Lee <alee14498@protonmail.com> | 2020-11-15 21:12:34 -0500 |
| commit | fb04d5143b20194f98955bd2d151cc80ef00c1a9 (patch) | |
| tree | e5ad4eefee94124824eef85b59fabeb86b3356a5 /Programs/Mouse Browser.bup/Contents/bits-UI/mousebrowser.lua | |
| parent | 111f5257864a9c3ee1714a588ddab918fc07a333 (diff) | |
| download | bits-UI-fb04d5143b20194f98955bd2d151cc80ef00c1a9.tar.gz bits-UI-fb04d5143b20194f98955bd2d151cc80ef00c1a9.tar.bz2 bits-UI-fb04d5143b20194f98955bd2d151cc80ef00c1a9.zip | |
Changed the name for Krist and Mouse Browser
Diffstat (limited to 'Programs/Mouse Browser.bup/Contents/bits-UI/mousebrowser.lua')
| -rw-r--r-- | Programs/Mouse Browser.bup/Contents/bits-UI/mousebrowser.lua | 1298 |
1 files changed, 0 insertions, 1298 deletions
diff --git a/Programs/Mouse Browser.bup/Contents/bits-UI/mousebrowser.lua b/Programs/Mouse Browser.bup/Contents/bits-UI/mousebrowser.lua deleted file mode 100644 index 6757273..0000000 --- a/Programs/Mouse Browser.bup/Contents/bits-UI/mousebrowser.lua +++ /dev/null @@ -1,1298 +0,0 @@ ---[[ - Mouse File Browser - by: - Stiepen irc(Kilobyte) - Cruor - BigSHinyToys - - note: send link to nightin9ale on CC forums ---]] - -local tArgs = {...} -local ver = "1.4" -local sTitle = "File Browser" -local bugTest, norun, dir, showAll -local _tArgs = {} -local config = "mouse.cfg" - -local temp -if shell and shell.getRunningProgram then - temp = shell.getRunningProgram() -end - -temp = temp or "/bla" -local localPath = string.sub(temp,1,#temp-string.len(fs.getName(temp))) -temp = nil -- just because not needed - --- load config file - -local configSet = {} -local cnf = {} - -if fs.exists(localPath.."/"..config) then - local file = fs.open(localPath.."/"..config,"r") - if file then - local item = file.readLine() - while item do - table.insert(cnf,item) - item = file.readLine() - end - file.close() - end -end - -for i = 1,10 do - local test,data = pcall(textutils.unserialize,cnf[i]) - if test then - configSet[i] = data - else - configSet[i] = nil - end -end -cnf = nil - --- color configuration work in progress -local titleBar = configSet[1] or {txt = colors.black,back = colors.blue} -local addressBar = configSet[2] or {txt = colors.black,back = colors.lightGray} -local itemWindo = configSet[3] or {txt = colors.black,back = colors.cyan} -local rcmList = configSet[4] or {txt = colors.black,back = colors.lightGray} -- rcm = Right Click Menu List -local rcmTitle = configSet[5] or {txt = colors.black,back = colors.blue} -local dialogTitle = configSet[6] or {txt = colors.black,back = colors.blue} -local dialogWindo = configSet[7] or {txt = colors.black,back = colors.white} -local scrollCol = configSet[8] or {off = colors.gray, button = colors.gray,back = colors.lightGray} - -local tIcons = configSet[9] or { - back = {tCol = "lightGray",bCol = "blue",txt = " < "}, - disk = {tCol = "lime",bCol = "green",txt = "[*]"}, - audio = {tCol = "yellow",bCol = "red",txt = "(o)"}, - folder = {tCol = "lightGray",bCol = "blue",txt = "[=]"}, - file = {tCol = nil ,bCol = nil ,txt = nil} -} - -local customLaunch = configSet[10] or { - ["Edit"] = "rom/programs/edit", - ["Paint"] = "rom/programs/color/paint" -} - -local function saveCFG(overWrite) - if not fs.exists(localPath.."/"..config) or overWrite then - local cnf = {} - local file = fs.open(localPath.."/"..config,"w") - if file then - file.write(textutils.serialize(titleBar).."\n") - file.write(textutils.serialize(addressBar).."\n") - file.write(textutils.serialize(itemWindo).."\n") - file.write(textutils.serialize(rcmList).."\n") - file.write(textutils.serialize(rcmTitle).."\n") - file.write(textutils.serialize(dialogTitle).."\n") - file.write(textutils.serialize(dialogWindo).."\n") - file.write(textutils.serialize(scrollCol).."\n") - file.write(textutils.serialize(tIcons).."\n") - file.write(textutils.serialize(customLaunch).."\n") - file.close() - elseif overWrite then - end - end -end - -saveCFG() - --- end configuration - -local function help() - print([[Usage: browser [-d] [-h] [-a] [-u] [--debug] [--help] [--dir <dir>] [--all] [--update] ---debug or -d: enable debug mode ---help or -h: display this screen ---dir: define initial directory ---all or -a: show hidden files ---update -u: update]]) -end - -local function inBouwndry(clickX,clickY,boxX,boxY,width,hight) - return ( clickX >= boxX and clickX < boxX + width and clickY >= boxY and clickY < boxY + hight ) -end - -local function update() - print("Checking for Updates") - local isHTTP = false - local response - if http then - isHTTP = true - print("http on") - response = http.get("http://pastebin.com/raw.php?i=rLbnyM1U") - end - local flag = false - local isNewFlag = false - local newVerID - if response and isHTTP then - print("recived") - local sInfo = response.readLine() - print(sInfo) - while sInfo do - print(sInfo) - if flag then - if sInfo == ver then - print("Mouse File Browser is up to date") - break - else - newVerID = sInfo - flag = false - isNewFlag = true - end - elseif sInfo == sTitle then - flag = true - elseif isNewFlag then - isNewFlag = sInfo - response.close() - break - end - sInfo = response.readLine() - end - if isNewFlag then - print("New vershion avalible "..newVerID) - print('downloading to \Browser') - if fs.exists("Browser") then - write("Browser exists OverWrite Browser Y/N : ") - local input = string.lower(read()) - while input ~= "y" and input ~= "n" do - print("y or n required") - input = string.lower(read()) - end - if input == "y" then - print("Over Writeing Browser") - print("Downloading new File") - local response = http.get("http://pastebin.com/raw.php?i="..isNewFlag) - if response then - print("file downloaded") - print("installing") - fs.delete("Browser") - local handel = fs.open("Browser","w") - if handel then - handel.write(response.readAll()) - handel.close() - print("Update Complete") - end - response.close() - end - else - print("Update aborted") - end - else - print("Downloading new File") - local response = http.get("http://pastebin.com/raw.php?i="..isNewFlag) - if response then - print("file downloaded") - print("installing") - local handel = fs.open("Browser","w") - if handel then - handel.write(response.readAll()) - handel.close() - print("Update Complete") - end - response.close() - end - end - end - elseif isHTTP then - print("Error downloading update file Please contact BigSHinyToys on the CC forums") - print("http://www.computercraft.info/forums2/index.php?/topic/5509-advanced-computer-mouse-file-browser/") - elseif not isHTTP then - print("HTTP API is turned off") - print("Access Computer Craft Configer and change line") - print([[enableapi_http { -# Enable the "http" API on Computers -general=false -} -TO THIS : -enableapi_http { -# Enable the "http" API on Computers -general=true -}]]) - end - notCMD = false - norun = true -end - -for a = 1, #tArgs do - if tArgs[a]:sub(1,2) == "--" then - local cmd = tArgs[a]:sub(3):lower() - if cmd == "debug" then - bugTest = true - elseif cmd == "help" then - help() - norun = true - elseif cmd == "dir" then - dir = tArgs[a+1] - a = a + 1 - elseif cmd == "all" then - showAll = true - elseif cmd == "update" then - update() - end - elseif tArgs[a]:sub(1,1) == "-" then - for b = 2, #tArgs[a] do - cmd = tArgs[a]:sub(b, b) - if cmd == "d" then - bugTest = true - elseif cmd == "h" then - help() - norun = true - elseif cmd == "p" then - dir = tArgs[a+1] - a = a + 1 - elseif cmd == "a" then - showAll = true - elseif cmd == "u" then - update() - end - end - else - table.insert(_tArgs, tArgs[a]) - end -end - -if (not dir) and shell and shell.dir then - dir = shell.dir() -end - -if dir and shell and shell.resolve then - dir = shell.resolve(dir) -end - -dir = dir or "/" - -if bugTest then -- this is that the var is for testing - print("Dir: "..dir) - os.startTimer(4) - os.pullEvent() -end - -local function clear() - term.setBackgroundColor(colors.black) - term.setTextColor(colors.white) - term.clear() - term.setCursorBlink(false) - term.setCursorPos(1,1) -end - ---[[ - Code thanks to Cruor - http://www.computercraft.info/forums2/index.php?/topic/5802-support-for-shell/ -]]-- - -local function fixArgs(...) - local tReturn={} - local str=table.concat({...}," ") - local sMatch - while str and #str>0 do - if string.sub(str,1,1)=="\"" then - sMatch, str=string.match(str, "\"(.-)\"%s*(.*)") - else - sMatch, str=string.match(str, "(%S+)%s*(.*)") - end - table.insert(tReturn,sMatch) - end - return tReturn -end - ---[[ end Cruor function ]]-- - - --- modified read made to play nice with coroutines - -local function readMOD( _sReplaceChar, _tHistory,_wdth) - local sLine = "" - term.setCursorBlink( true ) - - local nHistoryPos = nil - local nPos = 0 - if _sReplaceChar then - _sReplaceChar = string.sub( _sReplaceChar, 1, 1 ) - end - - local sx, sy = term.getCursorPos() - - local w, h = term.getSize() - if _wdth and type(_wdth) == "number" then - w = sx + _wdth - 1 - end - - local function redraw( _sCustomReplaceChar ) - local nScroll = 0 - if sx + nPos >= w then - nScroll = (sx + nPos) - w - end - - term.setCursorPos( sx + _wdth - 1, sy ) - term.write(" ") - term.setCursorPos( sx, sy ) - local sReplace = _sCustomReplaceChar or _sReplaceChar - if sReplace then - term.write( string.rep(sReplace,_wdth) ) - else - term.write( string.sub( sLine, nScroll + 1 ,nScroll + _wdth) ) - end - term.setCursorPos( sx + nPos - nScroll, sy ) - end - - while true do - local sEvent, param = os.pullEvent() - if sEvent == "char" then - sLine = string.sub( sLine, 1, nPos ) .. param .. string.sub( sLine, nPos + 1 ) - nPos = nPos + 1 - redraw() - - elseif sEvent == "key" then - - if param == keys.left then - -- Left - if nPos > 0 then - nPos = nPos - 1 - redraw() - end - - elseif param == keys.right then - -- Right - if nPos < string.len(sLine) then - nPos = nPos + 1 - redraw() - end - - elseif param == keys.up or param == keys.down then - -- Up or down - if _tHistory then - redraw(" "); - if param == keys.up then - -- Up - if nHistoryPos == nil then - if #_tHistory > 0 then - nHistoryPos = #_tHistory - end - elseif nHistoryPos > 1 then - nHistoryPos = nHistoryPos - 1 - end - else - -- Down - if nHistoryPos == #_tHistory then - nHistoryPos = nil - elseif nHistoryPos ~= nil then - nHistoryPos = nHistoryPos + 1 - end - end - - if nHistoryPos then - sLine = _tHistory[nHistoryPos] - nPos = string.len( sLine ) - else - sLine = "" - nPos = 0 - end - redraw() - end - elseif param == keys.backspace then - -- Backspace - if nPos > 0 then - redraw(" "); - sLine = string.sub( sLine, 1, nPos - 1 ) .. string.sub( sLine, nPos + 1 ) - nPos = nPos - 1 - redraw() - end - elseif param == keys.home then - -- Home - nPos = 0 - redraw() - elseif param == keys.delete then - if nPos < string.len(sLine) then - redraw(" "); - sLine = string.sub( sLine, 1, nPos ) .. string.sub( sLine, nPos + 2 ) - redraw() - end - elseif param == keys["end"] then - -- End - nPos = string.len(sLine) - redraw() - end - elseif sEvent == "redraw" then - redraw() - elseif sEvent == "return" then - term.setCursorBlink( false ) - return sLine - end - end - - term.setCursorBlink( false ) - - return sLine -end - --- end modified read - -local function printC(posX,posY,textCol,backCol,text) - term.setCursorPos(posX,posY) - term.setTextColor(colors[textCol] or textCol) - term.setBackgroundColor(colors[backCol] or backCol) - term.write(text) -end - -local function InputBox(title) - local boxW,boxH = 26,3 - local termX,termY = term.getSize() - local ofsX,ofsY = math.ceil((termX/2) - (boxW/2)) , math.ceil((termY/2) - (boxH/2)) -- offset from top left - local options = {"ok","cancel"} - - local selected = 1 - local space = 0 - local range = {} - for i = 1,#options do - range[i] = {s = space,f = space + string.len(options[i])} - space = space + string.len(options[i])+3 - end - local ofC = (boxW/2) - (space/2) - - local function drawBox() - printC(ofsX,ofsY,colors.black,colors.blue,string.rep(" ",boxW)) - printC(ofsX+1,ofsY,colors.black,colors.blue,(title or "User Input")) - printC(ofsX,ofsY+1,colors.black,colors.white,string.rep(" ",boxW)) - printC(ofsX,ofsY+2,colors.black,colors.white,string.rep(" ",boxW)) - printC(ofsX,ofsY+3,colors.black,colors.white,string.rep(" ",boxW)) - - for i = 1,#options do - if i == selected then - term.setBackgroundColor(colors.lightGray) - term.setCursorPos(range[i].s + ofC + ofsX - 1,ofsY + 3) - term.write("["..options[i].."]") - term.setBackgroundColor(colors.white) - term.write(" ") - else - term.setCursorPos(range[i].s + ofC + ofsX - 1,ofsY + 3) - term.write(" "..options[i].." ") - end - end - - printC(ofsX+2,ofsY+2,colors.black,colors.lightGray,string.rep(" ",boxW-4)) - end - drawBox() - term.setCursorPos(ofsX+2,ofsY+2) - local co = coroutine.create(function() return readMOD(nil,nil,boxW - 4) end) - while true do - local event = {os.pullEvent()} - if event[1] == "key" or event[1] == "char" then - if event[2] == 28 then - local test,data = coroutine.resume(co,"return") - return data - else - coroutine.resume(co,unpack(event)) - end - elseif event[1] == "mouse_click" then - if event[4] == ofsY + 3 then - for i = 1,#options do - if event[3] >= range[i].s + ofC + ofsX - 1 and event[3] <= range[i].f + ofC + ofsX then - if options[i] == "ok" then - local test,data = coroutine.resume(co,"return") - return data - elseif options[i] == "cancel" then - return false - end - end - end - end - end - end -end - -local function dialogBox(title,message,options, h, w) - term.setCursorBlink(false) - local selected = 1 - title = title or "" - message = message or "" - options = options or {} - local boxW,boxH = (w or 26), (h or 3) - local termX,termY = term.getSize() - local ofsX,ofsY = math.ceil((termX/2) - (boxW/2)) , math.ceil((termY/2) - (boxH/2)) -- offset from top left - - local space = 0 - local range = {} - for i = 1,#options do - range[i] = {s = space,f = space + string.len(options[i])} - space = space + string.len(options[i])+3 - end - local ofC = math.ceil((boxW/2)) - math.ceil((space/2)) - - local function drawBox() - printC(ofsX,ofsY,dialogTitle.txt,dialogTitle.back," "..title..string.rep(" ",boxW-#title-5).."_[]") - term.setBackgroundColor(colors.red) - term.setTextColor(colors.white) - term.write("X") - printC(ofsX,ofsY+1,dialogWindo.txt,dialogWindo.back,string.sub(" "..message..string.rep(" ",boxW),1,boxW)) - term.setCursorPos(ofsX,ofsY+2) - term.write(string.rep(" ",boxW)) - term.setCursorPos(ofsX,ofsY+3) - term.write(string.rep(" ",boxW)) - for i = 1,#options do - if i == selected then - printC(range[i].s + ofC + ofsX - 1,ofsY + 3,"black","lightGray","["..options[i].."]") - term.setBackgroundColor(dialogWindo.back) - term.setTextColor(dialogWindo.txt) - term.write(" ") - else - term.setCursorPos(range[i].s + ofC + ofsX - 1,ofsY + 3) - term.write(" "..options[i].." ") - end - end - term.setCursorPos(ofsX + ofC + space,ofsY + 3) - term.write(string.rep(" ",boxW - (ofC + space))) - term.setBackgroundColor(colors.black) - term.setTextColor(colors.white) - end - while true do - drawBox() - event = {os.pullEvent()} - if event[1] == "key" then - if event[2] == 203 then -- left - selected = selected - 1 - if selected < 1 then - selected = #options - end - elseif event[2] == 205 then -- right - selected = selected + 1 - if selected > #options then - selected = 1 - end - elseif event[2] == 28 then -- enter - return selected , options[selected] - end - elseif event[1] == "mouse_click" then - - if bugTest then term.write("M "..event[2].." X "..event[3].." Y "..event[4].." ") end - - if event[2] == 1 then - if event[4] == ofsY + 3 then - for i = 1,#options do - if event[3] >= range[i].s + ofC + ofsX - 1 and event[3] <= range[i].f + ofC + ofsX then - return i , options[i] - end - end - end - end - end - end -end - -local flag = true -local fSlash = "/" -local path = {dir:match("[^/]+")} -local function stringPath() -- compacted this a lot - return fSlash..table.concat(path,fSlash) -end - -local function osRunSpaces(sFileLocation,...) -- getRunningProgram() ["shell"] = shell - clear() - if os.newThread then - os.newThread(false,...) - else - local fProg,probblem = loadfile(sFileLocation) - if fProg then - local tEnv = {["shell"] = {}} - setmetatable(tEnv.shell,{ __index = shell}) - tEnv.shell.getRunningProgram = function() - return sFileLocation - end - setmetatable(tEnv,{ __index = _G}) - setfenv(fProg,tEnv) - local test,probblem = pcall(fProg,...) - if not test then - print(probblem) - dialogBox("ERROR",tostring(probblem),{"ok"},3,30) - else - return true - end - else - print(probblem) - dialogBox("ERROR",tostring(probblem),{"ok"},3,30) - end - end -end - -local function rClickMenu(title,tList,tItem,posX,posY) - - term.setCursorBlink(false) - local BoxTitle = title - local choices = {} - local termX,termY = term.getSize() - local offX,offY - - local width = #BoxTitle + 2 - local hight - - for k,v in pairs(tList) do - if v ~= nil then - table.insert(choices,k) - end - if width < #k + 2 then - width = #k + 2 - end - end - - if #choices == 0 then - return - end - - hight = #choices + 1 - table.sort(choices) - - offX,offY = math.ceil((termX/2) - (width/2)),math.ceil((termY/2) - (hight/2)) - - if posX and posY then -- offX,offY = posX,posY - if posX >= termX - width - 1 then - offX = termX - width - 1 - else - offX = posX - end - if posY >= termY - hight then - offY = termY - hight - else - offY = posY - end - end - - local function reDrawer() - printC(offX,offY,rcmTitle.txt,rcmTitle.back," "..BoxTitle..string.rep(" ",width - #BoxTitle - 1)) - for i = 1,#choices do - printC(offX,offY + i,rcmList.txt,rcmList.back," "..choices[i]..string.rep(" ",width - #choices[i] - 1)) - end - end - - while true do - reDrawer() - local event = {os.pullEvent()} - if event[1] == "mouse_click" then - if event[2] == 1 then -- event[3] = x event[4] = y - if event[4] > offY and event[4] < hight + offY and event[3] >= offX and event[3] < width + offX then - --dialogBox("ERROR:",type(tList[choices[event[4] - offY]]),{"ok"}) - if type(tList[choices[event[4] - offY]]) == "function" then - return tList[choices[event[4] - offY]](tItem) - elseif type(tList[choices[event[4] - offY]]) == "table" then - return rClickMenu("Options",tList[choices[event[4] - offY]],tItem,event[3],event[4]) - elseif type(tList[choices[event[4] - offY]]) == "string" then - return osRunSpaces( - unpack( - fixArgs( - tList[choices[event[4] - offY]].." \""..stringPath()..fSlash..tItem.n.."\"" - ) - ) - ) - else - dialogBox("ERROR:","somthing up with new rMenu",{"ok"}) - end - else - return - end - elseif event[2] == 2 then - return - end - end - end - -end - -local function preferences() - local tItem = { - {txt = "Title Bar",it = titleBar}, - {txt = "Address Bar",it = addressBar}, - {txt = "Item Windo", it = itemWindo}, - {txt = "Title Right Click Title",it = rcmTitle}, - {txt = "Right Click Menu",it = rcmList}, - {txt = "Title Dialog Box",it = dialogTitle}, - {txt = "Dialog Box",it = dialogWindo}, - {txt = "Scroll Bar",it = scrollCol} - } - local topL,topR = 13,5 - local width,hight = 23,6 - local bottomL,bottomR = topL + width,topR + hight - - local listOffset = 0 - local sel = 1 - local otherSel = 1 - local otherItems = {} - - if tItem[sel] then - for k,v in pairs(tItem[sel].it) do - table.insert(otherItems,{txt = k,it = v}) - end - end - - local function draw() - printC(topL,topR,titleBar.txt,titleBar.back,string.sub(" Preferences "..string.rep(" ",width),1,width)) - for i = 0,12,4 do - for a = 1,4 do - --printC(topL + (a*12)-12 ,topR + ((i+4)/4),4,2^(a+i-1)," "..tostring(2^(a+i-1))) - printC(topL + a-1 ,topR + ((i+4)/4),4,2^(a+i-1)," ") - end - end - local sSel = " " - for i = 1,hight - 2 do - if i == sel - listOffset then - sSel = ">" - end - if tItem[i+listOffset] then - printC(topL + 4 ,topR + i,colors.black,colors.white,string.sub(sSel..tItem[i+listOffset].txt..string.rep(" ",width),1,width - 4)) - else - printC(topL + 4 ,topR + i,colors.black,colors.white,sSel..string.rep(" ",width-5)) - end - if i == sel - listOffset then - sSel = " " - end - end - term.setCursorPos(topL,topR + hight - 1) - local loop = 1 - local length = 0 - for i = 1,#otherItems do - if otherSel == i then - sSel = ">" - end - if colors.black == otherItems[i].it or colors.gray == otherItems[i].it then - term.setTextColor(colors.white) - else - term.setTextColor(colors.black) - end - term.setBackgroundColor(otherItems[i].it) - term.write(sSel..tostring(otherItems[i].txt).." ") - length = length + #otherItems[i].txt + 2 - if otherSel == i then - sSel = " " - end - loop = loop+1 - end - term.setBackgroundColor(colors.white) - term.write(string.rep(" ",width - length)) - end - while true do - draw() - local event = {os.pullEvent()} - if event[1] == "mouse_click" and event[2] == 1 then - if inBouwndry(event[3],event[4],topL,topR,width,hight) then - local inSideX,inSideY = event[3] - topL,event[4] - topR - if inBouwndry(inSideX+1,inSideY,1,1,4,4) and tItem[sel] then - --[[ - term.setCursorPos(1,1) - term.setBackgroundColor(2^(inSideX + ((inSideY*4)-4))) - print(2^(inSideX + ((inSideY*4)-4))," ",inSideX + ((inSideY*4)-4)," ") - ]]-- - tItem[sel]["it"][otherItems[otherSel].txt] = (2^(inSideX + ((inSideY*4)-4))) - end - end - elseif event[1] == "key" then - if event[2] == 200 then - sel = sel - 1 - elseif event[2] == 208 then - sel = sel + 1 - elseif event[2] == 203 then - otherSel = otherSel - 1 - elseif event[2] == 205 then - otherSel = otherSel + 1 - elseif event[2] == 28 then - if dialogBox("Confirm","Save prefrences?",{"Yes","No"}) == 1 then - saveCFG(true) - end - return - end - end - if sel < 1 then - sel = 1 - elseif sel > #tItem then - sel = #tItem - end - if sel > listOffset + hight - 2 then - listOffset = listOffset + 1 - elseif sel - listOffset < 1 then - listOffset = listOffset - 1 - end - - otherItems = {} - if tItem[sel] then - for k,v in pairs(tItem[sel].it) do - table.insert(otherItems,{txt = k,it = v}) - end - end - - if otherSel < 1 then - otherSel = 1 - elseif otherSel > #otherItems then - otherSel = #otherItems - end - - if bugTest then - term.setBackgroundColor(colors.black) - term.setTextColor(colors.white) - term.setCursorPos(1,1) - term.clearLine() - term.write("sel "..sel.." offset "..listOffset) - end - end -end - -local function fileSelect(mode) -- save_file open_file browse < not yet implemented - - local title = sTitle.." "..ver - local bRun = true - local clipboard = nil - local cut = false - - local termX,termY = term.getSize() - local offsetX,offsetY = 1,1 - local hight,width = math.ceil(termY-2),math.ceil(termX-2) - local oldHight,oldWidth - - -- offsets - local boxOffX,boxOffY = offsetX,offsetY + 2 - local boxH,boxW = hight - 2 ,width - 2 - - local barX,barY = offsetX + 1,offsetY + 2 - local barH,barW = 1,width - 1 - - local tbarX,tbarY = offsetX + 1,offsetY + 1 - local tbarH,tbarW = 1,width - 1 - - local exitX,exitY = offsetX + width - 1 ,offsetY + 1 - - local pading = string.rep(" ",boxW) - local list - - local listOff = 0 - - local sPath - local tItemList = {} - - local function newList() - listOff = 0 - flag = true - tItemList = {{n = "..", id = "back"}} -- adds a back item at top of list - sPath = stringPath() - local folders = {} - local files = {} - local disks = {} - if not fs.exists(sPath) then - path = {} - sPath = stringPath() - dialogBox("ERROR:","Path no longer exists",{"ok"}) - end - local test,list = pcall(fs.list,sPath) -- stopes fs.list crash - if list == nil then - list = {} - dialogBox("ERROR : ","fs.list crashed",{"ok"}) - end - if #path == 0 then - for i,v in pairs(rs.getSides()) do - if disk.isPresent(v) then - if disk.hasData(v) then - table.insert(tItemList,{n = disk.getMountPath(v), id = "disk",s = v}) - disks[disk.getMountPath(v)] = true - elseif disk.hasAudio(v) then - table.insert(tItemList,{n = disk.getAudioTitle(v), id = "audio",s = v}) - end - end - end - end - for i,v in pairs(list) do - if fs.isDir(sPath..fSlash..v) then - table.insert(folders,v) - else - table.insert(files,v) - end - end - table.sort(folders) - table.sort(files) - for i,v in pairs(folders) do - if disks[v] == nil then - table.insert(tItemList,{n = v, id = "folder"}) - end - end - for i,v in pairs(files) do - table.insert(tItemList,{n = v, id = "file"}) - end - end - - local function paste() - if cut then - local s, m = pcall( - function() - fs.move(clipboard[1]..fSlash..clipboard[2], stringPath()..fSlash..clipboard[2]) - cut = false - clipboard = nil - end) - if not s then - dialogBox("Error", (m or "Couldn't move"), {"ok"}, 4, 30) - end - if bugTest then - local x, y = term.getCursorPos() - term.setCursorPos(1, ({term.getSize()})[2]) - write("from "..clipboard[1]..fSlash..clipboard[2].." to "..stringPath()..fSlash..clipboard[2]) - end - else - local s, m = pcall(function() - if fs.exists(stringPath()..fSlash..clipboard[2]) then - fs.copy(clipboard[1]..fSlash..clipboard[2], stringPath()..fSlash.."copy-"..clipboard[2]) - else - fs.copy(clipboard[1]..fSlash..clipboard[2], stringPath()..fSlash..clipboard[2]) - end - end) - if not s then - dialogBox("Error", (m or "Couldn't copy"), {"ok"}, 4, 30) - end - if bugTest then - local x, y = term.getCursorPos() - term.setCursorPos(1, ({term.getSize()})[2]) - write("from "..clipboard[1]..fSlash..clipboard[2].." to "..stringPath()..fSlash..clipboard[2]) - end - end - newList() - end - - -- this section bellow handles the right click menu - - local tmenu = { - disk = { - ["Open"] = function(tItem) - table.insert(path,tItem.n) - newList() - end, - ["Copy"] = function(tItem) - clipboard = {stringPath(), tItem.n} - cut = false - end, - ["Eject"] = function(tItem) - if dialogBox("Confirm","Eject "..fSlash..tItem.n.." "..tItem.s,{"yes","no"}) == 1 then - disk.eject(tItem.s) - newList() - end - end, - ["ID label"] = function(tItem) - dialogBox("ID label",disk.getDiskID(tItem.s).." "..tostring(disk.getLabel(tItem.s)),{"ok"}) - end, - ["Set label"] = function(tItem) - local name = InputBox("Label?") - if name then - disk.setLabel(tItem.s,name) - end - end, - ["Clear label"] = function(tItem) - if dialogBox("Confirm","Cleal Label from "..tItem.s,{"yes","no"}) == 1 then - disk.setLabel(tItem.s) - end - end - }, - folder = { - ["Open"] = function(temp) - table.insert(path,temp.n) - newList() - end, - ["Copy"] = function(tItem) - clipboard = {stringPath(), tItem.n} - cut = false - end, - ["Cut"] = function(tItem) - clipboard = {stringPath(), tItem.n} - cut = true - end, - ["Delete"] = function(tItem) - if dialogBox("Confirm","Delete "..tItem.id.." "..tItem.n,{"yes","no"}) == 1 then - if fs.isReadOnly(stringPath()..fSlash..tItem.n) then - dialogBox("ERROR",tItem.id.." Is read Only",{"ok"}) - else - fs.delete(stringPath()..fSlash..tItem.n) - newList() - end - end - end, - ["Rename"] = function(tItem) - local sName = InputBox("New Name") - if type(sName) == "string" and sName ~= "" then - local s, m = pcall(function() - fs.move(stringPath()..fSlash..tItem.n,stringPath()..fSlash..sName) - end) - if not s then - dialogBox("Error", (m or "Rename failed"), {"ok"}) - end - end - newList() - end - }, - file = { - ["Run"] = { - ["Run"] = function(tItem) - osRunSpaces(stringPath()..fSlash..tItem.n) - end, - ["Run CMD"] = function(tItem) - local cmd = InputBox("Commands") - if cmd then - osRunSpaces(stringPath()..fSlash..tItem.n,unpack(fixArgs(cmd))) - end - end, - }, - ["Open With"] = customLaunch, - ["Rename"] = function(tItem) - local sName = InputBox("New Name") - if type(sName) == "string" and sName ~= "" then - local s, m = pcall(function() - fs.move(stringPath()..fSlash..tItem.n,stringPath()..fSlash..sName) - end) - if not s then - dialogBox("Error", (m or "Rename failed"), {"ok"}) - end - end - newList() - end, - ["Delete"] = function(tItem) - if dialogBox("Confirm","Delete "..tItem.id.." "..tItem.n,{"yes","no"}) == 1 then - if fs.isReadOnly(stringPath()..fSlash..tItem.n) then - dialogBox("ERROR",tItem.id.." Is read Only",{"ok"}) - else - fs.delete(stringPath()..fSlash..tItem.n) - newList() - end - end - end, - ["Cut"] = function(tItem) - clipboard = {stringPath(), tItem.n} - cut = true - end, - ["Copy"] = function(tItem) - clipboard = {stringPath(), tItem.n} - cut = false - end - }, - audio = { - ["Play"] = 1, - ["Eject"] = 1 - }, - back = { - }, - blank = { -- tmenu.blank.Paste = - ["Paste"] = nil, - ["New File"] = function() - local name = InputBox() - if name then - if fs.exists(stringPath()..fSlash..name) then - dialogBox("ERROR","Name exists",{"ok"}) - else - local file = fs.open(stringPath()..fSlash..name,"w") - if file then - file.write("") - file.close() - newList() - else - dialogBox("ERROR","File not created",{"ok"}) - end - end - end - end, - ["New Folder"] = function() - local name = InputBox() - if name then - if fs.exists(stringPath()..fSlash..name) then - dialogBox("ERROR","Name exists",{"ok"}) - else - if pcall(fs.makeDir,stringPath()..fSlash..name) then - newList() - else - dialogBox("ERROR","Access Denied",{"ok"}) - end - end - end - end, - ["Preferences"] = preferences - }, - } - - -- end right click menu - - local function scrollBar(posX,posY) - if posX == boxOffX+boxW+1 and posY > boxOffY and posY <= boxOffY+boxH then - if #tItemList > boxH then - if posY == boxOffY + 1 then - listOff = 0 - elseif posY == boxOffY+boxH then - listOff = #tItemList + 1 - boxH - else - listOff = math.ceil((posY - boxOffY - 1 )*(((#tItemList - boxH+2)/boxH))) - end - flag = true - end - end - end - - newList() - - while bRun do - if flag then - flag = false - -- clear - if oldHight ~= hight and oldWidth ~= width then - term.setBackgroundColor(colors.black) - term.clear() - oldHight,oldWidth = hight,width - end - -- draw top title bar - local b = tbarW - #title -2 - if b < 0 then - b = 0 - end - printC(tbarX,tbarY,titleBar.txt,titleBar.back,string.sub(" "..title,1,tbarW)..string.rep(" ",b)) - term.setTextColor(colors.white) - term.setBackgroundColor(colors.red) - term.write("X") - - -- draw location bar - local a = barW - #sPath - 1 - if a < 0 then - a = 0 - end - local tmppath = sPath - if shell and shell.getDisplayName then - tmppath = shell.getDisplayName(sPath) - --dialogBox("yay") - else - --dialogBox("moop") - end - tmppath = tmppath or sPath - local a = barW - #tmppath - 1 - if a < 0 then - a = 0 - end - printC(barX,barY,addressBar.txt,addressBar.back,string.sub(" "..tmppath,1,barW)..string.rep(" ",a)) - - -- draw scroll bar - if #tItemList > boxH then - term.setBackgroundColor(scrollCol.back) - for i = 1,boxH do - term.setCursorPos(boxOffX+boxW+1,i + boxOffY) - local scroll = math.floor( boxH* (listOff/(#tItemList-boxH+2)) )+1 - if i == scroll then - term.setBackgroundColor(scrollCol.button) - term.write(" ") - term.setBackgroundColor(scrollCol.back) - else - term.write(" ") - end - end - else - term.setBackgroundColor(scrollCol.off) - for i = 1,boxH do - term.setCursorPos(boxOffX+boxW+1,i + boxOffY) - term.write(" ") - end - end - - -- draw main section - - for i = 1,boxH do -- listOff - local sel = i+listOff - if tItemList[sel] then - printC(1+boxOffX,i+boxOffY,(tIcons[tItemList[sel].id].tCol or itemWindo.txt),(tIcons[tItemList[sel].id].bCol or itemWindo.back),( tIcons[tItemList[sel].id].txt or " ")) - printC(4+boxOffX,i+boxOffY,itemWindo.txt,itemWindo.back,string.sub(" "..tItemList[sel].n..pading,1,boxW-3)) - else - printC(1+boxOffX,i+boxOffY,itemWindo.txt,itemWindo.back,pading) - end - end - - if bugTest then - printC(1,1,"black","white",listOff.." "..boxOffY.." "..boxH) - end - - end - - -- react to events - local event = {os.pullEvent()} - - if event[1] == "mouse_click" then - if inBouwndry(event[3],event[4],boxOffX+1,boxOffY+1,boxW,boxH) then - local selected = tItemList[event[4]+listOff-boxOffY] - if selected and inBouwndry(event[3],event[4],boxOffX+1,event[4],#selected.n + 4,1) then - if event[2] == 1 then -- left mouse - if selected.id == "back" then - table.remove(path,#path) - newList() - elseif selected.id == "folder" or selected.id == "disk" then - table.insert(path,selected.n) - newList() - elseif selected.id == "file" then - if dialogBox("Run file ?",selected.n,{"yes","no"}) == 1 then - osRunSpaces(stringPath()..fSlash..selected.n) - end - flag = true - end - elseif event[2] == 2 then -- right mouse - rClickMenu("Options",tmenu[selected.id],selected,event[3],event[4]) - flag = true - end - elseif event[2] == 2 then -- right clicking not on object - if clipboard then - tmenu.blank.Paste = paste - else - tmenu.blank.Paste = nil - end - rClickMenu("Options",tmenu["blank"],selected,event[3],event[4]) - flag = true - end - elseif event[2] == 1 and event[3] == exitX and event[4] == exitY then - if dialogBox("Confirm","Exit application",{"yes","no"}) == 1 then - bRun = false - end - flag = true - elseif event[2] == 1 then - scrollBar(event[3],event[4]) - end - elseif event[1] == "mouse_scroll" then -- flag this needs new math - local old = listOff - listOff = listOff + event[2] - if listOff < 0 then - listOff = 0 - end - if #tItemList + 1 - boxH > 0 and listOff > #tItemList + 1 - boxH then - listOff = #tItemList + 1 - boxH - elseif listOff > 0 and #tItemList + 1 - boxH < 0 then - listOff = 0 - end - if listOff ~= old then - flag = true - end - - elseif event[1] == "mouse_drag" then -- scroll bar - scrollBar(event[3],event[4]) - elseif event[1] == "disk" or event[1] == "disk_eject" then - newList() - elseif event[1] == "window_resize" then - termX,termY = term.getSize() - offsetX,offsetY = 1,1 - hight,width = math.ceil(termY-2),math.ceil(termX-2) - - boxOffX,boxOffY = offsetX,offsetY + 2 - boxH,boxW = hight - 2 ,width - 2 - - barX,barY = offsetX + 1,offsetY + 2 - barH,barW = 1,width - 1 - - tbarX,tbarY = offsetX + 1,offsetY + 1 - tbarH,tbarW = 1,width - 1 - - exitX,exitY = offsetX + width - 1 ,offsetY + 1 - pading = string.rep(" ",boxW) - - flag = true - elseif event[1] == "redraw" then - flag = true - end - end -end - -local function main() - if term.isColor() then - clear() - fileSelect() - clear() - else - error("Not an Advanced Computer (gold) ") - end -end - -local trash = (norun or main())
\ No newline at end of file |
