gui-test.c 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. #include <furi.h>
  2. #include <gui/gui.h>
  3. #include <gui/view_port.h>
  4. #include <gui/view.h>
  5. #include <gui/view_dispatcher.h>
  6. #include <gui/modules/dialog.h>
  7. #include <gui/modules/dialog_ex.h>
  8. #include <gui/modules/submenu.h>
  9. #include <gui/modules/text_input.h>
  10. #include <gui/modules/popup.h>
  11. typedef enum {
  12. GuiTesterViewTextInput = 0,
  13. GuiTesterViewSubmenu,
  14. GuiTesterViewDialog,
  15. GuiTesterViewDialogEx,
  16. GuiTesterViewPopup,
  17. GuiTesterViewLast
  18. } GuiTesterView;
  19. typedef struct {
  20. ViewDispatcher* view_dispatcher;
  21. Dialog* dialog;
  22. DialogEx* dialog_ex;
  23. Submenu* submenu;
  24. TextInput* text_input;
  25. Popup* popup;
  26. GuiTesterView view_index;
  27. } GuiTester;
  28. GuiTester* gui_test_alloc(void) {
  29. GuiTester* gui_tester = furi_alloc(sizeof(GuiTester));
  30. gui_tester->view_dispatcher = view_dispatcher_alloc();
  31. gui_tester->view_index = GuiTesterViewDialogEx;
  32. gui_tester->dialog = dialog_alloc();
  33. view_dispatcher_add_view(
  34. gui_tester->view_dispatcher, GuiTesterViewDialog, dialog_get_view(gui_tester->dialog));
  35. gui_tester->dialog_ex = dialog_ex_alloc();
  36. view_dispatcher_add_view(
  37. gui_tester->view_dispatcher,
  38. GuiTesterViewDialogEx,
  39. dialog_ex_get_view(gui_tester->dialog_ex));
  40. gui_tester->submenu = submenu_alloc();
  41. view_dispatcher_add_view(
  42. gui_tester->view_dispatcher, GuiTesterViewSubmenu, submenu_get_view(gui_tester->submenu));
  43. gui_tester->text_input = text_input_alloc();
  44. view_dispatcher_add_view(
  45. gui_tester->view_dispatcher,
  46. GuiTesterViewTextInput,
  47. text_input_get_view(gui_tester->text_input));
  48. gui_tester->popup = popup_alloc();
  49. view_dispatcher_add_view(
  50. gui_tester->view_dispatcher, GuiTesterViewPopup, popup_get_view(gui_tester->popup));
  51. return gui_tester;
  52. }
  53. void next_view(void* context) {
  54. furi_assert(context);
  55. GuiTester* gui_tester = context;
  56. gui_tester->view_index++;
  57. if(gui_tester->view_index >= GuiTesterViewLast) {
  58. gui_tester->view_index = 0;
  59. }
  60. view_dispatcher_switch_to_view(gui_tester->view_dispatcher, gui_tester->view_index);
  61. }
  62. void popup_callback(void* context) {
  63. next_view(context);
  64. }
  65. void submenu_callback(void* context) {
  66. next_view(context);
  67. }
  68. void dialog_callback(DialogResult result, void* context) {
  69. next_view(context);
  70. }
  71. void dialog_ex_callback(DialogExResult result, void* context) {
  72. next_view(context);
  73. }
  74. void text_input_callback(void* context, char* text) {
  75. next_view(context);
  76. }
  77. int32_t gui_test(void* param) {
  78. (void)param;
  79. GuiTester* gui_tester = gui_test_alloc();
  80. Gui* gui = furi_record_open("gui");
  81. view_dispatcher_attach_to_gui(gui_tester->view_dispatcher, gui, ViewDispatcherTypeFullscreen);
  82. // Submenu
  83. submenu_add_item(gui_tester->submenu, "Read", submenu_callback, gui_tester);
  84. submenu_add_item(gui_tester->submenu, "Saved", submenu_callback, gui_tester);
  85. submenu_add_item(gui_tester->submenu, "Emulate", submenu_callback, gui_tester);
  86. submenu_add_item(gui_tester->submenu, "Enter manually", submenu_callback, gui_tester);
  87. submenu_add_item(gui_tester->submenu, "Blah blah", submenu_callback, gui_tester);
  88. submenu_add_item(gui_tester->submenu, "Set time", submenu_callback, gui_tester);
  89. submenu_add_item(gui_tester->submenu, "Gender-bender", submenu_callback, gui_tester);
  90. submenu_add_item(gui_tester->submenu, "Hack American Elections", submenu_callback, gui_tester);
  91. submenu_add_item(gui_tester->submenu, "Hack the White House", submenu_callback, gui_tester);
  92. // Dialog
  93. dialog_set_result_callback(gui_tester->dialog, dialog_callback);
  94. dialog_set_context(gui_tester->dialog, gui_tester);
  95. dialog_set_header_text(gui_tester->dialog, "Delete Abc123?");
  96. dialog_set_text(gui_tester->dialog, "ID: F0 00 01 02 03 04\nAre you shure?");
  97. dialog_set_left_button_text(gui_tester->dialog, "Yes");
  98. dialog_set_right_button_text(gui_tester->dialog, "No");
  99. // Dialog extended
  100. dialog_ex_set_result_callback(gui_tester->dialog_ex, dialog_ex_callback);
  101. dialog_ex_set_context(gui_tester->dialog_ex, gui_tester);
  102. dialog_ex_set_header(gui_tester->dialog_ex, "Dallas", 95, 12, AlignCenter, AlignCenter);
  103. dialog_ex_set_text(
  104. gui_tester->dialog_ex, "F6 E5 D4\nC3 B2 A1", 95, 32, AlignCenter, AlignCenter);
  105. dialog_ex_set_icon(gui_tester->dialog_ex, 0, 1, I_DolphinExcited_64x63);
  106. dialog_ex_set_left_button_text(gui_tester->dialog_ex, "More");
  107. dialog_ex_set_right_button_text(gui_tester->dialog_ex, "Save");
  108. // Popup
  109. popup_set_callback(gui_tester->popup, popup_callback);
  110. popup_set_context(gui_tester->popup, gui_tester);
  111. popup_set_icon(gui_tester->popup, 0, 2, I_DolphinMafia_115x62);
  112. popup_set_text(gui_tester->popup, "Deleted", 83, 19, AlignLeft, AlignBottom);
  113. popup_set_timeout(gui_tester->popup, 5000);
  114. popup_enable_timeout(gui_tester->popup);
  115. // Text input
  116. const uint8_t text_input_text_len = 64;
  117. char* text_input_text = calloc(text_input_text_len + 1, 1);
  118. memcpy(text_input_text, "New_ke", strlen("New_ke"));
  119. text_input_set_result_callback(
  120. gui_tester->text_input,
  121. text_input_callback,
  122. gui_tester,
  123. text_input_text,
  124. text_input_text_len);
  125. text_input_set_header_text(gui_tester->text_input, "Name the key");
  126. view_dispatcher_switch_to_view(gui_tester->view_dispatcher, gui_tester->view_index);
  127. while(1) {
  128. osDelay(1000);
  129. }
  130. return 0;
  131. }