Advertisement
pedrosgali

Browser

Sep 7th, 2014
618
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 7.04 KB | None | 0 0
  1. local scr = require("screen")
  2. local shell = require("shell")
  3. local fs = require("filesystem")
  4. local term = require("term")
  5. local keyboard = require("keyboard")
  6. local comp = require("component")
  7. local gpu = comp.gpu
  8. local localPath = "/"
  9. local col = 0x009999
  10.  
  11. fb = scr:newPane(fb, 60, 30)
  12. fb:center()
  13. fb.selected = true
  14. fb.id = #st + 1
  15. fb.priority = 9
  16. fb.label = "Porpoise"
  17. fb.isPane = true
  18. fb.colour = col
  19. fb:center()
  20. fb:box(1, 1, fb.width, fb.height, 0x999999, "scale")
  21. fb:box(1, 1, fb.width, 1, col, "scale")
  22. fb:centerText(1, 1, fb.width, col, 0x000000, fb.label)
  23. fb:box(2, 5, fb.width - 2, fb.height - 5, 0xFFFFFF, "scale")
  24. fb:addFileViewer(2, 5, fb.width - 2, fb.height - 5, 0xFFFFFF, localPath)
  25. fb:text(2, 3, 0x999999, 0x000000, "Path:")
  26. fb:inputBox("address", 8, 3, fb.width - 10, 1, "scale")
  27. fb:button("X", fb.width - 2, 1, 3, 1, 0xCCCCCC, "close_me")
  28. fb:button("^", fb.width - 3, 3, 3, 1, col, "navigate_up")
  29. fb.textInputs[1]["text"][1] = localPath
  30. fb.textInputs[1]["cursorX"] = #fb.textInputs[1]["text"][1] + 1
  31. fb.needRender = true
  32. fb.tEdit = "edit"
  33.  
  34. function fb:checkFileViewer(ev, p1, p2, p3, p4, p5)
  35.     local xPos = self.xPos + self.fileViewer[1]["xPos"]
  36.     local yPos = self.yPos + self.fileViewer[1]["yPos"]
  37.     local xMax = yPos + self.fileViewer[1]["width"]
  38.     local yMax = yPos + self.fileViewer[1]["height"]
  39.     for k = 1, #self.fileViewer[1]["list"] do
  40.         local xVal = xPos + #self.fileViewer[1]["list"][k]
  41.         local yLine = yPos + k
  42.         if self.fileViewer[1]["scrollPos"] > 1 then
  43.             yLine = yLine - (self.fileViewer[1]["scrollPos"] - 1)
  44.         end
  45.         if p2 >= xPos and p2 <= xVal then
  46.             if p3 == yLine then
  47.                 if fs.isDirectory(self.fileViewer[1]["path"]..self.fileViewer[1]["list"][k]) then
  48.                     self.fileViewer[1]["path"] = self.fileViewer[1]["path"]..self.fileViewer[1]["list"][k].."/"
  49.                     self.fileViewer[1]["list"] = self:assembleFileTable(self.fileViewer[1]["path"])
  50.                     if #self.fileViewer[1]["list"] > self.fileViewer[1]["height"] then
  51.                         self:addScrollBar()
  52.                     else
  53.                         self:removeScrollBar()
  54.                     end
  55.                     self.textInputs[1]["text"][1] = self.fileViewer[1]["path"]
  56.                     self.textInputs[1]["cursorX"] = #self.textInputs[1]["text"][1] + 1
  57.                     self.needRender = true
  58.                     return true
  59.                 else
  60.                     if p4 == 1 then
  61.                         shell.execute(self.tEdit.." "..self.fileViewer[1]["path"]..self.fileViewer[1]["list"][k])
  62.                         return true
  63.                     else
  64.                         shell.execute(self.fileViewer[1]["path"]..self.fileViewer[1]["list"][k])
  65.                         return true
  66.                     end
  67.                 end
  68.             end
  69.         end
  70.     end
  71.     if p2 >= xPos and p2 <= xMax then
  72.         if p3 >= yPos and p3 <= yMax then
  73.             return true
  74.         end
  75.     end
  76.     return false
  77. end
  78.  
  79. function fb:addScrollBar()
  80.     self.buttonTab = nil
  81.     self:button("X", self.width - 2, 1, 3, 1, 0xCCCCCC, "close_me")
  82.     self:button("^", self.width - 3, 3, 3, 1, col, "navigate_up")
  83.     self:button("^", self.fileViewer[1]["width"] - 1, self.fileViewer[1]["yPos"] + 1, 3, 1, 0x666666, "scroll_up")
  84.     self:button(" ", self.fileViewer[1]["width"] - 1, self.fileViewer[1]["yPos"] + 2, 3, self.fileViewer[1]["height"] - 2, 0xCCCCCC, "scroll_toggle")
  85.     self:button("v", self.fileViewer[1]["width"] - 1, self.fileViewer[1]["yPos"] + self.fileViewer[1]["height"], 3, 1, 0x666666, "scroll_down")
  86.     self.fileViewer[1]["scrollPos"] = 1
  87. end
  88.  
  89. function fb:removeScrollBar()
  90.     self.buttonTab = nil
  91.     self:button("X", self.width - 2, 1, 3, 1, 0xCCCCCC, "close_me")
  92.     self:button("^", self.width - 3, 3, 3, 1, col, "navigate_up")
  93. end
  94.  
  95. function fb:run(ev, p1, p2, p3, p4, p5)
  96.     if ev == "touch" then
  97.         if self:clicked(p2, p3) then
  98.             self.needRender = true
  99.             if p4 == 0 then
  100.                 ret = self:buttonClicked(p2, p3)
  101.                 if ret == "navigate_up" then
  102.                     self.fileViewer[1]["path"] = fs.path(self.fileViewer[1]["path"])
  103.                     self.textInputs[1]["text"][1] = self.fileViewer[1]["path"]
  104.                     self.fileViewer[1]["list"] = self:assembleFileTable(self.fileViewer[1]["path"])
  105.                     if #self.fileViewer[1]["list"] > self.fileViewer[1]["height"] then
  106.                         self:addScrollBar()
  107.                     else
  108.                         self:removeScrollBar()
  109.                     end
  110.                     self.needRender = true
  111.                     return true
  112.                 elseif ret == "scroll_up" then
  113.                     if self.fileViewer[1]["scrollPos"] > 1 then
  114.                         self.fileViewer[1]["scrollPos"] = self.fileViewer[1]["scrollPos"] - 1
  115.                     end
  116.                     self.needRender = true
  117.                     return true
  118.                 elseif ret == "scroll_down" then
  119.                     if self.fileViewer[1]["scrollPos"] < #self.fileViewer[1]["list"] - (self.fileViewer[1]["height"] - 2) then
  120.                         self.fileViewer[1]["scrollPos"] = self.fileViewer[1]["scrollPos"] + 1
  121.                     end
  122.                     self.needRender = true
  123.                     return true
  124.                 elseif ret == "close_me" then
  125.                     st[self.id] = nil
  126.                     return true
  127.                 end
  128.                 if self:checkFileViewer(ev, p1, p2, p3, p4, p5) then
  129.                     self.grabbed = false
  130.                     return true
  131.                 end
  132.                 if self:textInputClicked(p2, p3) then
  133.                     return true
  134.                 end
  135.                 self.grabbed = not self.grabbed
  136.                 return true
  137.             else
  138.                 if self:checkFileViewer(ev, p1, p2, p3, p4, p5) then
  139.                     self.selected = false
  140.                     self.grabbed = false
  141.                     return true
  142.                 end
  143.             end
  144.         else
  145.             self.grabbed = false
  146.         end
  147.     elseif ev == "drag" then
  148.         if self.grabbed then
  149.             term.clear()
  150.             self:move(p2, p3)
  151.             self.needRender = true
  152.             return true
  153.         end
  154.     elseif ev == "drop" then
  155.         self.grabbed = false
  156.         for i = 1, #st do
  157.             st[i].needRender = true
  158.         end
  159.     elseif ev == "key_down" then
  160.         if self.selected then
  161.             local char = keyboard.keys[p3]
  162.             if char == "enter" then
  163.                 self.fileViewer[1]["path"] = self.textInputs[1]["text"][1]
  164.                 self.fileViewer[1]["list"] = self:assembleFileTable(self.fileViewer[1]["path"])
  165.                 self.needRender = true
  166.                 return true
  167.             end
  168.             self:addText(char)
  169.             return true
  170.         end
  171.     end
  172.     return false
  173. end
  174.  
  175. if fs.exists("/bin/Ate") then
  176.     fb.tEdit = "Ate"
  177. end
  178.  
  179. st[#st + 1] = fb
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement