#include "menu_os.h" Menu_os::Menu_os(/* args */) { } Menu_os::~Menu_os() { } void Menu_os::set_last_launched_os(string str_last_launched_os) { this->str_last_launched_os = str_last_launched_os; } void Menu_os::set_builder(Glib::RefPtr& builder, string path_glade) { this->builder = builder; this->path_glade = path_glade; 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_btnOpenMenuOS(Gtk::Button *btnOpenMenuOS) { this->btnOpenMenuOS = btnOpenMenuOS; } void Menu_os::set_map(vector>> &vec_list_os) { this->vec_list_os = vec_list_os; } void Menu_os::init() { revealerL1->set_reveal_child(true); revealerL2->set_reveal_child(true); size_t index_l1 = 0; string key = ""; for (tuple> tuple_os: vec_list_os) { key = get<0>(tuple_os); vector vec_value = get<1>(tuple_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]->btnToL2AndLv3_css = map_menu_level_1[key]->btnToL2AndLv3->get_style_context(); map_menu_level_1[key]->btnToL2AndLv3_css->add_class("noborder"); map_menu_level_1[key]->builder = builder_level_1; boxLevel1->pack_start(*(map_menu_level_1[key]->boxMenuLevel1)); map_menu_level_1[key]->name = key; this->html_last_launched_os(key, map_menu_level_1[key]->lblRevL1); 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); boxALLL3->pack_start(*(map_menu_level_1[key]->revealer)); } else { map_menu_level_1[key]->revealer = NULL; map_menu_level_1[key]->boxLevel3 = NULL; } size_t index_l3 = 0; for (string& str_level_3: 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]->btnToL3_css = map_menu_level_1[key]->vec_menu_level_3[index_l3]->btnToL3->get_style_context(); map_menu_level_1[key]->vec_menu_level_3[index_l3]->btnToL3_css->add_class("noborder"); this->html_last_launched_os(str_level_3, map_menu_level_1[key]->vec_menu_level_3[index_l3]->lblToL3); 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_level_3 = builder_level_3; index_l3 += 1; } index_l1 += 1; } } void Menu_os::close_revealer() { for (auto& [key, values]: map_menu_level_1) { if (values->revealer != NULL) { values->revealer->set_reveal_child(false); } } } void Menu_os::set_main_revealer(Gtk::Revealer *revealer) { this->main_revealer = revealer; } void Menu_os::show() { revealerL1->set_reveal_child(true); revealerL2->set_reveal_child(false); this->close_revealer(); main_revealer->set_reveal_child(true); } 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; Utils::str_remove(name_level_1, ""); Utils::str_remove(name_level_1, ""); Utils::str_remove(name_level_3, ""); Utils::str_remove(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); this->close_revealer(); revealer->set_reveal_child(true); name_level_3 = ""; //entry->set_text(name_level_1); } else if (map_menu_level_1[key]->vec_menu_level_3.size() == 0) { entry->set_text(name_level_1); name_level_3 = ""; main_revealer->set_reveal_child(false); } else { main_revealer->set_reveal_child(false); entry->set_text(name_level_1 + name_level_3); } } 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); key_global = ""; } void Menu_os::html_last_launched_os(string name_os, Gtk::Label *label) { string margin_name_os = ""; size_t index_find = this->str_last_launched_os.find(">"); size_t len_last_launched_os = this->str_last_launched_os.length(); if (index_find != string::npos) { string level_1 = this->str_last_launched_os.substr(0, index_find + 1); string level_3 = this->str_last_launched_os.substr(index_find + 1, len_last_launched_os - 1); if (name_os == level_1) { margin_name_os = "" + name_os + ""; label->set_markup(margin_name_os); } else if (name_os == level_3) { margin_name_os = "" + name_os + ""; label->set_markup(margin_name_os); } else { label->set_text(name_os); } } else { if (this->str_last_launched_os == name_os) { margin_name_os = "" + name_os + ""; label->set_markup(margin_name_os); } else { label->set_text(name_os); } } }