Advertisement
pedrosgali

Screen Library

Sep 7th, 2014
940
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 45.56 KB | None | 0 0
  1. local term = require("term")
  2. local comp = require("component")
  3. local keyboard = require("keyboard")
  4. local sh = require("shell")
  5. local fs = require("filesystem")
  6. local computer = require("computer")
  7. local serial = require("serialization")
  8. local gpu = comp.gpu
  9. local event = require("event")
  10. term.clear()
  11.  
  12. local file = 1
  13. local white = 0xFFFFFF
  14. local black = 0x000000
  15. local path = "/"..string.sub(sh.getWorkingDirectory(), 2, #sh.getWorkingDirectory() - 1)
  16.  
  17. local screen = {}
  18.  
  19. function screen:newPane(object, w, h)
  20.     object = object or {}
  21.     setmetatable(object, self)
  22.     self.__index = self
  23.     object.width = w
  24.     object.height = h
  25.     object.colour = black
  26.     object.renderBool = true
  27.     object.isMoveable = true
  28.     object.textInputs = {}
  29.     object.textInputCount = 0
  30.     return object
  31. end
  32.  
  33. function screen:resize(w, h)
  34.     self.oldW = self.width
  35.     self.oldH = self.height
  36.     self.width = w
  37.     self.height = h
  38.     if self.boxTab ~= nil then
  39.         for i = 1, #self.boxTab do
  40.             if self.boxTab[i]["scaleable"] then
  41.                 self.boxTab[i]["width"] = self.width - (self.oldW - self.boxTab[i]["width"])
  42.                 if self.boxTab[i]["height"] ~= 1 then
  43.                     if self.boxTab[i]["height"] == self.oldH then
  44.                         self.boxTab[i]["height"] = self.height
  45.                     elseif self.boxTab[i]["height"] == self.oldH - 3 then
  46.                         self.boxTab[i]["height"] = self.height - 3
  47.                     else
  48.                         self.boxTab[i]["height"] = self.height - (self.oldH - self.boxTab[i]["height"])
  49.                     end
  50.                 end
  51.             end
  52.         end
  53.     end
  54.     if self.textInputs ~= nil then
  55.         for i = 1, #self.textInputs do
  56.             if self.textInputs[i]["scaleable"] then
  57.                 self.textInputs[i]["width"] = self.width - (self.oldW - self.textInputs[i]["width"])
  58.                 if self.textInputs[i]["height"] ~= 1 then
  59.                     if self.textInputs[i]["height"] == self.oldH then
  60.                         self.textInputs[i]["height"] = self.height
  61.                     elseif self.textInputs[i]["height"] == self.oldH - 3 then
  62.                         self.textInputs[i]["height"] = self.height - 3
  63.                     else
  64.                         self.textInputs[i]["height"] = self.height - (self.oldH - self.textInputs[i]["height"])
  65.                     end
  66.                 end
  67.             end
  68.         end
  69.     end
  70.     if self.buttonTab ~= nil then
  71.         for i = 1, #self.buttonTab do
  72.             if self.buttonTab[i]["label"] == "X" then
  73.                 self.buttonTab[i]["xPos"]  = self.width - 1
  74.             elseif self.buttonTab[i]["label"] == "^" then
  75.                 self.buttonTab[i]["xPos"]  = self.width - 2
  76.             elseif self.buttonTab[i]["label"] == "_" then
  77.                 self.buttonTab[i]["xPos"]  = self.width - 3
  78.             end
  79.         end
  80.     end
  81. end
  82.  
  83. function screen:move(newx, newy)
  84.     if self.isMoveable then
  85.         self.xPos = newx
  86.         self.yPos = newy
  87.     end
  88. end
  89.  
  90. function screen:center()
  91.     w, h = gpu.getResolution()
  92.     xOffset = math.floor((w - self.width) / 2)
  93.     yOffset = math.floor((h - self.height) / 2)
  94.     self:move(xOffset, yOffset)
  95. end
  96.  
  97. --TEXT FUNCTIONS
  98.  
  99. function screen:text(xText, yText, bgCol, tCol, newText, cent)
  100.     if newText == nil then return end
  101.     xText = xText - 1
  102.     yText = yText - 1
  103.     if self.printTab == nil then
  104.         self.printTab = {}
  105.         self.printCount = 0
  106.     end
  107.     self.printCount = self.printCount + 1
  108.     self.printTab[self.printCount] = {
  109.         xPos = xText,
  110.         yPos = yText,
  111.         bgCol = bgCol,
  112.         tCol = tCol,
  113.         text = newText,
  114.         }
  115.     if cent ~= nil then
  116.         self.printTab[self.printCount]["centre"] = true
  117.     else
  118.         self.printTab[self.printCount]["centre"] = false
  119.     end
  120. end
  121.  
  122. function screen:centerText(xStart, yLine, xEnd, bgCol, tCol, newText)
  123.     offset = math.floor((xEnd - #newText) / 2)
  124.     self:text(xStart + offset, yLine, bgCol, tCol, newText, "centre")
  125. end
  126.  
  127. --DRAW FUNCTIONS--
  128.  
  129. function screen:box(stx, sty, w, h, col, scale)
  130.     stx = stx - 1
  131.     sty = sty - 1
  132.     if self.boxTab == nil then
  133.         self.boxTab = {}
  134.         self.boxCount = 0
  135.     end
  136.     self.boxCount = self.boxCount + 1
  137.     self.boxTab[self.boxCount] = {
  138.         xPos = stx,
  139.         yPos = sty,
  140.         width = w,
  141.         height = h,
  142.         colour = col,
  143.         scaleable = false,
  144.         }
  145.     if scale ~= nil then
  146.         self.boxTab[self.boxCount]["scaleable"] = true
  147.     end
  148. end
  149.  
  150. --DATA READOUT FUNCTIONS--
  151.  
  152. function screen:addTextBox(identifier, xPos, yPos, width, height, bgCol, tCol)
  153.     if self.textBox == nil then
  154.         self.textBox = {}
  155.         self.textBoxCount = 0
  156.     end
  157.     self.textBoxCount = self.textBoxCount + 1
  158.     self:box(xPos, yPos, width, height, bgCol, "scale")
  159.     self.textBox[self.textBoxCount] = {
  160.         label = identifier,
  161.         xPos = xPos,
  162.         yPos = yPos,
  163.         width = width,
  164.         height = height,
  165.         bgCol = bgCol,
  166.         tCol = tCol,
  167.         selected = false,
  168.         lineCount = 0
  169.         }
  170.     self.textBox[self.textBoxCount]["line"] = {}
  171. end
  172.  
  173. function screen:printText(id, newText)
  174.     for i = 1, #self.textBox do
  175.         if id == self.textBox[i]["label"] then
  176.             self.textBox[i]["lineCount"] = self.textBox[i]["lineCount"] + 1
  177.             self.textBox[i]["line"][self.textBox[i]["lineCount"]] = newText
  178.             self.needRender = true
  179.             return true
  180.         end
  181.     end
  182. end
  183.  
  184. --BUTTON FUNCTIONS--
  185.  
  186. function screen:button(label, stx, sty, w, h, col, returnVal, tCol)
  187.     stx = stx - 1
  188.     sty = sty - 1
  189.     if self.buttonTab == nil then
  190.         self.buttonTab = {}
  191.         self.buttonCount = 0
  192.     end
  193.     self.buttonCount = self.buttonCount + 1
  194.     self.buttonTab[self.buttonCount] = {
  195.         label = label,
  196.         xPos = stx,
  197.         yPos = sty,
  198.         width = w,
  199.         height = h,
  200.         colour = col,
  201.         tCol = tCol,
  202.         returnVal = returnVal,
  203.         }
  204. end
  205.  
  206. --SUBMENU FUNCTIONS--
  207.  
  208. function screen:addSubMenu(label)
  209.     if self.subTab == nil then
  210.         self.subTab = {}
  211.         self.subCount = 0
  212.     end
  213.     self.subCount = self.subCount + 1
  214.     self.subTab[self.subCount] = {
  215.         label = label,
  216.         open = false,
  217.         }
  218. end
  219.  
  220. function screen:addSubMenuItem(subMenuLabel, newEntry, retVal)
  221.     for i = 1, #self.subTab do
  222.         if self.subTab[i]["label"] == subMenuLabel then
  223.             if self.subTab[i]["entries"] == nil then
  224.                 self.subTab[i]["entries"] = {}
  225.                 self.subTab[i]["entryCount"] = 0
  226.             end
  227.             self.subTab[i]["entryCount"] = self.subTab[i]["entryCount"] + 1
  228.             self.subTab[i]["entries"][self.subTab[i]["entryCount"]] = {
  229.                 label = newEntry,
  230.                 returnVal = retVal,
  231.                 }
  232.             return true
  233.         end
  234.     end
  235. end
  236.  
  237. --TEXT INPUT FUNCTIONS--
  238.  
  239. function screen:inputBox(identifier, xPos, yPos, width, height, scale, bgCol, fgCol)
  240.     if fgCol == nil then fgCol = 0x000000 end
  241.     if bgCol == nil then bgCol = 0xFFFFFF end
  242.     xPos = xPos - 1
  243.     yPos = yPos - 1
  244.     self.textInputCount = self.textInputCount + 1
  245.     self.textInputs[self.textInputCount] = {
  246.         label = identifier,
  247.         xPos = xPos,
  248.         yPos = yPos,
  249.         width = width,
  250.         height = height,
  251.         scaleable = false,
  252.         bgCol = bgCol,
  253.         fgCol = fgCol,
  254.         selected = false,
  255.         cursorX = 1,
  256.         cursorY = 1,
  257.         }
  258.     self.textInputs[self.textInputCount]["text"] = {}
  259.     if scale ~= nil then
  260.         self.textInputs[self.textInputCount]["scaleable"] = true
  261.         self:box(xPos + 1, yPos + 1, width, height, bgCol, "scale")
  262.     else
  263.         self:box(xPos + 1, yPos + 1, width, height, bgCol)
  264.     end
  265. end
  266.  
  267. function screen:addText(char)
  268.     for i = 1, #self.textInputs do
  269.         gpu.setBackground(self.textInputs[i]["bgCol"])
  270.         gpu.setForeground(self.textInputs[i]["fgCol"])
  271.         if self.textInputs[i]["selected"] then
  272.             if char == "enter" then
  273.                 local pLine = self.textInputs[i]["text"][self.textInputs[i]["cursorY"]]
  274.                 if self.textInputs[i]["height"] > 1 then
  275.                     if self.textInputs[i]["cursorX"] < #pLine then
  276.                         local oldLine = string.sub(pLine, 1, self.textInputs[i]["cursorX"] - 1)
  277.                         local newLine = string.sub(pLine, self.textInputs[i]["cursorX"], #pLine)
  278.                         self.textInputs[i]["text"][self.textInputs[i]["cursorY"]] = oldLine
  279.                         for j = #self.textInputs[i]["text"] + 1, self.textInputs[i]["cursorY"] + 1, -1 do
  280.                             self.textInputs[i]["text"][j] = self.textInputs[i]["text"][j - 1]
  281.                         end
  282.                         self.textInputs[i]["cursorY"] = self.textInputs[i]["cursorY"] + 1
  283.                         self.textInputs[i]["cursorX"] = 1
  284.                         self.textInputs[i]["text"][self.textInputs[i]["cursorY"]] = newLine
  285.                         self.needRender = true
  286.                     else
  287.                         if self.textInputs[i]["cursorY"] < #self.textInputs[i]["text"] then
  288.                             for j = #self.textInputs[i]["text"] + 1, self.textInputs[i]["cursorY"] + 1, -1 do
  289.                                 self.textInputs[i]["text"][j] = self.textInputs[i]["text"][j - 1]
  290.                             end
  291.                         end
  292.                         self.textInputs[i]["cursorY"] = self.textInputs[i]["cursorY"] + 1
  293.                         self.textInputs[i]["cursorX"] = 1
  294.                         self.textInputs[i]["text"][self.textInputs[i]["cursorY"]] = " "
  295.                         self.needRender = true
  296.                     end
  297.                 end
  298.                 return true
  299.             elseif char == "back" then
  300.                 if self.textInputs[i]["cursorX"] > 1 then
  301.                     if self.textInputs[i]["cursorX"] <= #self.textInputs[i]["text"][self.textInputs[i]["cursorY"]] then
  302.                         local pLine = self.textInputs[i]["text"][self.textInputs[i]["cursorY"]]
  303.                         local preLine = string.sub(pLine, 1, self.textInputs[i]["cursorX"] - 2)
  304.                         local postLine = string.sub(pLine, self.textInputs[i]["cursorX"], #pLine)
  305.                         self.textInputs[i]["text"][self.textInputs[i]["cursorY"]] = preLine..postLine
  306.                         self.textInputs[i]["cursorX"] = self.textInputs[i]["cursorX"] - 1
  307.                         self.needRender = true
  308.                     else
  309.                         self.textInputs[i]["cursorX"] = self.textInputs[i]["cursorX"] - 1
  310.                         self.textInputs[i]["text"][self.textInputs[i]["cursorY"]] = string.sub(self.textInputs[i]["text"][self.textInputs[i]["cursorY"]], 1, #self.textInputs[i]["text"][self.textInputs[i]["cursorY"]] - 1)
  311.                         self.needRender = true
  312.                     end
  313.                 else
  314.                     if self.textInputs[i]["cursorY"] > 1 then
  315.                         self.textInputs[i]["cursorX"] = #self.textInputs[i]["text"][self.textInputs[i]["cursorY"] - 1] + 1
  316.                         self.textInputs[i]["text"][self.textInputs[i]["cursorY"] - 1] = self.textInputs[i]["text"][self.textInputs[i]["cursorY"] - 1]..self.textInputs[i]["text"][self.textInputs[i]["cursorY"]]
  317.                         self.textInputs[i]["text"][self.textInputs[i]["cursorY"]] = nil
  318.                         for j = self.textInputs[i]["cursorY"] + 1, #self.textInputs[i]["text"] do
  319.                             self.textInputs[i]["text"][j - 1] = self.textInputs[i]["text"][j]
  320.                             self.textInputs[i]["text"][j] = nil
  321.                         end
  322.                         self.textInputs[i]["cursorY"] = self.textInputs[i]["cursorY"] - 1
  323.                         self.needRender = true
  324.                     end
  325.                 end
  326.                 return true
  327.             elseif char == "delete" then
  328.                 if self.textInputs[i]["cursorX"] < #self.textInputs[i]["text"][self.textInputs[i]["cursorY"]] then
  329.                     local pLine = self.textInputs[i]["text"][self.textInputs[i]["cursorY"]]
  330.                     local preLine = string.sub(pLine, 1, self.textInputs[i]["cursorX"] - 1)
  331.                     local postLine = string.sub(pLine, self.textInputs[i]["cursorX"] + 1, #pLine)
  332.                     self.textInputs[i]["text"][self.textInputs[i]["cursorY"]] = preLine..postLine
  333.                     self.needRender = true
  334.                 else
  335.                     local pLine = self.textInputs[i]["text"][self.textInputs[i]["cursorY"]]
  336.                     local preLine = string.sub(pLine, 1, self.textInputs[i]["cursorX"] - 1)
  337.                     local postLine = self.textInputs[i]["text"][self.textInputs[i]["cursorY"] + 1]
  338.                     self.textInputs[i]["text"][self.textInputs[i]["cursorY"]] = preLine..postLine
  339.                     for i = self.textInputs[i]["cursorY"] + 1, #self.textInputs[i]["text"] + 1 do
  340.                         self.textInputs[i]["text"][i] = nil
  341.                         if self.textInputs[i]["text"][i + 1] ~= nil then
  342.                             self.textInputs[i]["text"][i] = self.textInputs[i]["text"][i + 1]
  343.                         end
  344.                     end
  345.                     self.needRender = true
  346.                 end
  347.                 return true
  348.             elseif char == "up" then
  349.                 if self.textInputs[i]["cursorY"] > 1 then
  350.                     self.textInputs[i]["cursorY"] = self.textInputs[i]["cursorY"] - 1
  351.                 end
  352.                 self.needRender = true
  353.                 return true
  354.             elseif char == "down" then
  355.                 if self.textInputs[i]["cursorY"] < #self.textInputs[i]["text"] then
  356.                     self.textInputs[i]["cursorY"] = self.textInputs[i]["cursorY"] + 1
  357.                 end
  358.                 self.needRender = true
  359.                 return true
  360.             elseif char == "left" then
  361.                 if self.textInputs[i]["cursorX"] > 1 then
  362.                     self.textInputs[i]["cursorX"] = self.textInputs[i]["cursorX"] - 1
  363.                 else
  364.                     if self.textInputs[i]["cursorY"] > 1 then
  365.                         self.textInputs[i]["cursorY"] = self.textInputs[i]["cursorY"] - 1
  366.                         self.textInputs[i]["cursorX"] = #self.textInputs[i]["text"][self.textInputs[i]["cursorY"]] + 1
  367.                     else
  368.                         self.textInputs[i]["cursorX"] = 1
  369.                     end
  370.                 end
  371.                 self.needRender = true
  372.                 return true
  373.             elseif char == "right" then
  374.                 if self.textInputs[i]["cursorX"] < #self.textInputs[i]["text"][self.textInputs[i]["cursorY"]] + 1 then
  375.                     self.textInputs[i]["cursorX"] = self.textInputs[i]["cursorX"] + 1
  376.                 else
  377.                     if self.textInputs[i]["cursorY"] < #self.textInputs[i]["text"] then
  378.                         self.textInputs[i]["cursorY"] = self.textInputs[i]["cursorY"] + 1
  379.                         self.textInputs[i]["cursorX"] = 1
  380.                     else
  381.                         self.textInputs[i]["cursorX"] = #self.textInputs[i]["text"][self.textInputs[i]["cursorY"]] + 1
  382.                     end
  383.                 end
  384.                 self.needRender = true
  385.                 return true
  386.             elseif char == "home" then
  387.                 self.textInputs[i]["cursorX"] = 1
  388.                 self.needRender = true
  389.                 return true
  390.             elseif char == "end" then
  391.                 self.textInputs[i]["cursorX"] = #self.textInputs[i]["text"][self.textInputs[i]["cursorY"]] + 1
  392.                 self.needRender = true
  393.                 return true
  394.             end
  395.             if char == "space" or char == "SPACE" then char = " " end
  396.             if char == "1" and keyboard.isShiftDown() == true then char = "!" end
  397.             if char == "2" and keyboard.isShiftDown() == true then char = "\"" end
  398.             if char == "3" and keyboard.isShiftDown() == true then char = "#" end
  399.             if char == "4" and keyboard.isShiftDown() == true then char = "~" end
  400.             if char == "5" and keyboard.isShiftDown() == true then char = "%" end
  401.             if char == "6" and keyboard.isShiftDown() == true then char = "^" end
  402.             if char == "7" and keyboard.isShiftDown() == true then char = "&" end
  403.             if char == "8" and keyboard.isShiftDown() == true then char = "*" end
  404.             if char == "9" and keyboard.isShiftDown() == true then char = "(" end
  405.             if char == "0" and keyboard.isShiftDown() == true then char = ")" end
  406.             if char == "period" then char = "." end
  407.             if char == "numpaddecimal" then char = "." end
  408.             if char == "PERIOD" then char = ">" end
  409.             if char == "comma" then char = "," end
  410.             if char == "COMMA" then char = "<" end
  411.             if char == "apostrophe" then char = "'" end
  412.             if char == "AT" then char = "@" end
  413.             if char == "semicolon" then char = ";" end
  414.             if char == "COLON" then char = ":" end
  415.             if char == "slash" then char = "/" end
  416.             if char == "SLASH" then char = "?" end
  417.             if char == "lbracket" then char = "[" end
  418.             if char == "LBRACKET" then char = "{" end
  419.             if char == "rbracket" then char = "]" end
  420.             if char == "RBRACKET" then char = "}" end
  421.             if char == "UNDERLINE" then char = "_" end
  422.             if char == "equals" then char = "=" end
  423.             if char == "EQUALS" then char = "+" end
  424.             if char == "numpadadd" then char = "+" end
  425.             if char == "minus" or char == "numpadminus" then char = "-" end
  426.             if char == "numpadmul" then char = "*" end
  427.             if char == "CIRCUMFLEX" then char = "^" end
  428.             if char == nil then char = " " end
  429.             if char == "lshift" or char == "rshift" or char == "LSHIFT" or char == "RSHIFT" then
  430.                 return true
  431.             end
  432.             if #char > 1 then char = string.sub(char, 1, 1) end
  433.             if keyboard.isShiftDown() then
  434.                 char = string.upper(char)
  435.             end
  436.             if self.textInputs[i]["cursorX"] <= #self.textInputs[i]["text"][self.textInputs[i]["cursorY"]] then
  437.                 local pLine = self.textInputs[i]["text"][self.textInputs[i]["cursorY"]]
  438.                 local preLine = string.sub(pLine, 1, self.textInputs[i]["cursorX"] - 1)
  439.                 local postLine = char..string.sub(pLine, self.textInputs[i]["cursorX"], #pLine)
  440.                 self.textInputs[i]["text"][self.textInputs[i]["cursorY"]] = preLine..postLine
  441.                 self.needRender = true
  442.             elseif #self.textInputs[i]["text"][self.textInputs[i]["cursorY"]] >= 1 then
  443.                 self.textInputs[i]["text"][self.textInputs[i]["cursorY"]] = self.textInputs[i]["text"][self.textInputs[i]["cursorY"]]..char
  444.                 self.needRender = true
  445.             else
  446.                 self.textInputs[i]["text"][self.textInputs[i]["cursorY"]] = char
  447.                 self.needRender = true
  448.             end
  449.             self.textInputs[i]["cursorX"] = self.textInputs[i]["cursorX"] + 1
  450.             self:renderTextInputs()
  451.             return true
  452.         end
  453.     end
  454.     gpu.setBackground(black)
  455.     gpu.setForeground(white)
  456.     return false
  457. end
  458.  
  459. function screen:loadText(identifier, path)
  460.     local data = io.open(path, "r")
  461.     local count = 0
  462.     for i = 1, #self.textInputs do
  463.         if self.textInputs[i]["label"] == identifier then
  464.             while true do
  465.                 local dataLine = data:read("*line")
  466.                 if dataLine ~= nil then
  467.                     count = count + 1
  468.                     self.textInputs[i]["text"][count] = dataLine
  469.                 else
  470.                     data:close()
  471.                     break
  472.                 end
  473.             end
  474.             self.textInputs[i]["cursorX"] = 1
  475.             self.textInputs[i]["cursorY"] = 1
  476.             if self.textInputs[i]["text"][1] == nil then self.textInputs[i]["text"][1] = " " end
  477.             return true
  478.         end
  479.     end
  480. end
  481.  
  482. function screen:saveText(identifier, path)
  483.     local data = io.open(path, "w")
  484.     for i = 1, #self.textInputs do
  485.         if self.textInputs[i]["label"] == identifier then
  486.             local count = 1
  487.             while true do
  488.                 if self.textInputs[i]["text"][count] ~= nil then
  489.                     data:write(self.textInputs[i]["text"][count].."\n")
  490.                 else
  491.                     data:close()
  492.                     return true
  493.                 end
  494.                 count = count + 1
  495.             end
  496.         end
  497.     end
  498.     return false
  499. end
  500.  
  501. --FILE SYSTEM FUNCTIONS--
  502.  
  503. function screen:addFileViewer(xPos, yPos, w, h, col, path)
  504.     self:box(xPos, yPos, w, h, col, "scale")
  505.     xPos = xPos - 1
  506.     yPos = yPos - 1
  507.     if self.fileViewer == nil then
  508.         self.fileViewer = {}
  509.         self.fvCount = 0
  510.     end
  511.     self.fvCount = self.fvCount + 1
  512.     self.fileViewer[self.fvCount] = {
  513.         xPos = xPos,
  514.         yPos = yPos,
  515.         width = w,
  516.         height = h,
  517.         colour = col,
  518.         path = path,
  519.         scrollPos = 1,
  520.         }
  521.     self.fileViewer[self.fvCount]["list"] = {}
  522.     self.fileViewer[self.fvCount]["list"] = self:assembleFileTable(path)
  523. end
  524.  
  525. function screen:assembleFileTable(path)
  526.     local alphaString = "0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"
  527.     local pathList, error = fs.list(path)
  528.     local dataTab = {}
  529.     i = 0
  530.     for key in pathList do
  531.         i = i + 1
  532.         if string.sub(key, #key, #key) == "/" then
  533.             key = string.sub(key, 1, #key - 1)
  534.         end
  535.         dataTab[i] = key
  536.     end
  537.     local returnTab = {}
  538.     local rtCount = 0
  539.     for l = 1, #alphaString do
  540.         for i = 1, #dataTab do
  541.             if dataTab[i] ~= nil then
  542.                 if fs.isDirectory(path..dataTab[i]) then
  543.                     if string.sub(dataTab[i], 1, 1) == string.sub(alphaString, l, l) then
  544.                         rtCount = rtCount + 1
  545.                         returnTab[rtCount] = dataTab[i]
  546.                         --dataTab[i] = nil
  547.                         --break
  548.                     end
  549.                 end
  550.             end
  551.         end
  552.     end
  553.     for l = 1, #alphaString do
  554.         for i = 1, #dataTab do
  555.             if dataTab[i] ~= nil then
  556.                 if not fs.isDirectory(path..dataTab[i]) then
  557.                     if string.sub(dataTab[i], 1, 1) == string.sub(alphaString, l, l) then
  558.                         rtCount = rtCount + 1
  559.                         returnTab[rtCount] = dataTab[i]
  560.                         --dataTab[i] = nil
  561.                         --break
  562.                     end
  563.                 end
  564.             end
  565.         end
  566.     end
  567.     return returnTab
  568. end
  569.    
  570. --IMAGE FUNCTIONS--
  571.  
  572. function screen:newImage(label, xPos, yPos, sizeX, sizeY)
  573.     if self.imTab == nil then
  574.         self.imTab = {}
  575.         self.imCount = 0
  576.     end
  577.     self.imCount = self.imCount + 1
  578.     self.imTab[self.imCount] = {
  579.         label = label,
  580.         xPos = xPos,
  581.         yPos = yPos,
  582.         width = sizeX,
  583.         height = sizeY,
  584.         hidden = false,
  585.         layers = 1,
  586.         pages = 1,
  587.     }
  588.     self.imTab[self.imCount]["layerData"] = {}
  589.     self.imTab[self.imCount]["layerData"][1] = {}
  590.     self.imTab[self.imCount]["layerData"][1]["hidden"] = false
  591.     for i = sizeY, 1, -1 do
  592.         self.imTab[self.imCount]["layerData"][1][i] = {}
  593.         for j = 1, sizeX do
  594.             self.imTab[self.imCount]["layerData"][1][i][j] = {
  595.                 fg = black,
  596.                 bg = white,
  597.                 char = " ",
  598.             }
  599.         end
  600.     end
  601. end
  602.  
  603. function screen:newImageLayer(label)
  604.     local id = 0
  605.     for i = 1, #self.imTab do
  606.         if self.imTab[i]["label"] == label then
  607.             id = i
  608.             break
  609.         end
  610.     end
  611.     if id == 0 then return false end
  612.     self.imTab[id]["layers"] = self.imTab[id]["layers"] + 1
  613.     self.imTab[id]["layerData"][self.imTab[id]["layers"]] = {}
  614.     self.imTab[id]["layerData"][self.imTab[id]["layers"]]["hidden"] = false
  615.     for y = self.imTab[id]["height"], 1, -1 do
  616.         self.imTab[id]["layerData"][self.imTab[id]["layers"]][y] = {}
  617.         for x = 1, self.imTab[id]["width"] do
  618.             self.imTab[id]["layerData"][self.imTab[id]["layers"]][y][x] = {
  619.                 bg = "trans",
  620.                 fg = 0xFFFFFF,
  621.                 char = " ",
  622.                 }
  623.         end
  624.     end
  625.     if self.imTab[id]["layers"] % 10 == 0 then
  626.         self.imTab[id]["pages"] = self.imTab[id]["pages"] + 1
  627.     end
  628. end
  629.  
  630. function screen:saveImage(label, path)
  631.     if self.imTab ~= nil then
  632.         local imId = 0
  633.         for i = 1, #self.imTab do
  634.             if self.imTab[i]["label"] == label then
  635.                 file = io.open(path, "w")
  636.                 file:write(serial.serialize(self.imTab[i]))
  637.                 file:close()
  638.                 return true
  639.             end
  640.         end
  641.     end
  642.     return false
  643. end
  644.  
  645. function screen:loadImage(label, path, x, y)
  646.     x = x - 1
  647.     y = y - 1
  648.     if fs.exists(path) then
  649.         if self.imTab == nil then
  650.             self.imTab = {}
  651.             self.imCount = 0
  652.         end
  653.         self.imCount = self.imCount + 1
  654.         file = io.open(path, "r")
  655.         self.imTab[self.imCount] = serial.unserialize(file:read("*all"))
  656.         file:close()
  657.         self.imTab[self.imCount]["xPos"] = x
  658.         self.imTab[self.imCount]["yPos"] = y
  659.         return true
  660.     end
  661.     return false
  662. end
  663.  
  664. function screen:loadSmImage(label, path, x, y)
  665.     x = x - 1
  666.     y = y - 1
  667.     if fs.exists(path) then
  668.         if self.smImTab == nil then
  669.             self.smImTab = {}
  670.             self.smImCount = 0
  671.         end
  672.         self.smImCount = self.smImCount + 1
  673.         file = io.open(path, "r")
  674.         self.smImTab[self.smImCount] = serial.unserialize(file:read("*all"))
  675.         file:close()
  676.         self.smImTab[self.smImCount]["xPos"] = x
  677.         self.smImTab[self.smImCount]["yPos"] = y
  678.         return true
  679.     end
  680.     return false
  681. end
  682.  
  683. function screen:compressImage(id)
  684.     local pTab = {}
  685.     for i = 1, #self.imTab[id]["layerData"] do
  686.         pTab[i] = {}
  687.         if self.imTab[id]["layerData"][i]["hidden"] then
  688.             pTab[i]["hidden"] = true
  689.         else
  690.             pTab[i]["hidden"] = false
  691.         end
  692.         for line = #self.imTab[id]["layerData"][i], 1, -1 do
  693.             --print("Compressing layer "..i.." line "..line)
  694.             local colCount = 0
  695.             local curBg = self.imTab[id]["layerData"][i][line][1]["bg"]
  696.             local curFg = self.imTab[id]["layerData"][i][line][1]["fg"]
  697.             local curSt = self.imTab[id]["layerData"][i][line][1]["char"]
  698.             local stx = self.imTab[id]["xPos"]
  699.             local sty = self.imTab[id]["yPos"] + (line - 1)
  700.             pTab[i][line] = {}
  701.             for pix = 1, #self.imTab[id]["layerData"][i][line] do
  702.                 curBg = self.imTab[id]["layerData"][i][line][pix]["bg"]
  703.                 curFg = self.imTab[id]["layerData"][i][line][pix]["fg"]
  704.                 curSt = self.imTab[id]["layerData"][i][line][pix]["char"]
  705.                 if curBg == "trans" then
  706.                     for x = i, 1, -1 do
  707.                         if not self.imTab[id]["layerData"][x]["hidden"] then
  708.                             if self.imTab[id]["layerData"][x][line][pix]["bg"] ~= "trans" then
  709.                                 curBg = self.imTab[id]["layerData"][x][line][pix]["bg"]
  710.                             end
  711.                         elseif x == 1 then
  712.                             curBg = self.imTab[id]["layerData"][x][line][pix]["bg"]
  713.                         end
  714.                     end
  715.                 end
  716.                 if pix == 1 or curBg ~= pTab[i][line][colCount]["bg"] or curFg ~= pTab[i][line][colCount]["fg"] then
  717.                     colCount = colCount + 1
  718.                     pTab[i][line][colCount] = {
  719.                         bg = curBg,
  720.                         fg = curFg,
  721.                         st = curSt,
  722.                         yp = sty,
  723.                         xp = stx,
  724.                         }
  725.                 else
  726.                     pTab[i][line][colCount]["st"] = pTab[i][line][colCount]["st"]..curSt
  727.                 end
  728.                 stx = stx + 1
  729.             end
  730.         end
  731.     end
  732.     return(pTab)
  733. end
  734.  
  735. --CLICK CHECK FUNCTIONS
  736.  
  737. function screen:clicked(x, y)
  738.     local minx = self.xPos
  739.     local miny = self.yPos
  740.     local maxx = minx + self.width
  741.     local maxy = miny + self.height
  742.     if x >= minx and x <= maxx then
  743.         if y >= miny and y <= maxy then
  744.             self.selected = true
  745.             self.priority = 9
  746.             return true
  747.         end
  748.     end
  749.     self.selected = false
  750.     self.grabbed = false
  751.     return false
  752. end
  753.  
  754. function screen:buttonClicked(x, y)
  755.     if self.buttonTab ~= nil then
  756.         for i = 1, #self.buttonTab do
  757.             local minx = self.xPos + (self.buttonTab[i]["xPos"] - 1)
  758.             local miny = self.yPos + (self.buttonTab[i]["yPos"] - 1)
  759.             local maxx = minx + self.buttonTab[i]["width"]
  760.             local maxy = miny + self.buttonTab[i]["height"]
  761.             if x >= minx and x <= maxx then
  762.                 if y >= miny and y <= maxy then
  763.                     self.grabbed = false
  764.                     return(self.buttonTab[i]["returnVal"])
  765.                 end
  766.             end
  767.         end
  768.     end
  769.     return false
  770. end
  771.  
  772. function screen:textInputClicked(x, y)
  773.     local tiFound = false
  774.     if self.textInputs ~= nil then
  775.         for i = 1, #self.textInputs do
  776.             local minx = self.xPos + self.textInputs[i]["xPos"]
  777.             local miny = self.yPos + self.textInputs[i]["yPos"]
  778.             local maxx = minx + self.textInputs[i]["width"]
  779.             local maxy = miny + self.textInputs[i]["height"]
  780.             if x >= minx and x <= maxx then
  781.                 if y >= miny and y <= maxy then
  782.                     self.textInputs[i]["selected"] = true
  783.                     self.textInputs[i]["cursorX"] = #self.textInputs[i]["text"][self.textInputs[i]["cursorY"]] + 1
  784.                     self.grabbed = false
  785.                     tiFound = true
  786.                 else
  787.                     self.textInputs[i]["selected"] = false
  788.                 end
  789.             else
  790.                 self.textInputs[i]["selected"] = false
  791.             end
  792.         end
  793.     end
  794.     if tiFound then return true end
  795.     return false
  796. end
  797.  
  798. function screen:subMenuClicked(x, y)
  799.     local retVal = ""
  800.     if self.subTab ~= nil then
  801.         local xOff = 3
  802.         for i = 1, #self.subTab do
  803.             if self.subTab[i]["open"] then
  804.                 local yOff = self.yPos + 1
  805.                 for j = 1, #self.subTab[i]["entries"] do
  806.                     local maxLength = 0
  807.                     for k = 1, #self.subTab[i]["entries"] do
  808.                         if #self.subTab[i]["entries"][k]["label"] > maxLength then
  809.                             maxLength = #self.subTab[i]["entries"][k]["label"]
  810.                         end
  811.                     end
  812.                     local minx = self.xPos + xOff
  813.                     local maxx = minx + (maxLength + 1)
  814.                     if x >= minx and x <= maxx then
  815.                         if y == yOff + j then
  816.                             retVal = self.subTab[i]["entries"][j]["returnVal"]
  817.                             self.grabbed = true
  818.                         end
  819.                     end
  820.                 end
  821.                 xOff = xOff + (#self.subTab[i]["label"] + 1)
  822.             end
  823.         end
  824.         if retVal == "" then
  825.             local newOffset = 3
  826.             for i = 1, #self.subTab do
  827.                 local minx = self.xPos + newOffset
  828.                 local maxx = minx + #self.subTab[i]["label"]
  829.                 if y == self.yPos + 1 then
  830.                     if x >= minx and x <= maxx then
  831.                         self.subTab[i]["open"] = not self.subTab[i]["open"]
  832.                         retVal = true
  833.                         self.grabbed = true
  834.                     else
  835.                         self.subTab[i]["open"] = false
  836.                         if not retVal then retVal = false end
  837.                     end
  838.                 end
  839.                 newOffset = newOffset + (#self.subTab[i]["label"] + 1)
  840.             end
  841.         else
  842.             for i = 1, #self.subTab do
  843.                 self.subTab[i]["open"] = false
  844.             end
  845.         end
  846.         return(retVal)
  847.     end
  848.     return false
  849. end
  850.  
  851. --RENDER FUNCTIONS--
  852.  
  853. function screen:renderBoxes()
  854.     if self.boxTab ~= nil then
  855.         for i = 1, #self.boxTab do
  856.             gpu.setBackground(self.boxTab[i]["colour"])
  857.             gpu.fill(self.xPos + self.boxTab[i]["xPos"], self.yPos + self.boxTab[i]["yPos"], self.boxTab[i]["width"], self.boxTab[i]["height"], " ")
  858.         end
  859.     end
  860.     gpu.setBackground(0x000000)
  861.     gpu.setForeground(0xFFFFFF)
  862. end
  863.  
  864. function screen:renderText()
  865.     if self.printTab ~= nil then
  866.         for i = 1, #self.printTab do
  867.             gpu.setBackground(self.printTab[i]["bgCol"])
  868.             gpu.setForeground(self.printTab[i]["tCol"])
  869.             gpu.set(self.xPos + self.printTab[i]["xPos"], self.yPos + self.printTab[i]["yPos"], self.printTab[i]["text"])
  870.         end
  871.     end
  872.     gpu.setBackground(0x000000)
  873.     gpu.setForeground(0xFFFFFF)
  874. end
  875.  
  876. function screen:renderTextBoxes()
  877.     if self.textBox ~= nil then
  878.         local startLine = 0
  879.         for i = 1, #self.textBox do
  880.             gpu.setBackground(self.textBox[i]["bgCol"])
  881.             gpu.setForeground(self.textBox[i]["tCol"])
  882.             if self.textBox[i]["lineCount"] >= self.textBox[i]["height"] then
  883.                 startLine = #self.textBox[i]["line"] - (self.textBox[i]["height"] - 2)
  884.             else
  885.                 startLine = 1
  886.             end
  887.             curLine = 0
  888.             for j = startLine, #self.textBox[i]["line"] do
  889.                 local printLine = self.textBox[i]["line"][j]
  890.                 if #printLine > self.textBox[i]["width"] then
  891.                     printLine = string.sub(printLine, #printLine - self.textInputs[i]["width"], #printLine)
  892.                 end
  893.                 gpu.set(self.xPos + self.textBox[i]["xPos"], self.yPos + (self.textBox[i]["yPos"] + (curLine)), printLine)
  894.                 curLine = curLine + 1
  895.             end
  896.         end
  897.     end
  898.     gpu.setBackground(0x000000)
  899.     gpu.setForeground(0xFFFFFF)
  900. end
  901.  
  902. function screen:renderButtons()
  903.     if self.buttonTab ~= nil then
  904.         for i = 1, #self.buttonTab do
  905.             if self.buttonTab[i]["colour"] ~= "trans" then
  906.                 if self.buttonTab[i]["tCol"] ~= nil then
  907.                     gpu.setForeground(self.buttonTab[i]["tCol"])
  908.                 else
  909.                     gpu.setForeground(black)
  910.                 end
  911.                 gpu.setBackground(self.buttonTab[i]["colour"])
  912.                 gpu.fill(self.xPos + self.buttonTab[i]["xPos"], self.yPos + self.buttonTab[i]["yPos"], self.buttonTab[i]["width"], self.buttonTab[i]["height"], " ")
  913.                 local midLine = math.floor(self.buttonTab[i]["height"] / 2)
  914.                 local printLine = self.buttonTab[i]["label"]
  915.                 if #printLine > self.buttonTab[i]["width"] then
  916.                     printLine = string.sub(printLine, 1, self.buttonTab[i]["width"])
  917.                 end
  918.                 offset = math.floor((self.buttonTab[i]["width"] - #printLine) / 2)
  919.                 gpu.set(self.xPos + (self.buttonTab[i]["xPos"] + offset), self.yPos + (self.buttonTab[i]["yPos"] + midLine), printLine)
  920.             end
  921.         end
  922.     end
  923.     gpu.setBackground(0x000000)
  924.     gpu.setForeground(0xFFFFFF)
  925. end
  926.  
  927. function screen:renderTextInputs()
  928.     local printLine = ""
  929.     if self.textInputs ~= nil then
  930.         for i = 1, #self.textInputs do
  931.             if self.textInputs[i]["text"] ~= nil then
  932.                 gpu.setBackground(self.textInputs[i]["bgCol"])
  933.                 gpu.setForeground(self.textInputs[i]["fgCol"])
  934.                 local startLine = 1
  935.                 if #self.textInputs[i]["text"] > self.textInputs[i]["height"] then
  936.                     if self.textInputs[i]["cursorY"] > self.textInputs[i]["height"] then
  937.                         startLine = (self.textInputs[i]["cursorY"] - self.textInputs[i]["height"]) + 1
  938.                     end
  939.                 end
  940.                 endLine = (startLine + self.textInputs[i]["height"]) - 1
  941.                 for j = startLine, endLine do
  942.                     local yOffset = j - startLine
  943.                     if self.textInputs[i]["text"][j] ~= nil then
  944.                         printLine = self.textInputs[i]["text"][j]
  945.                         if self.textInputs[i]["cursorY"] == j then
  946.                             if self.textInputs[i]["cursorX"] > 1 then
  947.                                 local lSplit = string.sub(self.textInputs[i]["text"][j], 1, self.textInputs[i]["cursorX"] - 1)
  948.                                 local rSplit = string.sub(printLine, self.textInputs[i]["cursorX"], #printLine)
  949.                                 printLine = lSplit.."_"..rSplit
  950.                             else
  951.                                 printLine = "_"..printLine
  952.                             end
  953.                         end
  954.                         if #printLine > self.textInputs[i]["width"] then
  955.                             printLine = string.sub(printLine, #printLine - (self.textInputs[i]["width"] - 2), #printLine)
  956.                         end
  957.                         if self.textInputs[i]["label"] ~= "password" then
  958.                             gpu.set(self.xPos + self.textInputs[i]["xPos"], self.yPos + (self.textInputs[i]["yPos"] + yOffset), printLine)
  959.                         else
  960.                             for k = 1, #printLine do
  961.                                 gpu.set(self.xPos + (self.textInputs[i]["xPos"] + (k - 1)), self.yPos + self.textInputs[i]["yPos"], "*")
  962.                             end
  963.                         end
  964.                     end
  965.                 end
  966.             end
  967.         end
  968.     end
  969.     gpu.setBackground(0x000000)
  970.     gpu.setForeground(0xFFFFFF)
  971. end
  972.  
  973. function screen:renderSubMenus()
  974.     if self.subTab ~= nil then
  975.         local w, h = gpu.getResolution()
  976.         local newOffset = 2
  977.         for i = 1, #self.subTab do
  978.             if self.subTab[i]["open"] then
  979.                 gpu.setBackground(0x666666)
  980.                 gpu.setForeground(0x000000)
  981.                 gpu.set(self.xPos + newOffset, self.yPos + 1, self.subTab[i]["label"])
  982.                 gpu.setBackground(0x999999)
  983.                 gpu.setForeground(0x000000)
  984.                 local maxLength = 0
  985.                 for j = 1, #self.subTab[i]["entries"] do
  986.                     if #self.subTab[i]["entries"][j]["label"] > maxLength then
  987.                         maxLength = #self.subTab[i]["entries"][j]["label"]
  988.                     end
  989.                 end
  990.                 gpu.fill(self.xPos + newOffset, self.yPos + 2, maxLength + 1, #self.subTab[i]["entries"], " ")
  991.                 for j = 1, #self.subTab[i]["entries"] do
  992.                     if self.yPos > h / 2 then
  993.                         gpu.set(self.xPos + newOffset, self.yPos - (j + 1), self.subTab[i]["entries"][j]["label"])
  994.                     else
  995.                         gpu.set(self.xPos + newOffset, self.yPos + (j + 1), self.subTab[i]["entries"][j]["label"])
  996.                     end
  997.                 end
  998.             else
  999.                 gpu.setBackground(0x999999)
  1000.                 gpu.setForeground(0x000000)
  1001.                 gpu.set(self.xPos + newOffset, self.yPos + 1, self.subTab[i]["label"])
  1002.             end
  1003.             newOffset = newOffset + (#self.subTab[i]["label"] + 1)
  1004.         end
  1005.     end
  1006.     gpu.setBackground(0x000000)
  1007.     gpu.setForeground(0xFFFFFF)
  1008. end
  1009.  
  1010. function screen:renderFileLists()
  1011.     if self.fileViewer ~= nil then
  1012.         for i = 1, #self.fileViewer do
  1013.             local startPos = 1
  1014.             if #self.fileViewer[i]["list"] > self.fileViewer[i]["height"] then
  1015.                 startPos = self.fileViewer[i]["scrollPos"]
  1016.             end
  1017.             gpu.setForeground(0x000000)
  1018.             gpu.setBackground(self.fileViewer[i]["colour"])
  1019.             for j = startPos, startPos + (self.fileViewer[i]["height"] - 2) do
  1020.                 if self.fileViewer[i]["list"][j] ~= nil then
  1021.                     if fs.isDirectory(self.fileViewer[i]["path"]..self.fileViewer[i]["list"][j]) then
  1022.                         gpu.setBackground(0xFF9900)
  1023.                         gpu.set(self.xPos + self.fileViewer[i]["xPos"], self.yPos + (self.fileViewer[i]["yPos"] + (j - (startPos - 1))), "¬")
  1024.                     else
  1025.                         gpu.setBackground(0xCCCCCC)
  1026.                         gpu.set(self.xPos + self.fileViewer[i]["xPos"], self.yPos + (self.fileViewer[i]["yPos"] + (j - (startPos - 1))), "=")
  1027.                     end
  1028.                     gpu.setBackground(self.fileViewer[i]["colour"])
  1029.                     gpu.set(self.xPos + (self.fileViewer[i]["xPos"] + 1), self.yPos + (self.fileViewer[i]["yPos"] + (j - (startPos - 1))), self.fileViewer[i]["list"][j])
  1030.                 end
  1031.             end
  1032.         end
  1033.     end
  1034.     gpu.setBackground(0x000000)
  1035.     gpu.setForeground(0xFFFFFF)
  1036. end
  1037.  
  1038. function screen:compileLineTable(id, layer, line)
  1039.     local curBg = self.imTab[id]["layerData"][layer][line][1]["bg"]
  1040.     local curFg = self.imTab[id]["layerData"][layer][line][1]["fg"]
  1041.     local curSt = self.imTab[id]["layerData"][layer][line][1]["char"]
  1042.     local stx = self.xPos + self.imTab[id]["xPos"]
  1043.     local sty = self.yPos + (self.imTab[id]["yPos"] + (line - 1))
  1044.     local colCount = 0
  1045.     local pTab = {}
  1046.     for i = 1, #self.imTab[id]["layerData"][layer][line] do
  1047.         curBg = self.imTab[id]["layerData"][layer][line][i]["bg"]
  1048.         curFg = self.imTab[id]["layerData"][layer][line][i]["fg"]
  1049.         curSt = self.imTab[id]["layerData"][layer][line][i]["char"]
  1050.         if curBg == "trans" then
  1051.             for x = layer, 1, -1 do
  1052.                 if not self.imTab[id]["layerData"][x]["hidden"] then
  1053.                     if self.imTab[id]["layerData"][x][line][i]["bg"] ~= "trans" then
  1054.                         curBg = self.imTab[id]["layerData"][x][line][i]["bg"]
  1055.                     end
  1056.                 elseif self.running then
  1057.                     if x == 1 then
  1058.                         curBg = self.imTab[id]["layerData"][x][line][i]["bg"]
  1059.                     end
  1060.                 end
  1061.             end
  1062.         end
  1063.         if i == 1 or curBg ~= pTab[colCount]["bg"] or curFg ~= pTab[colCount]["fg"] then
  1064.             colCount = colCount + 1
  1065.             pTab[colCount] = {
  1066.                 bg = curBg,
  1067.                 fg = curFg,
  1068.                 st = curSt,
  1069.                 yp = sty,
  1070.                 xp = stx,
  1071.             }
  1072.         else
  1073.             pTab[colCount]["st"] = pTab[colCount]["st"]..curSt
  1074.         end
  1075.         stx = stx + 1
  1076.     end
  1077.     return(pTab)
  1078. end
  1079.  
  1080. function screen:renderImages()
  1081.     local prTab = 0
  1082.     if self.imTab ~= nil then
  1083.         for i = 1, #self.imTab do
  1084.             for l = 1, #self.imTab[i]["layerData"] do
  1085.                 if not self.imTab[i]["layerData"][l]["hidden"] then
  1086.                     for r = #self.imTab[i]["layerData"][l], 1, -1 do
  1087.                         prTab = self:compileLineTable(i, l, r)
  1088.                         for p = 1, #prTab do
  1089.                             if prTab[p]["bg"] ~= "trans" then
  1090.                                 gpu.setBackground(prTab[p]["bg"])
  1091.                                 gpu.setForeground(prTab[p]["fg"])
  1092.                                 gpu.set(prTab[p]["xp"], prTab[p]["yp"], prTab[p]["st"])
  1093.                             end
  1094.                         end
  1095.                     end
  1096.                 end
  1097.             end
  1098.         end
  1099.     end
  1100.     gpu.setBackground(0x000000)
  1101.     gpu.setForeground(0xFFFFFF)
  1102. end
  1103.  
  1104. function screen:renderSmImages()
  1105.     if self.smImTab ~= nil then
  1106.         for i = 1, #self.smImTab do
  1107.             for layer = 1, #self.smImTab[i] do
  1108.                 for line = 1, #self.smImTab[i][layer] do
  1109.                     if not self.smImTab[i][layer]["hidden"] then
  1110.                         for col = 1, #self.smImTab[i][layer][line] do
  1111.                             local xPos = self.xPos + (self.smImTab[i]["xPos"] + self.smImTab[i][layer][line][col]["xp"])
  1112.                             local yPos = self.yPos + (self.smImTab[i]["yPos"] + self.smImTab[i][layer][line][col]["yp"])
  1113.                             if self.smImTab[i][layer][line][col]["bg"] ~= "trans" then
  1114.                                 gpu.setBackground(self.smImTab[i][layer][line][col]["bg"])
  1115.                                 gpu.setForeground(self.smImTab[i][layer][line][col]["fg"])
  1116.                                 gpu.set(xPos, yPos, self.smImTab[i][layer][line][col]["st"])
  1117.                             end
  1118.                         end
  1119.                     end
  1120.                 end
  1121.             end
  1122.         end
  1123.     end
  1124.     gpu.setBackground(0x000000)
  1125.     gpu.setForeground(0xFFFFFF)
  1126. end
  1127.  
  1128. function screen:renderOutline()
  1129.     gpu.setBackground(0xFFFFFF)
  1130.     gpu.fill(self.xPos, self.yPos, self.width, self.height, " ")
  1131.     gpu.setBackground(0x000000)
  1132.     gpu.fill(self.xPos + 2, self.yPos + 1, self.width - 4, self.height - 2, " ")
  1133.     gpu.setBackground(0x000000)
  1134.     gpu.setForeground(0xFFFFFF)
  1135. end
  1136.  
  1137. function screen:render()
  1138.     if not self.renderBool then return end
  1139.     if self.grabbed then
  1140.         self:renderOutline()
  1141.         return
  1142.     end
  1143.     self:renderBoxes()
  1144.     self:renderTextBoxes()
  1145.     self:renderTextInputs()
  1146.     self:renderSubMenus()
  1147.     self:renderFileLists()
  1148.     self:renderImages()
  1149.     self:renderSmImages()
  1150.     self:renderButtons()
  1151.     self:renderText()
  1152. end
  1153.  
  1154. --OTHER FUNCTIONS--
  1155.  
  1156. return(screen)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement