MattiasBuelens

CCGUI page

Jul 6th, 2012
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.93 KB | None | 0 0
  1. --[[
  2.  
  3.     ComputerCraft GUI
  4.     Page
  5.  
  6. --]]
  7.  
  8. ccgui = ccgui or {}
  9.  
  10. local Page = common.newClass({
  11.     -- Paint layer
  12.     layer = nil,
  13.     -- Frames per second
  14.     fps = 5,
  15.     -- Identifier of frame timer
  16.     frameTimer = nil
  17. }, ccgui.FlowContainer)
  18. ccgui.Page = Page
  19.  
  20. function Page:init()
  21.     ccgui.FlowContainer.init(self)
  22.  
  23.     -- Create paint layer
  24.     self.layer = ccgui.PaintLayer.new({
  25.         output = self.output or term
  26.     })
  27.  
  28.     self:on("beforepaint", self.pageLayout, self)
  29.     self:on("timer", self.pageTimer, self)
  30.  
  31.     -- Restart timer after drawing frame
  32.     self:on("afterframe", self.restartFrameTimer, self)
  33.  
  34.     -- Start frame timer
  35.     self:startFrameTimer()
  36. end
  37.  
  38. function Page:getOutput()
  39.     return self.layer.output
  40. end
  41.  
  42. function Page:pageLayout()
  43.     -- Fill whole screen
  44.     self:updateLayout(self.layer:getBounds())
  45. end
  46.  
  47. function Page:drawUnsafe(x, y, text, fgColor, bgColor)
  48.     -- Draw on layer
  49.     self.layer:write(x, y, text, fgColor, bgColor)
  50. end
  51.  
  52. function Page:show()
  53.     if ccgui.FlowContainer.show(self) then
  54.         self:startFrameTimer()
  55.     end
  56. end
  57.  
  58. function Page:hide()
  59.     self:stopFrameTimer()
  60.     ccgui.FlowContainer.hide(self)
  61. end
  62.  
  63. function Page:startFrameTimer()
  64.     if self.frameTimer == nil then
  65.         self:restartFrameTimer()
  66.     end
  67. end
  68.  
  69. function Page:restartFrameTimer()
  70.     self.frameTimer = os.startTimer(1 / self.fps)
  71. end
  72.  
  73. function Page:stopFrameTimer()
  74.     self.frameTimer = nil
  75. end
  76.  
  77. function Page:pageTimer(timerId)
  78.     -- Handle frame timer
  79.     if timerId == self.frameTimer then
  80.         self:frame()
  81.     end
  82. end
  83.  
  84. function Page:frame()
  85.     if not self.isVisible then return end
  86.  
  87.     -- Paint
  88.     self:paint()
  89.  
  90.     -- Paint layer
  91.     self:trigger("beforeframe")
  92.     self.layer:paint()
  93.     self:trigger("afterframe")
  94. end
  95.  
  96. function Page:repaint()
  97.     if not self.isVisible then return end
  98.  
  99.     -- Paint
  100.     self:paint()
  101.  
  102.     -- Force repaint layer
  103.     self:trigger("beforeframe")
  104.     self.layer:repaint()
  105.     self:trigger("afterframe")
  106. end
  107.  
  108. function Page:reset()
  109.     self.layer:clear()
  110. end
Advertisement
Add Comment
Please, Sign In to add comment