mass_storage_view.c 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include "mass_storage_view.h"
  2. #include <gui/elements.h>
  3. #include <mass_storage_icons.h>
  4. struct MassStorage {
  5. View* view;
  6. };
  7. typedef struct {
  8. FuriString* file_name;
  9. } MassStorageModel;
  10. static void mass_storage_draw_callback(Canvas* canvas, void* _model) {
  11. MassStorageModel* model = _model;
  12. canvas_draw_icon(canvas, 8, 14, &I_Drive_112x35);
  13. canvas_set_font(canvas, FontPrimary);
  14. canvas_draw_str_aligned(
  15. canvas, canvas_width(canvas) / 2, 0, AlignCenter, AlignTop, "USB Mass Storage");
  16. elements_string_fit_width(canvas, model->file_name, 87 - 2);
  17. canvas_set_font(canvas, FontSecondary);
  18. canvas_draw_str(canvas, 12, 25, "Disc image:");
  19. canvas_draw_str(canvas, 12, 40, furi_string_get_cstr(model->file_name));
  20. }
  21. MassStorage* mass_storage_alloc() {
  22. MassStorage* mass_storage = malloc(sizeof(MassStorage));
  23. mass_storage->view = view_alloc();
  24. view_allocate_model(mass_storage->view, ViewModelTypeLocking, sizeof(MassStorageModel));
  25. with_view_model(
  26. mass_storage->view,
  27. MassStorageModel * model,
  28. { model->file_name = furi_string_alloc(); },
  29. false);
  30. view_set_context(mass_storage->view, mass_storage);
  31. view_set_draw_callback(mass_storage->view, mass_storage_draw_callback);
  32. return mass_storage;
  33. }
  34. void mass_storage_free(MassStorage* mass_storage) {
  35. furi_assert(mass_storage);
  36. with_view_model(
  37. mass_storage->view,
  38. MassStorageModel * model,
  39. { furi_string_free(model->file_name); },
  40. false);
  41. view_free(mass_storage->view);
  42. free(mass_storage);
  43. }
  44. View* mass_storage_get_view(MassStorage* mass_storage) {
  45. furi_assert(mass_storage);
  46. return mass_storage->view;
  47. }
  48. void mass_storage_set_file_name(MassStorage* mass_storage, FuriString* name) {
  49. furi_assert(name);
  50. with_view_model(
  51. mass_storage->view,
  52. MassStorageModel * model,
  53. { furi_string_set(model->file_name, name); },
  54. true);
  55. }