irda_app_brut_view.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #include "furi_hal_resources.h"
  2. #include "assets_icons.h"
  3. #include "gui/canvas.h"
  4. #include "gui/view.h"
  5. #include "input/input.h"
  6. #include <gui/elements.h>
  7. #include <furi.h>
  8. #include "irda_app_brut_view.h"
  9. #include "gui/modules/button_panel.h"
  10. #include <stdint.h>
  11. struct IrdaAppPopupBrut {
  12. uint16_t progress;
  13. uint16_t progress_max;
  14. char percents_string_storage[8];
  15. };
  16. bool popup_brut_increase_progress(IrdaAppPopupBrut* popup_brut) {
  17. furi_assert(popup_brut);
  18. if(popup_brut->progress < popup_brut->progress_max)
  19. ++popup_brut->progress;
  20. else
  21. furi_assert(0);
  22. return popup_brut->progress < popup_brut->progress_max;
  23. }
  24. void popup_brut_draw_callback(Canvas* canvas, void* context) {
  25. furi_assert(canvas);
  26. furi_assert(context);
  27. IrdaAppPopupBrut* popup_brut = (IrdaAppPopupBrut*)context;
  28. uint8_t x = 0;
  29. uint8_t width = 64;
  30. uint8_t x_max = x + width - 1;
  31. uint8_t y = 36;
  32. uint8_t height = 59;
  33. uint8_t y_max = y + height - 1;
  34. canvas_invert_color(canvas);
  35. canvas_draw_rbox(canvas, x + 1, y + 1, width - 2, height - 2, 3);
  36. canvas_invert_color(canvas);
  37. canvas_draw_rframe(canvas, x, y, width, height, 3);
  38. canvas_draw_rframe(canvas, x + 1, y + 1, width - 2, height - 2, 3);
  39. canvas_draw_line(canvas, x + 2, y + 1, x + 2, y + 3);
  40. canvas_draw_line(canvas, x + 1, y + 2, x + 3, y + 2);
  41. canvas_draw_line(canvas, x_max - 2, y + 1, x_max - 2, y + 3);
  42. canvas_draw_line(canvas, x_max - 1, y + 2, x_max - 3, y + 2);
  43. canvas_draw_line(canvas, x + 2, y_max - 1, x + 2, y_max - 3);
  44. canvas_draw_line(canvas, x + 1, y_max - 2, x + 3, y_max - 2);
  45. canvas_draw_line(canvas, x_max - 2, y_max - 1, x_max - 2, y_max - 3);
  46. canvas_draw_line(canvas, x_max - 1, y_max - 2, x_max - 3, y_max - 2);
  47. elements_progress_bar(
  48. canvas, x + 4, y + 19, x_max - 8, popup_brut->progress, popup_brut->progress_max);
  49. canvas_set_font(canvas, FontSecondary);
  50. canvas_draw_str(canvas, x + 15, y + 12, "Sending ...");
  51. canvas_draw_icon(canvas, x + 11, y_max - 14, &I_Back_15x10);
  52. uint8_t percent_value = 100 * popup_brut->progress / popup_brut->progress_max;
  53. snprintf(
  54. popup_brut->percents_string_storage,
  55. sizeof(popup_brut->percents_string_storage),
  56. "%d%%",
  57. percent_value);
  58. elements_multiline_text_aligned(
  59. canvas, x + 32, y + 40, AlignCenter, AlignBottom, popup_brut->percents_string_storage);
  60. canvas_draw_str(canvas, x + 30, y_max - 5, "= stop");
  61. }
  62. void popup_brut_set_progress_max(IrdaAppPopupBrut* popup_brut, uint16_t progress_max) {
  63. furi_assert(popup_brut);
  64. popup_brut->progress = 0;
  65. popup_brut->progress_max = progress_max;
  66. }
  67. IrdaAppPopupBrut* popup_brut_alloc(void) {
  68. return (IrdaAppPopupBrut*)furi_alloc(sizeof(IrdaAppPopupBrut));
  69. }
  70. void popup_brut_free(IrdaAppPopupBrut* popup_brut) {
  71. free(popup_brut);
  72. }