#include "menu_os.h" Menu_os::Menu_os(/* args */) { } Menu_os::~Menu_os() { } void Menu_os::set_builder(Glib::RefPtr& builder, string path_glade) { this->builder = builder; this->path_glade = path_glade; builder->get_widget("popoverMenuOS", popoverMenuOS); builder->get_widget("revealerL1", revealerL1); builder->get_widget("revealerL2", revealerL2); builder->get_widget("boxALLL3", boxALLL3); builder->get_widget("boxLevel1", boxLevel1); builder->get_widget("btnToLev1", btnToLev1); revealerL1->set_reveal_child(true); } void Menu_os::set_map(std::map > &map_list_os) { this->map_list_os = map_list_os; } void Menu_os::init() { revealerL1->set_reveal_child(true); revealerL2->set_reveal_child(true); size_t index_l1 = 0; for (auto& [key, vec_value]: map_list_os) { map_menu_level_1[key] = new struct_menu_level1; Glib::RefPtr builder_level_1 = Gtk::Builder::create_from_file(path_glade); builder_level_1->get_widget("lblRevL1", map_menu_level_1[key]->lblRevL1); builder_level_1->get_widget("btnToL2AndLv3", map_menu_level_1[key]->btnToL2AndLv3); builder_level_1->get_widget("boxMenuLevel1", map_menu_level_1[key]->boxMenuLevel1); map_menu_level_1[key]->builder = builder_level_1; map_menu_level_1[key]->lblRevL1->set_text(key); boxLevel1->pack_end(*(map_menu_level_1[key]->boxMenuLevel1)); map_menu_level_1[key]->name = key; map_menu_level_1[key]->btnToL2AndLv3->signal_clicked().connect( sigc::bind (sigc::mem_fun( *this, &Menu_os::event_template), map_menu_level_1[key]->lblRevL1, name_level_1, map_menu_level_1[key]->name)); if (vec_value.size()!= 0) { builder_level_1->get_widget("revealerL3", map_menu_level_1[key]->revealer); builder_level_1->get_widget("boxLevel3", map_menu_level_1[key]->boxLevel3); } else { map_menu_level_1[key]->revealer = NULL; map_menu_level_1[key]->boxLevel3 = NULL; } size_t index_l3 = 0; for (string& str_level_2: vec_value) { auto builder_level_3 = Gtk::Builder::create_from_file(path_glade); map_menu_level_1[key]->vec_menu_level_3.push_back(new struct_menu_level_3); builder_level_3->get_widget("btnToL3", map_menu_level_1[key]->vec_menu_level_3[index_l3]->btnToL3); builder_level_3->get_widget("lblToL3", map_menu_level_1[key]->vec_menu_level_3[index_l3]->lblToL3); map_menu_level_1[key]->vec_menu_level_3[index_l3]->lblToL3->set_text(str_level_2); map_menu_level_1[key]->boxLevel3->pack_start( *(map_menu_level_1[key]->vec_menu_level_3[index_l3]->btnToL3)); map_menu_level_1[key]->vec_menu_level_3[index_l3]->btnToL3->signal_clicked().connect( sigc::bind (sigc::mem_fun(*this, &Menu_os::event_template), map_menu_level_1[key]->vec_menu_level_3[index_l3]->lblToL3, name_level_3, map_menu_level_1[key]->name)); map_menu_level_1[key]->vec_menu_level_3[index_l3]->builder = builder_level_3; boxALLL3->pack_start( *(map_menu_level_1[key]->revealer)); index_l3 += 1; } index_l1 += 1; } } void Menu_os::show() { revealerL1->set_reveal_child(true); revealerL2->set_reveal_child(false); popoverMenuOS->show_all(); } void Menu_os::event() { btnToLev1->signal_clicked().connect(sigc::mem_fun(*this, &Menu_os::to_l1)); } void Menu_os::set_entry(Gtk::Entry *entry) { this->entry = entry; } void Menu_os::event_template(Gtk::Label* label, string& name_level, string& key) { name_level = label->get_label(); key_global = key; entry->set_text(name_level_1 + name_level_3); Gtk::Revealer *revealer = map_menu_level_1[key]->revealer; if (&name_level == &name_level_1 && map_menu_level_1[key]->vec_menu_level_3.size() != 0) { revealerL1->set_reveal_child(false); revealerL2->set_reveal_child(true); revealer->set_reveal_child(true); } else { popoverMenuOS->hide(); } } void Menu_os::to_l1() { revealerL1->set_reveal_child(true); revealerL2->set_reveal_child(false); map_menu_level_1[key_global]->revealer->set_reveal_child(false); cout << key_global << endl; key_global = ""; }