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(
  68. app->submenu, gb_cartridge_scene_menu_submenu_callback, app);
  69. view_dispatcher_switch_to_view(app->view_dispatcher, GBCartridgeViewIdMenu);
  70. }
  71. bool gb_cartridge_scene_menu_on_event(void* context, SceneManagerEvent event) {
  72. GBCartridge* app = context;
  73. UNUSED(app);
  74. if(event.type == SceneManagerEventTypeBack) {
  75. //exit app
  76. scene_manager_stop(app->scene_manager);
  77. view_dispatcher_stop(app->view_dispatcher);
  78. return true;
  79. } else if(event.type == SceneManagerEventTypeCustom) {
  80. if(event.event == SubmenuIndexScene1) {
  81. scene_manager_set_scene_state(
  82. app->scene_manager, GBCartridgeSceneMenu, SubmenuIndexScene1);
  83. scene_manager_next_scene(app->scene_manager, GBCartridgeSceneScene_1);
  84. return true;
  85. } else if(event.event == SubmenuIndexScene2) {
  86. scene_manager_set_scene_state(
  87. app->scene_manager, GBCartridgeSceneMenu, SubmenuIndexScene2);
  88. scene_manager_next_scene(app->scene_manager, GBCartridgeSceneScene_2);
  89. return true;
  90. } else if(event.event == SubmenuIndexScene3) {
  91. scene_manager_set_scene_state(
  92. app->scene_manager, GBCartridgeSceneMenu, SubmenuIndexScene3);
  93. scene_manager_next_scene(app->scene_manager, GBCartridgeSceneScene_3);
  94. // } else if(event.event == SubmenuIndexScene4) {
  95. // scene_manager_set_scene_state(
  96. // app->scene_manager, GBCartridgeSceneMenu, SubmenuIndexScene4);
  97. // scene_manager_next_scene(app->scene_manager, GBCartridgeSceneScene_4);
  98. } else if(event.event == SubmenuIndexScene5) {
  99. scene_manager_set_scene_state(
  100. app->scene_manager, GBCartridgeSceneMenu, SubmenuIndexScene5);
  101. scene_manager_next_scene(app->scene_manager, GBCartridgeSceneScene_5);
  102. } else if(event.event == SubmenuIndexSettings) {
  103. scene_manager_set_scene_state(
  104. app->scene_manager, GBCartridgeSceneMenu, SubmenuIndexSettings);
  105. scene_manager_next_scene(app->scene_manager, GBCartridgeSceneSettings);
  106. return true;
  107. }
  108. }
  109. return false;
  110. }
  111. void gb_cartridge_scene_menu_on_exit(void* context) {
  112. GBCartridge* app = context;
  113. // submenu_reset(app->submenu);
  114. variable_item_list_set_selected_item(app->submenu, 0);
  115. variable_item_list_reset(app->submenu);
  116. }