mp_flipper_modflipperzero_dialog.c 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #include <dialogs/dialogs.h>
  2. #include <mp_flipper_modflipperzero.h>
  3. #include <mp_flipper_runtime.h>
  4. #include "mp_flipper_context.h"
  5. void mp_flipper_dialog_message_set_text(
  6. const char* text,
  7. uint8_t x,
  8. uint8_t y,
  9. uint8_t h,
  10. uint8_t v) {
  11. mp_flipper_context_t* ctx = mp_flipper_context;
  12. Align align_x = h == MP_FLIPPER_ALIGN_BEGIN ? AlignLeft : AlignRight;
  13. Align align_y = v == MP_FLIPPER_ALIGN_BEGIN ? AlignTop : AlignBottom;
  14. align_x = h == MP_FLIPPER_ALIGN_CENTER ? AlignCenter : align_x;
  15. align_y = v == MP_FLIPPER_ALIGN_CENTER ? AlignCenter : align_y;
  16. dialog_message_set_text(ctx->dialog_message, text, x, y, align_x, align_y);
  17. }
  18. void mp_flipper_dialog_message_set_header(
  19. const char* text,
  20. uint8_t x,
  21. uint8_t y,
  22. uint8_t h,
  23. uint8_t v) {
  24. mp_flipper_context_t* ctx = mp_flipper_context;
  25. Align align_x = h == MP_FLIPPER_ALIGN_BEGIN ? AlignLeft : AlignRight;
  26. Align align_y = v == MP_FLIPPER_ALIGN_BEGIN ? AlignTop : AlignBottom;
  27. align_x = h == MP_FLIPPER_ALIGN_CENTER ? AlignCenter : align_x;
  28. align_y = v == MP_FLIPPER_ALIGN_CENTER ? AlignCenter : align_y;
  29. dialog_message_set_header(ctx->dialog_message, text, x, y, align_x, align_y);
  30. }
  31. void mp_flipper_dialog_message_set_button(const char* text, uint8_t button) {
  32. mp_flipper_context_t* ctx = mp_flipper_context;
  33. // left button
  34. if(button == MP_FLIPPER_INPUT_BUTTON_LEFT) {
  35. ctx->dialog_message_button_left = text;
  36. }
  37. // center button
  38. else if(button == MP_FLIPPER_INPUT_BUTTON_OK) {
  39. ctx->dialog_message_button_center = text;
  40. }
  41. // right button
  42. else if(button == MP_FLIPPER_INPUT_BUTTON_RIGHT) {
  43. ctx->dialog_message_button_right = text;
  44. }
  45. dialog_message_set_buttons(
  46. ctx->dialog_message,
  47. ctx->dialog_message_button_left,
  48. ctx->dialog_message_button_center,
  49. ctx->dialog_message_button_right);
  50. }
  51. uint8_t mp_flipper_dialog_message_show() {
  52. mp_flipper_context_t* ctx = mp_flipper_context;
  53. gui_direct_draw_release(ctx->gui);
  54. DialogsApp* dialog = furi_record_open(RECORD_DIALOGS);
  55. uint8_t button = dialog_message_show(dialog, ctx->dialog_message);
  56. furi_record_close(RECORD_DIALOGS);
  57. ctx->canvas = gui_direct_draw_acquire(ctx->gui);
  58. switch(button) {
  59. case DialogMessageButtonLeft:
  60. return MP_FLIPPER_INPUT_BUTTON_LEFT;
  61. case DialogMessageButtonCenter:
  62. return MP_FLIPPER_INPUT_BUTTON_OK;
  63. case DialogMessageButtonRight:
  64. return MP_FLIPPER_INPUT_BUTTON_RIGHT;
  65. case DialogMessageButtonBack:
  66. default:
  67. return MP_FLIPPER_INPUT_BUTTON_BACK;
  68. }
  69. }
  70. void mp_flipper_dialog_message_clear() {
  71. mp_flipper_context_t* ctx = mp_flipper_context;
  72. dialog_message_free(ctx->dialog_message);
  73. ctx->dialog_message = dialog_message_alloc();
  74. ctx->dialog_message_button_left = NULL;
  75. ctx->dialog_message_button_center = NULL;
  76. ctx->dialog_message_button_right = NULL;
  77. }