void force_list_manager::update_leader_list(int old_faction_combo_index) { // const config& side = *side_list_[side_index]; int selected_index_in_forces = (leaders_.empty() || !old_faction_combo_index)? -1: leaders_[old_faction_combo_index]; int modified_faction_combo_index = old_faction_combo_index; leaders_.clear(); /* if (side["random_faction"].to_bool()) { if(faction_combo_ != NULL) { std::vector<std::string> dummy; dummy.push_back("-"); faction_combo_->enable(false); faction_combo_->set_items(dummy); faction_combo_->set_selected(0); } return; } else { if(faction_combo_ != NULL) faction_combo_->enable(true); if(gender_combo_ != NULL) gender_combo_->enable(true); } */ std::vector<std::string> force_ids; if (!era_cfg_["factions"].empty()) { force_ids = utils::split(era_cfg_["factions"]); } std::vector<std::string>::const_iterator itor; leaders_.push_back(RANDOM_FORCE); int partial_index = 1; for (itor = force_ids.begin(); itor != force_ids.end(); ++itor) { int index = 0; for (std::vector<std::pair<const config *, int> >::iterator v = force_list_.begin(); v != force_list_.end(); ++ v, index ++) { if (v->second >= 0 && v->second != index_) { continue; } const config& force = *(v->first); if (*itor == force["id"]) { leaders_.push_back(index); if (selected_index_in_forces == index) { modified_faction_combo_index = partial_index; } partial_index ++; } } } populate_leader_combo(modified_faction_combo_index); }
void leader_list_manager::set_leader_combo(gui::combo* combo) { int selected = leader_combo_ != NULL ? leader_combo_->selected() : 0; leader_combo_ = combo; if(leader_combo_ != NULL) { if(leaders_.empty()) { update_leader_list(0); } else { populate_leader_combo(selected); } } }
void leader_list_manager::update_leader_list(int side_index) { const config& side = *side_list_[side_index]; leaders_.clear(); if (side["random_faction"].to_bool()) { if(leader_combo_ != NULL) { std::vector<std::string> dummy; dummy.push_back(utils::unicode_em_dash); leader_combo_->enable(false); leader_combo_->set_items(dummy); leader_combo_->set_selected(0); } return; } else { if(leader_combo_ != NULL) leader_combo_->enable(true); if(gender_combo_ != NULL) gender_combo_->enable(true); } if(!side["leader"].empty()) { leaders_ = utils::split(side["leader"]); } const std::string default_leader = side["type"]; const std::string random_leader = "random"; size_t default_index = 0; std::vector<std::string>::const_iterator itor; for (itor = leaders_.begin(); itor != leaders_.end(); ++itor) { if (*itor == default_leader) { break; } default_index++; } if (default_index == leaders_.size()) { leaders_.push_back(default_leader); } if (default_leader != random_leader) { leaders_.push_back(random_leader); } populate_leader_combo(default_index); }