ibutton_scene_exit_confirm.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #include "ibutton_scene_exit_confirm.h"
  2. #include "../ibutton_app.h"
  3. static void widget_callback(GuiButtonType result, InputType type, void* context) {
  4. furi_assert(context);
  5. iButtonApp* app = static_cast<iButtonApp*>(context);
  6. iButtonEvent event;
  7. if(type == InputTypeShort) {
  8. event.type = iButtonEvent::Type::EventTypeWidgetButtonResult;
  9. event.payload.widget_button_result = result;
  10. app->get_view_manager()->send_event(&event);
  11. }
  12. }
  13. void iButtonSceneExitConfirm::on_enter(iButtonApp* app) {
  14. iButtonAppViewManager* view_manager = app->get_view_manager();
  15. Widget* widget = view_manager->get_widget();
  16. widget_add_button_element(widget, GuiButtonTypeLeft, "Exit", widget_callback, app);
  17. widget_add_button_element(widget, GuiButtonTypeRight, "Stay", widget_callback, app);
  18. widget_add_string_element(
  19. widget, 64, 19, AlignCenter, AlignBottom, FontPrimary, "Exit to iButton menu");
  20. widget_add_string_element(
  21. widget, 64, 29, AlignCenter, AlignBottom, FontSecondary, "All unsaved data will be lost");
  22. view_manager->switch_to(iButtonAppViewManager::Type::iButtonAppViewWidget);
  23. }
  24. bool iButtonSceneExitConfirm::on_event(iButtonApp* app, iButtonEvent* event) {
  25. bool consumed = false;
  26. if(event->type == iButtonEvent::Type::EventTypeWidgetButtonResult) {
  27. if(event->payload.widget_button_result == GuiButtonTypeLeft) {
  28. app->search_and_switch_to_previous_scene({iButtonApp::Scene::SceneStart});
  29. } else if(event->payload.widget_button_result == GuiButtonTypeRight) {
  30. app->switch_to_previous_scene();
  31. }
  32. consumed = true;
  33. } else if(event->type == iButtonEvent::Type::EventTypeBack) {
  34. consumed = true;
  35. }
  36. return consumed;
  37. }
  38. void iButtonSceneExitConfirm::on_exit(iButtonApp* app) {
  39. iButtonAppViewManager* view_manager = app->get_view_manager();
  40. Widget* widget = view_manager->get_widget();
  41. widget_reset(widget);
  42. }