1
0

demo_workbench.c 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. #include <rtgui/rtgui.h>
  2. #include <rtgui/rtgui_system.h>
  3. #include <rtgui/widgets/view.h>
  4. #include <rtgui/widgets/workbench.h>
  5. static rt_bool_t demo_workbench_event_handler(struct rtgui_widget* widget, struct rtgui_event* event)
  6. {
  7. /* 我们目前只对按键事件感兴趣。如果当前workbench处于模式显示状态,忽略它 */
  8. if ((event->type == RTGUI_EVENT_KBD) && !RTGUI_WORKBENCH_IS_MODAL_MODE(RTGUI_WORKBENCH(widget)))
  9. {
  10. struct rtgui_event_kbd* ekbd = (struct rtgui_event_kbd*)event;
  11. if (ekbd->type == RTGUI_KEYDOWN)
  12. {
  13. if (ekbd->key == RTGUIK_RIGHT)
  14. {
  15. demo_view_next(RT_NULL, RT_NULL);
  16. return RT_TRUE;
  17. }
  18. else if (ekbd->key == RTGUIK_LEFT)
  19. {
  20. demo_view_prev(RT_NULL, RT_NULL);
  21. return RT_TRUE;
  22. }
  23. }
  24. }
  25. /* 如果不是绘制事件,使用view原来的事件处理函数处理 */
  26. return rtgui_workbench_event_handler(widget, event);
  27. }
  28. static void workbench_entry(void* parameter)
  29. {
  30. rt_mq_t mq;
  31. struct rtgui_workbench* workbench;
  32. /* 创建GUI应用需要的消息队列 */
  33. #ifdef RTGUI_USING_SMALL_SIZE
  34. mq = rt_mq_create("workbench", 32, 32, RT_IPC_FLAG_FIFO);
  35. #else
  36. mq = rt_mq_create("workbench", 256, 32, RT_IPC_FLAG_FIFO);
  37. #endif
  38. /* 注册当前线程为GUI线程 */
  39. rtgui_thread_register(rt_thread_self(), mq);
  40. /* 创建一个工作台 */
  41. workbench = rtgui_workbench_create("main", "workbench");
  42. if (workbench == RT_NULL) return;
  43. rtgui_widget_set_event_handler(RTGUI_WIDGET(workbench), demo_workbench_event_handler);
  44. /* 初始化各个例子的视图 */
  45. #if RT_VERSION == 4
  46. demo_view_benchmark(workbench);
  47. #endif
  48. demo_view_dc(workbench);
  49. #if RT_VERSION == 4
  50. #ifdef RTGUI_USING_TTF
  51. demo_view_ttf(workbench);
  52. #endif
  53. #endif
  54. #ifndef RTGUI_USING_SMALL_SIZE
  55. demo_view_dc_buffer(workbench);
  56. #endif
  57. demo_view_animation(workbench);
  58. #ifndef RTGUI_USING_SMALL_SIZE
  59. demo_view_buffer_animation(workbench);
  60. // demo_view_instrument_panel(workbench);
  61. #endif
  62. demo_view_window(workbench);
  63. demo_view_label(workbench);
  64. demo_view_button(workbench);
  65. demo_view_checkbox(workbench);
  66. demo_view_progressbar(workbench);
  67. demo_view_scrollbar(workbench);
  68. demo_view_radiobox(workbench);
  69. demo_view_textbox(workbench);
  70. demo_view_listbox(workbench);
  71. demo_view_menu(workbench);
  72. demo_view_listctrl(workbench);
  73. demo_view_combobox(workbench);
  74. demo_view_slider(workbench);
  75. demo_view_notebook(workbench);
  76. demo_view_mywidget(workbench);
  77. #if defined(RTGUI_USING_DFS_FILERW) || defined(RTGUI_USING_STDIO_FILERW)
  78. demo_view_image(workbench);
  79. #endif
  80. #ifdef RT_USING_MODULE
  81. #if defined(RTGUI_USING_DFS_FILERW) || defined(RTGUI_USING_STDIO_FILERW)
  82. demo_view_module(workbench);
  83. #endif
  84. #endif
  85. demo_listview_view(workbench);
  86. demo_listview_icon_view(workbench);
  87. #if defined(RTGUI_USING_DFS_FILERW) || defined(RTGUI_USING_STDIO_FILERW)
  88. demo_fn_view(workbench);
  89. #endif
  90. /* 显示视图 */
  91. demo_view_show();
  92. /* 执行工作台事件循环 */
  93. rtgui_workbench_event_loop(workbench);
  94. /* 去注册GUI线程 */
  95. rtgui_thread_deregister(rt_thread_self());
  96. rt_mq_delete(mq);
  97. }
  98. void workbench_init()
  99. {
  100. static rt_bool_t inited = RT_FALSE;
  101. if (inited == RT_FALSE) /* 避免重复初始化而做的保护 */
  102. {
  103. rt_thread_t tid;
  104. tid = rt_thread_create("wb",
  105. workbench_entry, RT_NULL,
  106. 2048 * 2, 25, 10);
  107. if (tid != RT_NULL) rt_thread_startup(tid);
  108. inited = RT_TRUE;
  109. }
  110. }
  111. #ifdef RT_USING_FINSH
  112. #include <finsh.h>
  113. void workbench()
  114. {
  115. workbench_init();
  116. }
  117. /* finsh的命令输出,可以直接执行workbench()函数以执行上面的函数 */
  118. FINSH_FUNCTION_EXPORT(workbench, workbench demo)
  119. #endif