irda-app.hpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #pragma once
  2. #include <map>
  3. #include <irda.h>
  4. #include <furi.h>
  5. #include "irda-app-event.hpp"
  6. #include "scene/irda-app-scene.hpp"
  7. #include "irda-app-view-manager.hpp"
  8. #include "irda-app-remote-manager.hpp"
  9. #include "irda-app-receiver.hpp"
  10. #include <forward_list>
  11. #include <stdint.h>
  12. class IrdaApp {
  13. public:
  14. enum class EditElement : uint8_t {
  15. Button,
  16. Remote,
  17. };
  18. enum class EditAction : uint8_t {
  19. Rename,
  20. Delete,
  21. };
  22. enum class Scene : uint8_t {
  23. Exit,
  24. Start,
  25. Universal,
  26. UniversalTV,
  27. UniversalAudio,
  28. UniversalAirConditioner,
  29. Learn,
  30. LearnSuccess,
  31. LearnEnterName,
  32. LearnDone,
  33. LearnDoneAfter,
  34. Remote,
  35. RemoteList,
  36. Edit,
  37. EditKeySelect,
  38. EditRename,
  39. EditDelete,
  40. EditRenameDone,
  41. EditDeleteDone,
  42. };
  43. void run(void);
  44. void switch_to_next_scene(Scene index);
  45. void switch_to_next_scene_without_saving(Scene index);
  46. bool switch_to_previous_scene(uint8_t count = 1);
  47. Scene get_previous_scene();
  48. IrdaAppViewManager* get_view_manager();
  49. IrdaAppSignalReceiver* get_receiver();
  50. void set_text_store(uint8_t index, const char* text...);
  51. char* get_text_store(uint8_t index);
  52. uint8_t get_text_store_size();
  53. IrdaAppRemoteManager* get_remote_manager();
  54. void search_and_switch_to_previous_scene(const std::initializer_list<Scene>& scenes_list);
  55. void set_edit_element(EditElement value);
  56. EditElement get_edit_element(void);
  57. void set_edit_action(EditAction value);
  58. EditAction get_edit_action(void);
  59. bool get_learn_new_remote();
  60. void set_learn_new_remote(bool value);
  61. static void text_input_callback(void* context, char* text);
  62. static void popup_callback(void* context);
  63. IrdaApp() {}
  64. ~IrdaApp() {
  65. for (auto &it : scenes)
  66. delete it.second;
  67. }
  68. private:
  69. static const uint8_t text_store_size = 128;
  70. static const uint8_t text_store_max = 2;
  71. char text_store[text_store_max][text_store_size + 1];
  72. bool learn_new_remote;
  73. EditElement element;
  74. EditAction action;
  75. IrdaAppSignalReceiver receiver;
  76. IrdaAppViewManager view_manager;
  77. IrdaAppRemoteManager remote_manager;
  78. std::forward_list<Scene> previous_scenes_list;
  79. Scene current_scene = Scene::Start;
  80. std::map<Scene, IrdaAppScene*> scenes = {
  81. {Scene::Start, new IrdaAppSceneStart()},
  82. {Scene::Universal, new IrdaAppSceneUniversal()},
  83. {Scene::Learn, new IrdaAppSceneLearn()},
  84. {Scene::LearnSuccess, new IrdaAppSceneLearnSuccess()},
  85. {Scene::LearnEnterName, new IrdaAppSceneLearnEnterName()},
  86. {Scene::LearnDone, new IrdaAppSceneLearnDone()},
  87. {Scene::LearnDoneAfter, new IrdaAppSceneLearnDoneAfter()},
  88. {Scene::Remote, new IrdaAppSceneRemote()},
  89. {Scene::RemoteList, new IrdaAppSceneRemoteList()},
  90. {Scene::Edit, new IrdaAppSceneEdit()},
  91. {Scene::EditKeySelect, new IrdaAppSceneEditKeySelect()},
  92. {Scene::EditRename, new IrdaAppSceneEditRename()},
  93. {Scene::EditDelete, new IrdaAppSceneEditDelete()},
  94. {Scene::EditRenameDone, new IrdaAppSceneEditRenameDone()},
  95. {Scene::EditDeleteDone, new IrdaAppSceneEditDeleteDone()},
  96. };
  97. };