xremote_scene_menu.c 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #include "../xremote.h"
  2. enum SubmenuIndex {
  3. SubmenuIndexCreate = 10,
  4. SubmenuIndexLoad,
  5. SubmenuIndexEdit,
  6. SubmenuIndexSettings,
  7. SubmenuIndexInfoscreen,
  8. };
  9. void xremote_scene_menu_submenu_callback(void* context, uint32_t index) {
  10. XRemote* app = context;
  11. view_dispatcher_send_custom_event(app->view_dispatcher, index);
  12. }
  13. void xremote_scene_menu_on_enter(void* context) {
  14. XRemote* app = context;
  15. submenu_add_item(
  16. app->submenu,
  17. "New Command Chain",
  18. SubmenuIndexCreate,
  19. xremote_scene_menu_submenu_callback,
  20. app);
  21. submenu_add_item(
  22. app->submenu,
  23. "Run Saved Command",
  24. SubmenuIndexLoad,
  25. xremote_scene_menu_submenu_callback,
  26. app);
  27. submenu_add_item(
  28. app->submenu,
  29. "Edit / Delete Command",
  30. SubmenuIndexEdit,
  31. xremote_scene_menu_submenu_callback,
  32. app);
  33. submenu_add_item(
  34. app->submenu, "Settings", SubmenuIndexSettings, xremote_scene_menu_submenu_callback, app);
  35. submenu_add_item(
  36. app->submenu, "App Info", SubmenuIndexInfoscreen, xremote_scene_menu_submenu_callback, app);
  37. submenu_set_selected_item(
  38. app->submenu, scene_manager_get_scene_state(app->scene_manager, XRemoteSceneMenu));
  39. view_dispatcher_switch_to_view(app->view_dispatcher, XRemoteViewIdMenu);
  40. }
  41. bool xremote_scene_menu_on_event(void* context, SceneManagerEvent event) {
  42. XRemote* app = context;
  43. if(event.type == SceneManagerEventTypeBack) {
  44. //exit app
  45. scene_manager_stop(app->scene_manager);
  46. view_dispatcher_stop(app->view_dispatcher);
  47. return true;
  48. } else if(event.type == SceneManagerEventTypeCustom) {
  49. if(event.event == SubmenuIndexCreate) {
  50. scene_manager_set_scene_state(
  51. app->scene_manager, XRemoteSceneMenu, SubmenuIndexCreate);
  52. scene_manager_next_scene(app->scene_manager, XRemoteSceneCreate);
  53. return true;
  54. } else if(event.event == SubmenuIndexLoad) {
  55. scene_manager_set_scene_state(app->scene_manager, XRemoteSceneMenu, SubmenuIndexLoad);
  56. scene_manager_next_scene(app->scene_manager, XRemoteSceneXrList);
  57. return true;
  58. } else if(event.event == SubmenuIndexSettings) {
  59. scene_manager_set_scene_state(
  60. app->scene_manager, XRemoteSceneMenu, SubmenuIndexSettings);
  61. scene_manager_next_scene(app->scene_manager, XRemoteSceneSettings);
  62. return true;
  63. } else if(event.event == SubmenuIndexInfoscreen) {
  64. scene_manager_set_scene_state(
  65. app->scene_manager, XRemoteSceneMenu, SubmenuIndexInfoscreen);
  66. scene_manager_next_scene(app->scene_manager, XRemoteSceneInfoscreen);
  67. return true;
  68. } else if(event.event == SubmenuIndexEdit) {
  69. scene_manager_set_scene_state(app->scene_manager, XRemoteSceneMenu, SubmenuIndexEdit);
  70. scene_manager_next_scene(app->scene_manager, XRemoteSceneXrListEdit);
  71. }
  72. }
  73. return false;
  74. }
  75. void xremote_scene_menu_on_exit(void* context) {
  76. XRemote* app = context;
  77. submenu_reset(app->submenu);
  78. }