gb_cartridge_scene_menu.c 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #include "../gb_cartridge_app.h"
  2. #include <lib/toolbox/value_index.h>
  3. #include <gui/elements.h>
  4. #include <ctype.h>
  5. enum SubmenuIndex {
  6. SubmenuIndexScene1,
  7. SubmenuIndexScene2,
  8. SubmenuIndexScene3,
  9. SubmenuIndexScene4,
  10. SubmenuIndexScene5,
  11. SubmenuIndexSettings,
  12. };
  13. const char* const gameboy_rom_option_text[2] = {
  14. "gb",
  15. "gbc",
  16. };
  17. const uint32_t gameboy_rom_option_value[2] = {
  18. GBCartridgeRomOptionGB,
  19. GBCartridgeRomOptionGBC,
  20. };
  21. void toUpperCase(char *str) {
  22. while (*str) {
  23. *str = toupper((unsigned char)*str);
  24. str++;
  25. }
  26. }
  27. void gb_cartridge_scene_menu_submenu_callback(void* context, uint32_t index) {
  28. GBCartridge* app = context;
  29. view_dispatcher_send_custom_event(app->view_dispatcher, index);
  30. }
  31. // static char* rom_option_uppercase(uint32_t index) {
  32. // const char *gameboy_rom_option = gameboy_rom_option_text[index];
  33. // char *gameboy_rom_option_uppercase = (char*)malloc(strlen(gameboy_rom_option) + 1); // +1 para el carácter nulo
  34. // if (gameboy_rom_option_uppercase) {
  35. // strcpy(gameboy_rom_option_uppercase, gameboy_rom_option);
  36. // toUpperCase(gameboy_rom_option_uppercase);
  37. // } else {
  38. // // Manejo de error en caso de falta de memoria
  39. // return NULL;
  40. // }
  41. // return gameboy_rom_option_uppercase;
  42. // }
  43. // static void gameboy_cartridge_set_rom_option(VariableItem* item) {
  44. // GBCartridge* app = variable_item_get_context(item);
  45. // uint8_t index = variable_item_get_current_value_index(item);
  46. // variable_item_set_current_value_text(item, rom_option_uppercase(index));
  47. // app->gameboy_rom_option_selected_index = gameboy_rom_option_value[index];
  48. // app->gameboy_rom_option_selected_text = (char*)gameboy_rom_option_text[index];
  49. // }
  50. void gb_cartridge_scene_menu_on_enter(void* context) {
  51. GBCartridge* app = context;
  52. variable_item_list_add(app->submenu, "Cartridge Information", 1, NULL, NULL);
  53. variable_item_list_add(app->submenu, "Dump ROM Cartridge", 1, NULL, NULL);
  54. variable_item_list_add(app->submenu, "Dump RAM Cartridge", 1, NULL, NULL);
  55. // TODO: Implements Write ROM
  56. // VariableItem* item = variable_item_list_add(
  57. // app->submenu,
  58. // "Write ROM",
  59. // 2,
  60. // gameboy_cartridge_set_rom_option,
  61. // app);
  62. // app->gameboy_rom_option_selected_index = value_index_uint32(app->gameboy_rom_option_selected_index, gameboy_rom_option_value, 2);
  63. // variable_item_set_current_value_index(item, app->gameboy_rom_option_selected_index);
  64. // variable_item_set_current_value_text(item, rom_option_uppercase(app->gameboy_rom_option_selected_index));
  65. variable_item_list_add(app->submenu, "Write RAM", 1, NULL, NULL);
  66. // variable_item_list_add(app->submenu, "Settings", 1, NULL, NULL);
  67. variable_item_list_set_enter_callback(app->submenu, gb_cartridge_scene_menu_submenu_callback, app);
  68. view_dispatcher_switch_to_view(app->view_dispatcher, GBCartridgeViewIdMenu);
  69. }
  70. bool gb_cartridge_scene_menu_on_event(void* context, SceneManagerEvent event) {
  71. GBCartridge* app = context;
  72. UNUSED(app);
  73. if(event.type == SceneManagerEventTypeBack) {
  74. //exit app
  75. scene_manager_stop(app->scene_manager);
  76. view_dispatcher_stop(app->view_dispatcher);
  77. return true;
  78. } else if(event.type == SceneManagerEventTypeCustom) {
  79. if(event.event == SubmenuIndexScene1) {
  80. scene_manager_set_scene_state(
  81. app->scene_manager, GBCartridgeSceneMenu, SubmenuIndexScene1);
  82. scene_manager_next_scene(app->scene_manager, GBCartridgeSceneScene_1);
  83. return true;
  84. } else if (event.event == SubmenuIndexScene2) {
  85. scene_manager_set_scene_state(
  86. app->scene_manager, GBCartridgeSceneMenu, SubmenuIndexScene2);
  87. scene_manager_next_scene(app->scene_manager, GBCartridgeSceneScene_2);
  88. return true;
  89. } else if (event.event == SubmenuIndexScene3) {
  90. scene_manager_set_scene_state(
  91. app->scene_manager, GBCartridgeSceneMenu, SubmenuIndexScene3);
  92. scene_manager_next_scene(app->scene_manager, GBCartridgeSceneScene_3);
  93. } else if (event.event == SubmenuIndexScene4) {
  94. scene_manager_set_scene_state(
  95. app->scene_manager, GBCartridgeSceneMenu, SubmenuIndexScene4);
  96. scene_manager_next_scene(app->scene_manager, GBCartridgeSceneScene_4);
  97. } else if (event.event == SubmenuIndexScene5) {
  98. scene_manager_set_scene_state(
  99. app->scene_manager, GBCartridgeSceneMenu, SubmenuIndexScene5);
  100. scene_manager_next_scene(app->scene_manager, GBCartridgeSceneScene_5);
  101. } else if (event.event == SubmenuIndexSettings) {
  102. scene_manager_set_scene_state(
  103. app->scene_manager, GBCartridgeSceneMenu, SubmenuIndexSettings);
  104. scene_manager_next_scene(app->scene_manager, GBCartridgeSceneSettings);
  105. return true;
  106. }
  107. }
  108. return false;
  109. }
  110. void gb_cartridge_scene_menu_on_exit(void* context) {
  111. GBCartridge* app = context;
  112. // submenu_reset(app->submenu);
  113. variable_item_list_set_selected_item(app->submenu, 0);
  114. variable_item_list_reset(app->submenu);
  115. }