lights_list.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #include <vector>
  2. #include <functional>
  3. #include <gtkmm/box.h>
  4. #include <gtkmm/button.h>
  5. #include <gtkmm/orientable.h>
  6. #include "lights_list.hpp"
  7. #include "light_on_list.hpp"
  8. #include "strings.hpp"
  9. #include "config.hpp"
  10. #include "light.hpp"
  11. namespace cx_light {
  12. lights_list::lights_list() {
  13. this->add_light_callback = [] () {};
  14. this->show_light_callback = [] (light *target) {};
  15. this->edit_light_callback = [] (light *target) {};
  16. this->lights = new std::vector<light_on_list *>;
  17. this->lights->clear();
  18. this->content = new Gtk::Box();
  19. this->content->set_size_request(light_on_list::width(), -1);
  20. this->content->set_orientation(Gtk::Orientation::VERTICAL);
  21. this->content->set_margin(DEFAULT_MARGIN);
  22. this->set_margin(DEFAULT_MARGIN);
  23. this->set_child(*this->content);
  24. this->add_lights_container();
  25. this->add_create_light_button();
  26. #ifdef UI_DEBUG
  27. this->add_light(light("Sample", "1.1.1.1"));
  28. this->add_light(light("Other", "1.1.1.1"));
  29. #endif
  30. }
  31. lights_list::~lights_list() {
  32. for (unsigned int count = 0; count < this->lights->size(); ++count) {
  33. delete this->lights->at(count);
  34. }
  35. delete this->create_light;
  36. delete this->lights;
  37. delete this->lights_container;
  38. delete this->content;
  39. }
  40. void lights_list::add_lights_container() {
  41. this->lights_container = new Gtk::Box();
  42. this->lights_container->set_orientation(Gtk::Orientation::VERTICAL);
  43. this->lights_container->set_size_request(-1, light_on_list::height());
  44. this->content->append(*this->lights_container);
  45. }
  46. void lights_list::add_create_light_button() {
  47. this->create_light = new Gtk::Button(__(ADD_LIGHT));
  48. this->content->append(*this->create_light);
  49. this->create_light->signal_clicked().connect([&] () {
  50. this->add_light_callback();
  51. });
  52. }
  53. void lights_list::add_light(light target) {
  54. light_on_list *current = new light_on_list(target);
  55. current->set_edit_callback([&] (light *target) {
  56. this->edit_light_callback(target);
  57. });
  58. current->set_show_callback([&] (light *target) {
  59. this->show_light_callback(target);
  60. });
  61. this->lights_container->append(*current);
  62. this->lights->push_back(current);
  63. }
  64. void lights_list::set_add_light_callback(std::function<void()> target) {
  65. this->add_light_callback = target;
  66. }
  67. void lights_list::set_edit_light_callback(
  68. std::function<void(light *)> target
  69. ) {
  70. this->edit_light_callback = target;
  71. }
  72. void lights_list::set_show_light_callback(
  73. std::function<void(light *)> target
  74. ) {
  75. this->show_light_callback = target;
  76. }
  77. }