static void meh_screen_mapping_next_screen(App* app, Screen* screen) { g_assert(app != NULL); g_assert(screen != NULL); MappingData* data = meh_screen_mapping_get_data(screen); g_assert(data != NULL); /* build the mapping object */ Mapping* mapping = meh_model_mapping_new(data->device_configuring->text, data->up, data->down, data->left, data->right, data->start, data->select, data->a, data->b, data->l, data->r); /* delete an eventual mapping with the same id */ meh_db_delete_mapping(app->db, data->device_configuring->text); /* save the created mapping */ meh_db_save_mapping(app->db, mapping); /* re-assign the mapping */ meh_input_manager_assign_mapping(app->db, app->input_manager); /* create the child screen */ Screen* platform_screen = meh_screen_platform_list_new(app); Screen* fade_screen = meh_screen_fade_new(app, screen, platform_screen); meh_app_set_current_screen(app, fade_screen, TRUE); /* NOTE we don't free the memory of the starting screen, the fade screen * will do it. */ }
void meh_exec_popup_start_random_executable(App* app, Screen* screen) { g_assert(app != NULL); g_assert(screen != NULL); SimplePopupData* data = meh_simple_popup_get_data(screen); ExecutableListData* exec_list_data = meh_exec_list_get_data(data->src_screen); /* get a random executable */ int platform_id = exec_list_data->platform->id; Executable* executable = meh_db_get_platform_random_executable(app->db, platform_id); if (executable) { Platform* platform = meh_db_get_platform(app->db, platform_id); if (platform) { /* keep some infos */ PlatformListData* platform_list_data = meh_screen_platform_list_get_data(data->src_screen->parent_screen); int cursor_platform = platform_list_data->selected_platform; int cursor_exec = exec_list_data->selected_executable; meh_app_start_executable(app, platform, executable); /* destroy screens view */ meh_screen_destroy(data->src_screen->parent_screen); data->src_screen->parent_screen = NULL; platform_list_data = NULL; meh_screen_destroy(data->src_screen); app->current_screen = NULL; exec_list_data = NULL; /* recreate the executable list view */ data->src_screen = meh_exec_list_new(app, platform->id); exec_list_data = meh_exec_list_get_data(data->src_screen); /* restore the cursor position */ exec_list_data->selected_executable = cursor_exec; meh_exec_list_after_cursor_move(app, data->src_screen, 0); /* recreate the parent screen which is the platform list */ Screen* platform_screen = meh_screen_platform_list_new(app); data->src_screen->parent_screen = platform_screen; /* restore the cursor position */ platform_list_data = meh_screen_platform_list_get_data(platform_screen); platform_list_data->selected_platform = cursor_platform; meh_screen_platform_change_platform(app, platform_screen); meh_model_platform_destroy(platform); } meh_model_executable_destroy(executable); } }
static void meh_screen_starting_go_to_next_screen(App* app, Screen* screen) { g_assert(app != NULL); g_assert(screen != NULL); /* create and switch to the platform list screen * if we don't need to configure a mapping */ if (meh_input_manager_has_something_plugged(app->input_manager) && !app->flags.configure_mapping) { Screen* platform_list_screen = meh_screen_platform_list_new(app); Screen* fade_screen = meh_screen_fade_new(app, screen, platform_list_screen); meh_app_set_current_screen(app, fade_screen, TRUE); } else { Screen* mapping_screen = meh_screen_mapping_new(app); Screen* fade_screen = meh_screen_fade_new(app, screen, mapping_screen); meh_app_set_current_screen(app, fade_screen, TRUE); } /* NOTE we don't free the memory of the starting screen, the fade screen * will do it. */ }