mass_storage_scene_start.c 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include "../mass_storage_app_i.h"
  2. static const struct {
  3. char* name;
  4. uint32_t value;
  5. } image_size[] = {
  6. {"1.44M", 1440 * 1024},
  7. {"2M", 2 * 1024 * 1024},
  8. {"4M", 4 * 1024 * 1024},
  9. {"8M", 8 * 1024 * 1024},
  10. {"16M", 16 * 1024 * 1024},
  11. {"32M", 32 * 1024 * 1024},
  12. {"64M", 64 * 1024 * 1024},
  13. };
  14. static void mass_storage_item_select(void* context, uint32_t index) {
  15. MassStorageApp* app = context;
  16. if(index == 0) {
  17. view_dispatcher_send_custom_event(app->view_dispatcher, MassStorageCustomEventFileSelect);
  18. } else {
  19. view_dispatcher_send_custom_event(app->view_dispatcher, MassStorageCustomEventNewImage);
  20. }
  21. }
  22. static void mass_storage_image_size(VariableItem* item) {
  23. MassStorageApp* app = variable_item_get_context(item);
  24. uint8_t index = variable_item_get_current_value_index(item);
  25. variable_item_set_current_value_text(item, image_size[index].name);
  26. app->new_file_size = image_size[index].value;
  27. }
  28. void mass_storage_scene_start_on_enter(void* context) {
  29. MassStorageApp* app = context;
  30. VariableItem* item =
  31. variable_item_list_add(app->variable_item_list, "Select disc image", 0, NULL, NULL);
  32. item = variable_item_list_add(
  33. app->variable_item_list, "New image", COUNT_OF(image_size), mass_storage_image_size, app);
  34. variable_item_list_set_enter_callback(app->variable_item_list, mass_storage_item_select, app);
  35. variable_item_set_current_value_index(item, 2);
  36. variable_item_set_current_value_text(item, image_size[2].name);
  37. app->new_file_size = image_size[2].value;
  38. view_dispatcher_switch_to_view(app->view_dispatcher, MassStorageAppViewStart);
  39. }
  40. bool mass_storage_scene_start_on_event(void* context, SceneManagerEvent event) {
  41. UNUSED(context);
  42. UNUSED(event);
  43. MassStorageApp* app = context;
  44. if(event.type == SceneManagerEventTypeCustom) {
  45. if(event.event == MassStorageCustomEventFileSelect) {
  46. scene_manager_next_scene(app->scene_manager, MassStorageSceneFileSelect);
  47. } else if(event.event == MassStorageCustomEventNewImage) {
  48. scene_manager_next_scene(app->scene_manager, MassStorageSceneFileName);
  49. }
  50. }
  51. return false;
  52. }
  53. void mass_storage_scene_start_on_exit(void* context) {
  54. UNUSED(context);
  55. MassStorageApp* app = context;
  56. variable_item_list_reset(app->variable_item_list);
  57. }