ibutton_scene_delete_confirm.c 3.0 KB

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