home_page.lua 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. --[[
  2. @module home_page
  3. @summary U8G2主页模块 - 128x64屏幕
  4. @version 1.0
  5. @date 2025.12.11
  6. @author 江访
  7. @usage
  8. 本文件为主页显示模块,核心业务逻辑为:
  9. 1、显示主菜单,包含三个选项:组件演示、内置字体、GTFont演示;
  10. 2、处理BOOT键和PWR键的导航和确认操作;
  11. 3、管理当前选中项状态;
  12. 本文件的对外接口有4个:
  13. 1、home_page.draw():绘制页面内容;
  14. 2、home_page.handle_key(key_type):处理按键事件;
  15. 3、home_page.on_enter():页面进入回调;
  16. 4、home_page.on_leave():页面离开回调;
  17. ]]
  18. local home_page = {}
  19. -- 菜单项
  20. local menu_items = {
  21. {name = "component", text = "1.组件演示", x = 15, y = 22},
  22. {name = "default_font", text = "2.内置字体", x = 15, y = 40},
  23. {name = "gtfont", text = "3.GTFont演示", x = 15, y = 58}
  24. }
  25. local selected_index = 1
  26. --[[
  27. @api draw()
  28. @summary 绘制主页内容
  29. @return 无返回值
  30. @usage
  31. -- 在UI主循环中调用
  32. home_page.draw()
  33. ]]
  34. function home_page.draw()
  35. -- 绘制按键提示
  36. u8g2.DrawUTF8("BOOT:选择", 5, 10)
  37. u8g2.DrawUTF8("PWR:确认", 70, 10)
  38. -- 绘制菜单项
  39. for i, item in ipairs(menu_items) do
  40. if i == selected_index then
  41. -- 选中状态
  42. u8g2.DrawButtonUTF8(item.text, item.x, item.y,
  43. u8g2.BTN_INV + u8g2.BTN_BW1, 100, 2, 0)
  44. else
  45. -- 未选中状态
  46. u8g2.DrawButtonUTF8(item.text, item.x, item.y,
  47. u8g2.BTN_BW1, 100, 2, 0)
  48. end
  49. end
  50. end
  51. --[[
  52. @api handle_key(key_type)
  53. @summary 处理按键事件
  54. @param string key_type 按键类型,可选值:"confirm"、"next"、"prev"
  55. @return bool 是否已处理该按键
  56. @usage
  57. -- 在UI主循环中调用
  58. home_page.handle_key("confirm")
  59. ]]
  60. function home_page.handle_key(key_type)
  61. log.info("home_page.handle_key", "key_type:", key_type, "selected_index:", selected_index)
  62. if key_type == "confirm" then
  63. -- 确认键:切换到选中的页面
  64. local item = menu_items[selected_index]
  65. switch_page(item.name)
  66. return true
  67. elseif key_type == "next" then
  68. -- 向下选择
  69. selected_index = selected_index % #menu_items + 1
  70. return true
  71. elseif key_type == "prev" then
  72. -- 向上选择
  73. selected_index = (selected_index - 2) % #menu_items + 1
  74. return true
  75. end
  76. return false
  77. end
  78. --[[@api on_enter()
  79. @summary 页面进入时的初始化操作
  80. @return 无返回值
  81. @usage
  82. -- 在页面切换时自动调用
  83. home_page.on_enter()
  84. ]]
  85. function home_page.on_enter()
  86. selected_index = 1 -- 重置选中项
  87. end
  88. --[[
  89. @api on_leave()
  90. @summary 页面离开时的清理操作
  91. @return 无返回值
  92. @usage
  93. -- 在页面切换时自动调用
  94. home_page.on_leave()
  95. ]]
  96. function home_page.on_leave()
  97. -- 页面离开时的清理操作
  98. end
  99. return home_page