Advertisement
kaibochan

init.lua

Feb 22nd, 2025
266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.27 KB | None | 0 0
  1. -- Package initialization and loading
  2. local Buffer = require("gui.Buffer")
  3.  
  4. local gui = {}
  5. gui.Element = require("gui.Element")
  6. gui.Display = require("gui.Display")
  7. gui.Text = require("gui.Text")
  8.  
  9. local displays_attached = {}
  10.  
  11. function gui.initializeDisplay(display_device)
  12.     display_width, display_height = display_device.getSize()
  13.    
  14.     local display = gui.Display:new {
  15.         device = display_device,
  16.         is_monitor = false,
  17.         width = display_width,
  18.         height = display_height,
  19.     }
  20.     table.insert(displays_attached, display)
  21.    
  22.     return display
  23. end
  24.  
  25. function gui.doEvents()
  26.     local e = gui.getEvents()
  27.  
  28.     if not e then
  29.         return
  30.     end
  31.  
  32.     if e.name == "monitor_touch" then
  33.         local selected_display = nil
  34.  
  35.         for _, display in ipairs(displays_attached) do
  36.             if peripheral.getName(display.device) == e.display then
  37.                 selected_display = display
  38.                 break
  39.             end
  40.         end
  41.  
  42.         -- get selected element given the x and y
  43.         -- if the element has a callback function associated with
  44.         -- this event, it will be called and given the event object
  45.         local element = selected_display:getSelectedElement(e.x, e.y)
  46.         if element[e.name] then
  47.             element[e.name](element, e)
  48.         end
  49.     elseif e.name == "mouse_click" then
  50.         local selected_display = nil
  51.  
  52.         for _, display in ipairs(displays_attached) do
  53.             if display.device == term then
  54.                 selected_display = display
  55.                 break
  56.             end
  57.         end
  58.  
  59.         local element = selected_display:getSelectedElement(e.x, e.y)
  60.         if element[e.name] then
  61.             element[e.name](element, e)
  62.         end
  63.     elseif e.name == "timer" then
  64.         for _, display in ipairs(displays_attached) do
  65.             for _, element in ipairs(display.elements) do
  66.                 if element.element[e.name] then
  67.                     element.element[e.name](element.element, e)
  68.                 end
  69.             end
  70.         end
  71.     end
  72. end
  73.  
  74. function gui.getEvents()
  75.     local event_data = {os.pullEvent()}
  76.  
  77.     if event_data[1] == "timer" then
  78.         return {
  79.             name = event_data[1],
  80.             id = event_data[2],
  81.         }
  82.     elseif event_data[1] == "monitor_resize" then
  83.         return {
  84.             name = event_data[1],
  85.             display = event_data[2],
  86.         }
  87.     elseif event_data[1] == "monitor_touch" then
  88.         return {
  89.             name = event_data[1],
  90.             display = event_data[2],
  91.             x = event_data[3],
  92.             y = event_data[4],
  93.         }
  94.     elseif event_data[1] == "mouse_click"
  95.         or event_data[1] == "mouse_up"
  96.         or event_data[1] == "mouse_drag" then
  97.         return {
  98.             name = event_data[1],
  99.             button = event_data[2],
  100.             x = event_data[3],
  101.             y = event_data[4],
  102.         }
  103.     elseif event_data[1] == "key" then
  104.         return {
  105.             name = event_data[1],
  106.             key_code = event_data[2],
  107.             is_held = event_data[3],
  108.         }
  109.     elseif event_data[1] == "key_up" then
  110.         return {
  111.             name = event_data[1],
  112.             key_code = event_data[2],
  113.         }
  114.     end
  115. end
  116.  
  117. return gui
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement