infrared_app_scene_learn_enter_name.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include "../infrared_app.h"
  2. #include "gui/modules/text_input.h"
  3. void InfraredAppSceneLearnEnterName::on_enter(InfraredApp* app) {
  4. InfraredAppViewManager* view_manager = app->get_view_manager();
  5. TextInput* text_input = view_manager->get_text_input();
  6. auto signal = app->get_received_signal();
  7. if(!signal.is_raw()) {
  8. auto message = &signal.get_message();
  9. app->set_text_store(
  10. 0,
  11. "%.4s_%0*lX",
  12. infrared_get_protocol_name(message->protocol),
  13. ROUND_UP_TO(infrared_get_protocol_command_length(message->protocol), 4),
  14. message->command);
  15. } else {
  16. auto raw_signal = signal.get_raw_signal();
  17. app->set_text_store(0, "RAW_%d", raw_signal.timings_cnt);
  18. }
  19. text_input_set_header_text(text_input, "Name the button");
  20. text_input_set_result_callback(
  21. text_input,
  22. InfraredApp::text_input_callback,
  23. app,
  24. app->get_text_store(0),
  25. InfraredAppRemoteManager::max_button_name_length,
  26. true);
  27. view_manager->switch_to(InfraredAppViewManager::ViewId::TextInput);
  28. }
  29. bool InfraredAppSceneLearnEnterName::on_event(InfraredApp* app, InfraredAppEvent* event) {
  30. bool consumed = false;
  31. if(event->type == InfraredAppEvent::Type::TextEditDone) {
  32. auto remote_manager = app->get_remote_manager();
  33. bool result = false;
  34. if(app->get_learn_new_remote()) {
  35. result = remote_manager->add_remote_with_button(
  36. app->get_text_store(0), app->get_received_signal());
  37. } else {
  38. result =
  39. remote_manager->add_button(app->get_text_store(0), app->get_received_signal());
  40. }
  41. if(!result) {
  42. app->search_and_switch_to_previous_scene(
  43. {InfraredApp::Scene::Start, InfraredApp::Scene::RemoteList});
  44. } else {
  45. app->switch_to_next_scene_without_saving(InfraredApp::Scene::LearnDone);
  46. }
  47. }
  48. return consumed;
  49. }
  50. void InfraredAppSceneLearnEnterName::on_exit(InfraredApp*) {
  51. }