#include "menu_os.h" Menu_os::Menu_os(/* args */) { } Menu_os::~Menu_os() { } void Menu_os::set_builder(Glib::RefPtr const& builder) { this->builder = builder; builder->get_widget("popoverMenuOS", popoverMenuOS); builder->get_widget("revealerL1", revealerL1); builder->get_widget("revealerL2", revealerL2); builder->get_widget("boxALLL3", boxALLL3); } void Menu_os::set_map(std::map > &map_list_os) { this->map_list_os = map_list_os; } void Menu_os::init() { Gtk::Box *box_L1 = new Gtk::Box(); vector vec_stuct_all_reviler; for (auto& [key, value]: map_list_os) { size_t len_data = value.size(); struct map_reviler_L1 obj_map_reviler_L1; struct map_reviler_L3 obj_map_reviler_L3; vector vec_buttons; vector vec_labels; vector vec_names; Gtk::Revealer* revealerL3; Gtk::Box *box_L3 = new Gtk::Box(); builder->get_widget("boxL1", obj_map_reviler_L1.boxL1); builder->get_widget("lblRevL1", obj_map_reviler_L1.lblRevL1); builder->get_widget("btnToL2AndLv3", obj_map_reviler_L1.btnToL2AndLv3); builder->get_widget("revealerL3", revealerL3); box_L1->pack_start(*obj_map_reviler_L1.btnToL2AndLv3, Gtk::PACK_SHRINK); obj_map_reviler_L1.lblRevL1->set_text(key); this->event_template(obj_map_reviler_L1.btnToL2AndLv3, obj_map_reviler_L1.lblRevL1, name_level_1); // Todo : open level 3 for (string& str_level_2: value) { Gtk::Button* btn1; Gtk::Label* lbl1; builder->get_widget("btnToL3", btn1); builder->get_widget("lblToL3", lbl1); this->event_template(btn1, lbl1, name_level_3); box_L3->pack_start(*btn1, Gtk::PACK_SHRINK); lbl1->set_text(str_level_2); vec_buttons.push_back(btn1); vec_labels.push_back(lbl1); vec_names.push_back(str_level_2); } boxALLL3->pack_start(*box_L3, Gtk::PACK_SHRINK); revealerL3->set_reveal_child(true); obj_map_reviler_L3.revealerL3 = revealerL3; obj_map_reviler_L3.vec_buttons = vec_buttons; obj_map_reviler_L3.vec_labels = vec_labels; obj_map_reviler_L3.len_data = len_data; obj_map_reviler_L3.box_L3 = box_L3; obj_stuct_all_reviler.obj_map_reviler_L1 = obj_map_reviler_L1; obj_stuct_all_reviler.obj_map_reviler_L3 = obj_map_reviler_L3; vec_stuct_all_reviler.push_back(obj_stuct_all_reviler); GtkWidget* rev_widget = GTK_WIDGET(revealerL1->gobj()); gtk_container_add(GTK_CONTAINER(rev_widget), GTK_WIDGET(box_L1->gobj())); } } void Menu_os::show() { popoverMenuOS->show_all(); } void Menu_os::event() { btnToLev1->signal_clicked().connect(sigc::mem_fun(*this, &Menu_os::to_l1)); } void Menu_os::event_template(Gtk::Button* button, Gtk::Label* label, string& name_level) { button->signal_clicked().connect([&]() {name_level = label->get_label();}); } void Menu_os::to_l1() { revealerL1->set_reveal_child(true); revealerL2->set_reveal_child(false); }