| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- #include "../wifi_marauder_app_i.h"
- static void
- wifi_marauder_scene_script_stage_edit_list_add_callback(void* context, uint32_t index) {
- WifiMarauderApp* app = context;
- // Creates new item
- WifiMarauderScriptStageListItem* new_item =
- (WifiMarauderScriptStageListItem*)malloc(sizeof(WifiMarauderScriptStageListItem));
- new_item->value = malloc(64);
- new_item->next_item = NULL;
- if(app->script_stage_edit_first_item == NULL) {
- app->script_stage_edit_first_item = new_item;
- } else {
- WifiMarauderScriptStageListItem* last_item = app->script_stage_edit_first_item;
- while(last_item->next_item != NULL) {
- last_item = last_item->next_item;
- }
- last_item->next_item = new_item;
- }
- scene_manager_set_scene_state(app->scene_manager, WifiMarauderSceneScriptStageEditList, index);
- app->user_input_type = WifiMarauderUserInputTypeString;
- app->user_input_string_reference = &new_item->value;
- scene_manager_next_scene(app->scene_manager, WifiMarauderSceneUserInput);
- }
- static void wifi_marauder_scene_script_stage_edit_list_deallocate_items(WifiMarauderApp* app) {
- WifiMarauderScriptStageListItem* current_item = app->script_stage_edit_first_item;
- while(current_item != NULL) {
- WifiMarauderScriptStageListItem* next_item = current_item->next_item;
- free(current_item->value);
- free(current_item);
- current_item = next_item;
- }
- app->script_stage_edit_first_item = NULL;
- }
- static void wifi_marauder_scene_script_stage_edit_list_save_strings(WifiMarauderApp* app) {
- WifiMarauderScriptStageListItem* current_item = app->script_stage_edit_first_item;
- int array_size = 0;
- // Calculates the required array size
- while(current_item != NULL) {
- array_size++;
- current_item = current_item->next_item;
- }
- // Reallocate the array of strings if necessary
- if(*app->script_stage_edit_string_count_reference < array_size) {
- *app->script_stage_edit_strings_reference =
- realloc(*app->script_stage_edit_strings_reference, array_size * sizeof(char*));
- }
- // Fills the array of strings
- current_item = app->script_stage_edit_first_item;
- int i = 0;
- while(current_item != NULL) {
- char* current_str = malloc(strlen(current_item->value) + 1);
- strncpy(current_str, current_item->value, strlen(current_item->value) + 1);
- (*app->script_stage_edit_strings_reference)[i] = current_str;
- current_item = current_item->next_item;
- i++;
- }
- *app->script_stage_edit_string_count_reference = array_size;
- }
- static void wifi_marauder_scene_script_stage_edit_list_save_numbers(WifiMarauderApp* app) {
- WifiMarauderScriptStageListItem* current_item = app->script_stage_edit_first_item;
- int array_size = 0;
- // Calculates the required array size
- while(current_item != NULL) {
- array_size++;
- current_item = current_item->next_item;
- }
- // Reallocate the array of integers if necessary
- if(*app->script_stage_edit_number_count_reference < array_size) {
- *app->script_stage_edit_numbers_reference =
- realloc(*app->script_stage_edit_numbers_reference, array_size * sizeof(int));
- }
- // Fills the array of integers
- current_item = app->script_stage_edit_first_item;
- int i = 0;
- while(current_item != NULL) {
- (*app->script_stage_edit_numbers_reference)[i] = atoi(current_item->value);
- current_item = current_item->next_item;
- i++;
- }
- *app->script_stage_edit_number_count_reference = array_size;
- }
- static void
- wifi_marauder_scene_script_stage_edit_list_save_callback(void* context, uint32_t index) {
- UNUSED(index);
- WifiMarauderApp* app = context;
- if(app->script_stage_edit_strings_reference != NULL &&
- app->script_stage_edit_string_count_reference != NULL) {
- wifi_marauder_scene_script_stage_edit_list_save_strings(app);
- }
- if(app->script_stage_edit_numbers_reference != NULL &&
- app->script_stage_edit_number_count_reference != NULL) {
- wifi_marauder_scene_script_stage_edit_list_save_numbers(app);
- }
- wifi_marauder_scene_script_stage_edit_list_deallocate_items(app);
- scene_manager_previous_scene(app->scene_manager);
- }
- static void
- wifi_marauder_scene_script_stage_edit_list_clear_callback(void* context, uint32_t index) {
- UNUSED(index);
- WifiMarauderApp* app = context;
- wifi_marauder_scene_script_stage_edit_list_deallocate_items(app);
- submenu_reset(app->submenu);
- submenu_add_item(
- app->submenu,
- "[+] ADD ITEM",
- 99,
- wifi_marauder_scene_script_stage_edit_list_add_callback,
- app);
- submenu_add_item(
- app->submenu,
- "[*] SAVE ITEMS",
- 99,
- wifi_marauder_scene_script_stage_edit_list_save_callback,
- app);
- submenu_add_item(
- app->submenu,
- "[-] CLEAR LIST",
- 99,
- wifi_marauder_scene_script_stage_edit_list_clear_callback,
- app);
- }
- void wifi_marauder_scene_script_stage_edit_list_on_enter(void* context) {
- WifiMarauderApp* app = context;
- int item_index = 0;
- WifiMarauderScriptStageListItem* current_item = app->script_stage_edit_first_item;
- while(current_item != NULL) {
- submenu_add_item(app->submenu, current_item->value, item_index++, NULL, app);
- current_item = current_item->next_item;
- }
- submenu_add_item(
- app->submenu,
- "[+] ADD ITEM",
- 99,
- wifi_marauder_scene_script_stage_edit_list_add_callback,
- app);
- submenu_add_item(
- app->submenu,
- "[*] SAVE ITEMS",
- 99,
- wifi_marauder_scene_script_stage_edit_list_save_callback,
- app);
- submenu_add_item(
- app->submenu,
- "[-] CLEAR LIST",
- 99,
- wifi_marauder_scene_script_stage_edit_list_clear_callback,
- app);
- submenu_set_selected_item(
- app->submenu,
- scene_manager_get_scene_state(app->scene_manager, WifiMarauderSceneScriptStageEditList));
- view_dispatcher_switch_to_view(app->view_dispatcher, WifiMarauderAppViewSubmenu);
- }
- bool wifi_marauder_scene_script_stage_edit_list_on_event(void* context, SceneManagerEvent event) {
- UNUSED(context);
- UNUSED(event);
- return false;
- }
- void wifi_marauder_scene_script_stage_edit_list_on_exit(void* context) {
- WifiMarauderApp* app = context;
- submenu_reset(app->submenu);
- }
|