irda-app-scene-remote.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #include "../irda-app.hpp"
  2. #include "gui/modules/button_menu.h"
  3. typedef enum {
  4. ButtonIndexPlus = -2,
  5. ButtonIndexEdit = -1,
  6. } ButtonIndex;
  7. static void button_menu_callback(void* context, int32_t index) {
  8. IrdaApp* app = static_cast<IrdaApp*>(context);
  9. IrdaAppEvent event;
  10. event.type = IrdaAppEvent::Type::MenuSelected;
  11. event.payload.menu_index = index;
  12. app->get_view_manager()->send_event(&event);
  13. }
  14. void IrdaAppSceneRemote::on_enter(IrdaApp* app) {
  15. IrdaAppViewManager* view_manager = app->get_view_manager();
  16. ButtonMenu* button_menu = view_manager->get_button_menu();
  17. auto remote_manager = app->get_remote_manager();
  18. int i = 0;
  19. buttons_names = remote_manager->get_button_list();
  20. i = 0;
  21. for(auto& name : buttons_names) {
  22. button_menu_add_item(
  23. button_menu, name.c_str(), i++, button_menu_callback, ButtonMenuItemTypeCommon, app);
  24. }
  25. button_menu_add_item(
  26. button_menu, "+", ButtonIndexPlus, button_menu_callback, ButtonMenuItemTypeControl, app);
  27. button_menu_add_item(
  28. button_menu, "Edit", ButtonIndexEdit, button_menu_callback, ButtonMenuItemTypeControl, app);
  29. app->set_text_store(0, "%s", remote_manager->get_current_remote_name().c_str());
  30. button_menu_set_header(button_menu, app->get_text_store(0));
  31. view_manager->switch_to(IrdaAppViewManager::ViewType::ButtonMenu);
  32. }
  33. bool IrdaAppSceneRemote::on_event(IrdaApp* app, IrdaAppEvent* event) {
  34. bool consumed = true;
  35. if(event->type == IrdaAppEvent::Type::MenuSelected) {
  36. switch(event->payload.menu_index) {
  37. case ButtonIndexPlus:
  38. app->switch_to_next_scene(IrdaApp::Scene::Learn);
  39. break;
  40. case ButtonIndexEdit:
  41. app->switch_to_next_scene(IrdaApp::Scene::Edit);
  42. break;
  43. default:
  44. auto remote_manager = app->get_remote_manager();
  45. auto message = remote_manager->get_button_data(event->payload.menu_index);
  46. app->get_receiver()->send_message(message);
  47. break;
  48. }
  49. } else if(event->type == IrdaAppEvent::Type::Back) {
  50. app->search_and_switch_to_previous_scene(
  51. {IrdaApp::Scene::Start, IrdaApp::Scene::RemoteList});
  52. } else {
  53. consumed = false;
  54. }
  55. return consumed;
  56. }
  57. void IrdaAppSceneRemote::on_exit(IrdaApp* app) {
  58. IrdaAppViewManager* view_manager = app->get_view_manager();
  59. ButtonMenu* button_menu = view_manager->get_button_menu();
  60. button_menu_clean(button_menu);
  61. }