ibutton_scene_delete_confirm.c 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #include "../ibutton_i.h"
  2. #include <toolbox/path.h>
  3. static void ibutton_scene_delete_confirm_widget_callback(
  4. GuiButtonType result,
  5. InputType type,
  6. void* context) {
  7. iButton* ibutton = context;
  8. if(type == InputTypeShort) {
  9. view_dispatcher_send_custom_event(ibutton->view_dispatcher, result);
  10. }
  11. }
  12. void ibutton_scene_delete_confirm_on_enter(void* context) {
  13. iButton* ibutton = context;
  14. Widget* widget = ibutton->widget;
  15. iButtonKey* key = ibutton->key;
  16. const uint8_t* key_data = ibutton_key_get_data_p(key);
  17. FuriString* key_name;
  18. key_name = furi_string_alloc();
  19. path_extract_filename(ibutton->file_path, key_name, true);
  20. ibutton_text_store_set(ibutton, "\e#Delete %s?\e#", furi_string_get_cstr(key_name));
  21. widget_add_text_box_element(
  22. widget, 0, 0, 128, 27, AlignCenter, AlignCenter, ibutton->text_store, true);
  23. widget_add_button_element(
  24. widget, GuiButtonTypeLeft, "Cancel", ibutton_scene_delete_confirm_widget_callback, ibutton);
  25. widget_add_button_element(
  26. widget,
  27. GuiButtonTypeRight,
  28. "Delete",
  29. ibutton_scene_delete_confirm_widget_callback,
  30. ibutton);
  31. switch(ibutton_key_get_type(key)) {
  32. case iButtonKeyDS1990:
  33. ibutton_text_store_set(
  34. ibutton,
  35. "%02X %02X %02X %02X %02X %02X %02X %02X",
  36. key_data[0],
  37. key_data[1],
  38. key_data[2],
  39. key_data[3],
  40. key_data[4],
  41. key_data[5],
  42. key_data[6],
  43. key_data[7]);
  44. widget_add_string_element(
  45. widget, 64, 34, AlignCenter, AlignBottom, FontSecondary, "Dallas");
  46. break;
  47. case iButtonKeyCyfral:
  48. ibutton_text_store_set(ibutton, "%02X %02X", key_data[0], key_data[1]);
  49. widget_add_string_element(
  50. widget, 64, 34, AlignCenter, AlignBottom, FontSecondary, "Cyfral");
  51. break;
  52. case iButtonKeyMetakom:
  53. ibutton_text_store_set(
  54. ibutton, "%02X %02X %02X %02X", key_data[0], key_data[1], key_data[2], key_data[3]);
  55. widget_add_string_element(
  56. widget, 64, 34, AlignCenter, AlignBottom, FontSecondary, "Metakom");
  57. break;
  58. }
  59. widget_add_string_element(
  60. widget, 64, 46, AlignCenter, AlignBottom, FontSecondary, ibutton->text_store);
  61. view_dispatcher_switch_to_view(ibutton->view_dispatcher, iButtonViewWidget);
  62. furi_string_free(key_name);
  63. }
  64. bool ibutton_scene_delete_confirm_on_event(void* context, SceneManagerEvent event) {
  65. iButton* ibutton = context;
  66. SceneManager* scene_manager = ibutton->scene_manager;
  67. bool consumed = false;
  68. if(event.type == SceneManagerEventTypeCustom) {
  69. consumed = true;
  70. if(event.event == GuiButtonTypeRight) {
  71. if(ibutton_delete_key(ibutton)) {
  72. scene_manager_next_scene(scene_manager, iButtonSceneDeleteSuccess);
  73. }
  74. //TODO: What if the key could not be deleted?
  75. } else if(event.event == GuiButtonTypeLeft) {
  76. scene_manager_previous_scene(scene_manager);
  77. }
  78. }
  79. return consumed;
  80. }
  81. void ibutton_scene_delete_confirm_on_exit(void* context) {
  82. iButton* ibutton = context;
  83. ibutton_text_store_clear(ibutton);
  84. widget_reset(ibutton->widget);
  85. }