ui_main.lua 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. --[[
  2. @module ui_main
  3. @summary UI主程序,负责页面管理和主循环
  4. @version 1.0
  5. @date 2026.02.05
  6. @author 江访
  7. @usage
  8. 本文件管理所有UI页面,包括主页和各个演示页面。
  9. ]]
  10. require("home_page")
  11. require("label_page")
  12. require("button_page")
  13. require("container_page")
  14. require("bar_page")
  15. require("switch_page")
  16. require("dropdown_page")
  17. require("table_page")
  18. require("input_page")
  19. require("msgbox_page")
  20. require("image_page")
  21. require("tabview_page")
  22. require("win_page")
  23. require("switch_page_demo")
  24. require("hzfont_page")
  25. require("game_page")
  26. require("all_component_page")
  27. -- 当前显示的页面
  28. local current_page = nil
  29. local page_stack = {} -- 页面,用于返回功能
  30. -- local frame_time = 20 -- 主循环刷新间隔,单位ms
  31. -- 页面定义
  32. local pages = {
  33. home = "home_page", -- 主页
  34. label = "label_page", -- 标签演示
  35. button = "button_page", -- 按钮演示
  36. container = "container_page", -- 容器演示
  37. bar = "bar_page", -- 进度条演示
  38. switch = "switch_page", -- 开关演示
  39. dropdown = "dropdown_page", -- 下拉框演示
  40. table = "table_page", -- 表格演示
  41. input = "input_page", -- 输入框演示
  42. msgbox = "msgbox_page", -- 消息框演示
  43. image = "image_page", -- 图片演示
  44. tabview = "tabview_page", -- 选项卡演示
  45. win = "win_page", -- 窗口演示
  46. switch_page_demo = "switch_page_demo", -- 页面切换演示
  47. hzfont = "hzfont_page", -- 矢量字体演示
  48. game = "game_page", -- 游戏演示
  49. all_component = "all_component_page", -- 所有组件演示
  50. }
  51. -- 显示指定页面
  52. local function show_page(page_name, params)
  53. -- 保存当前页面
  54. if not params or not params.from_back then
  55. if current_page then
  56. table.insert(page_stack, {
  57. name = current_page.name,
  58. instance = current_page.instance
  59. })
  60. end
  61. end
  62. -- 清理当前页面
  63. if current_page and current_page.instance.cleanup then
  64. current_page.instance.cleanup()
  65. end
  66. -- 加载新页面
  67. local module_name = pages[page_name]
  68. if not module_name then
  69. log.error("ui_main", "页面不存在:", page_name)
  70. return false
  71. end
  72. local page_module = require(module_name)
  73. -- 初始化页面
  74. if page_module.init then
  75. page_module.init(params)
  76. end
  77. -- 更新当前页面信息
  78. current_page = {
  79. name = page_name,
  80. module = module_name,
  81. instance = page_module
  82. }
  83. log.info("ui_main", "切换到页面:", page_name)
  84. return true
  85. end
  86. -- 返回上一个页面
  87. local function go_back()
  88. if #page_stack > 0 then
  89. local prev_page = table.remove(page_stack)
  90. if prev_page.instance and prev_page.instance.show then
  91. prev_page.instance.show()
  92. current_page = prev_page
  93. log.info("ui_main", "返回页面:", prev_page.name)
  94. return true
  95. else
  96. return show_page(prev_page.name, { from_back = true })
  97. end
  98. else
  99. return show_page("home", { from_back = true })
  100. end
  101. end
  102. -- 主任务函数
  103. local function ui_main_task()
  104. -- 3V3供电使能
  105. gpio.setup(153,1, gpio.PULLUP)
  106. -- 开启屏幕供电
  107. gpio.setup(31,0)
  108. gpio.set(31,0)
  109. -- 初始化硬件
  110. lcd_drv.init()
  111. tp_drv.init()
  112. -- 显示主页
  113. --show_page("home")
  114. show_page("home")
  115. -- -- 主循环,V1.0.3版本后已不需要
  116. -- while true do
  117. -- airui.refresh()
  118. -- sys.wait(frame_time)
  119. -- end
  120. end
  121. -- 全局函数,方便页面调用
  122. _G.show_page = show_page
  123. _G.go_back = go_back
  124. -- 启动UI主任务
  125. sys.taskInit(ui_main_task)