diff --git a/source/menu_os.cc b/source/menu_os.cc index 453529c..35f96d8 100644 --- a/source/menu_os.cc +++ b/source/menu_os.cc @@ -36,6 +36,8 @@ void Menu_os::init() { 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; map_menu_level_1[key]->lblRevL1->set_text(key); boxLevel1->pack_end(*(map_menu_level_1[key]->boxMenuLevel1)); @@ -44,16 +46,16 @@ void Menu_os::init() { 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_2: vec_value) { auto builder_level_3 = Gtk::Builder::create_from_file(path_glade); @@ -62,6 +64,9 @@ void Menu_os::init() { 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"); 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)); @@ -69,18 +74,22 @@ void Menu_os::init() { 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)); + 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::show() { + this->close_revealer(); revealerL1->set_reveal_child(true); revealerL2->set_reveal_child(false); popoverMenuOS->show_all(); @@ -94,22 +103,25 @@ void Menu_os::set_entry(Gtk::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) { + this->close_revealer(); revealerL1->set_reveal_child(false); revealerL2->set_reveal_child(true); revealer->set_reveal_child(true); + name_level_3 = ""; + entry->set_text(name_level_1); } else { popoverMenuOS->hide(); + 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); - cout << key_global << endl; key_global = ""; } diff --git a/source/menu_os.h b/source/menu_os.h index a94810a..afa5373 100644 --- a/source/menu_os.h +++ b/source/menu_os.h @@ -29,7 +29,8 @@ private: struct struct_menu_level_3 { Gtk::Button *btnToL3; Gtk::Label *lblToL3; - Glib::RefPtr builder; + Glib::RefPtr builder_level_3; + Glib::RefPtr btnToL3_css; }; struct struct_menu_level1 { Gtk::Label *lblRevL1; @@ -40,9 +41,9 @@ private: string name; Glib::RefPtr builder; vector vec_menu_level_3; + Glib::RefPtr btnToL2AndLv3_css; }; - struct struct_menu_level1 *obj_struct_menu_level1; std::map map_menu_level_1; @@ -52,6 +53,7 @@ public: void set_map(std::map > &map_list_os); void init(); void show(); + void close_revealer(); void settings(); void set_entry(Gtk::Entry *entry); void event_template(Gtk::Label* label, string& name_level, string& key);