Исправлен баг с ссылкой на один и тот же revealer

pull/18/head
Igor Belitskiy 3 years ago
parent 8aaa2a2363
commit 63de4f5246

@ -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("lblRevL1", map_menu_level_1[key]->lblRevL1);
builder_level_1->get_widget("btnToL2AndLv3", map_menu_level_1[key]->btnToL2AndLv3); builder_level_1->get_widget("btnToL2AndLv3", map_menu_level_1[key]->btnToL2AndLv3);
builder_level_1->get_widget("boxMenuLevel1", map_menu_level_1[key]->boxMenuLevel1); 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]->builder = builder_level_1;
map_menu_level_1[key]->lblRevL1->set_text(key); map_menu_level_1[key]->lblRevL1->set_text(key);
boxLevel1->pack_end(*(map_menu_level_1[key]->boxMenuLevel1)); boxLevel1->pack_end(*(map_menu_level_1[key]->boxMenuLevel1));
@ -44,16 +46,16 @@ void Menu_os::init() {
sigc::bind<Gtk::Label*, string&, string&> (sigc::mem_fun( *this, sigc::bind<Gtk::Label*, string&, string&> (sigc::mem_fun( *this,
&Menu_os::event_template), map_menu_level_1[key]->lblRevL1, &Menu_os::event_template), map_menu_level_1[key]->lblRevL1,
name_level_1, map_menu_level_1[key]->name)); name_level_1, map_menu_level_1[key]->name));
if (vec_value.size()!= 0) { if (vec_value.size()!= 0) {
builder_level_1->get_widget("revealerL3", map_menu_level_1[key]->revealer); builder_level_1->get_widget("revealerL3", map_menu_level_1[key]->revealer);
builder_level_1->get_widget("boxLevel3", map_menu_level_1[key]->boxLevel3); builder_level_1->get_widget("boxLevel3", map_menu_level_1[key]->boxLevel3);
boxALLL3->pack_start(*(map_menu_level_1[key]->revealer));
} }
else { else {
map_menu_level_1[key]->revealer = NULL; map_menu_level_1[key]->revealer = NULL;
map_menu_level_1[key]->boxLevel3 = NULL; map_menu_level_1[key]->boxLevel3 = NULL;
} }
size_t index_l3 = 0; size_t index_l3 = 0;
for (string& str_level_2: vec_value) { for (string& str_level_2: vec_value) {
auto builder_level_3 = Gtk::Builder::create_from_file(path_glade); 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); map_menu_level_1[key]->vec_menu_level_3[index_l3]->btnToL3);
builder_level_3->get_widget("lblToL3", 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);
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]->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]->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));
@ -69,18 +74,22 @@ void Menu_os::init() {
sigc::bind<Gtk::Label*, string&, string&> (sigc::mem_fun(*this, sigc::bind<Gtk::Label*, string&, string&> (sigc::mem_fun(*this,
&Menu_os::event_template), map_menu_level_1[key]->vec_menu_level_3[index_l3]->lblToL3, &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)); name_level_3, map_menu_level_1[key]->name));
map_menu_level_1[key]->vec_menu_level_3[index_l3]->builder = builder_level_3; map_menu_level_1[key]->vec_menu_level_3[index_l3]->builder_level_3 = builder_level_3;
boxALLL3->pack_start(
*(map_menu_level_1[key]->revealer));
index_l3 += 1; index_l3 += 1;
} }
index_l1 += 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() { void Menu_os::show() {
this->close_revealer();
revealerL1->set_reveal_child(true); revealerL1->set_reveal_child(true);
revealerL2->set_reveal_child(false); revealerL2->set_reveal_child(false);
popoverMenuOS->show_all(); 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) { void Menu_os::event_template(Gtk::Label* label, string& name_level, string& key) {
name_level = label->get_label(); name_level = label->get_label();
key_global = key; key_global = key;
entry->set_text(name_level_1 + name_level_3);
Gtk::Revealer *revealer = map_menu_level_1[key]->revealer; 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) { 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); revealerL1->set_reveal_child(false);
revealerL2->set_reveal_child(true); revealerL2->set_reveal_child(true);
revealer->set_reveal_child(true); revealer->set_reveal_child(true);
name_level_3 = "";
entry->set_text(name_level_1);
} }
else { else {
popoverMenuOS->hide(); popoverMenuOS->hide();
entry->set_text(name_level_1 + name_level_3);
} }
} }
void Menu_os::to_l1() { void Menu_os::to_l1() {
revealerL1->set_reveal_child(true); revealerL1->set_reveal_child(true);
revealerL2->set_reveal_child(false); revealerL2->set_reveal_child(false);
map_menu_level_1[key_global]->revealer->set_reveal_child(false); map_menu_level_1[key_global]->revealer->set_reveal_child(false);
cout << key_global << endl;
key_global = ""; key_global = "";
} }

@ -29,7 +29,8 @@ private:
struct struct_menu_level_3 { struct struct_menu_level_3 {
Gtk::Button *btnToL3; Gtk::Button *btnToL3;
Gtk::Label *lblToL3; Gtk::Label *lblToL3;
Glib::RefPtr<Gtk::Builder> builder; Glib::RefPtr<Gtk::Builder> builder_level_3;
Glib::RefPtr<Gtk::StyleContext> btnToL3_css;
}; };
struct struct_menu_level1 { struct struct_menu_level1 {
Gtk::Label *lblRevL1; Gtk::Label *lblRevL1;
@ -40,9 +41,9 @@ private:
string name; string name;
Glib::RefPtr<Gtk::Builder> builder; Glib::RefPtr<Gtk::Builder> builder;
vector<struct struct_menu_level_3*> vec_menu_level_3; vector<struct struct_menu_level_3*> vec_menu_level_3;
Glib::RefPtr<Gtk::StyleContext> btnToL2AndLv3_css;
}; };
struct struct_menu_level1 *obj_struct_menu_level1;
std::map<string, struct struct_menu_level1*> map_menu_level_1; std::map<string, struct struct_menu_level1*> map_menu_level_1;
@ -52,6 +53,7 @@ public:
void set_map(std::map <string, vector<string>> &map_list_os); void set_map(std::map <string, vector<string>> &map_list_os);
void init(); void init();
void show(); void show();
void close_revealer();
void settings(); void settings();
void set_entry(Gtk::Entry *entry); void set_entry(Gtk::Entry *entry);
void event_template(Gtk::Label* label, string& name_level, string& key); void event_template(Gtk::Label* label, string& name_level, string& key);

Loading…
Cancel
Save