void tmp_side_wait::generate_menu(twindow& window) { if (stop_updates_) { return; } std::stringstream strstr; users_.clear(); sides_table_->clear(); std::vector<std::set<int> > team_names = generate_team_names_from_side(level_); std::vector<int> allies = generate_allies_from_team_names(team_names); int side = 0; BOOST_FOREACH (const config &sd, level_.child_range("side")) { if (!sd["current_player"].empty()) { const std::string player_id = sd["current_player"].str(); connected_user_list::const_iterator it = users_.begin(); for (; it != users_.end(); ++ it) { if (it->name == player_id) { break; } } if (it == users_.end()) { users_.push_back(connected_user(player_id, (player_id == preferences::login())? CNTR_LOCAL: CNTR_NETWORK, 0)); } } } regenerate_hero_map_from_users(disp_, heros_, users_, member_users_); BOOST_FOREACH (const config &sd, level_.child_range("side")) { if (!sd["allow_player"].to_bool(true)) { side ++; continue; } // std::stringstream str; std::map<std::string, string_map> data; data["number"]["label"] = sd["side"].str(); strstr.str(""); if (!sd["current_player"].empty()) { strstr << sd["current_player"].str(); } else { std::string controller = sd["controller"].str(); if (controller == "network") { strstr << _("Network Player"); } else if (controller == "ai") { strstr << _("Computer Player"); } else if (controller == "null") { strstr << _("Empty"); } } data["player"]["label"] = strstr.str(); if (!sd["leader"].empty()) { hero& leader = heros_[sd["leader"].to_int()]; data["faction"]["label"] = leader.name(); data["portrait"]["label"] = leader.image(); data["feature"]["label"] = hero::feature_str(leader.side_feature_); } else { data["faction"]["label"] = _("Random"); data["portrait"]["label"] = "hero-64/random.png"; data["feature"]["label"] = hero::feature_str(HEROS_NO_FEATURE); } strstr.str(""); strstr << allies[side]; data["ally"]["label"] = strstr.str(); strstr.str(""); strstr << sd["gold"].to_int() << "/" << sd["income"].to_int(); data["income"]["label"] = strstr.str(); sides_table_->add_row(data); tgrid* grid_ptr = sides_table_->get_row_grid(side); side ++; } update_playerlist(); window.invalidate_layout(); }
void tmp_side_wait::generate_menu(twindow& window) { if (stop_updates_) { foreach (const config &sd, level_.child_range("side")) { hero& leader = heros_[sd["leader"].to_int()]; int selected_feature = sd["selected_feature"].to_int(); if (selected_feature >= COMBO_FEATURES_MIN_VALID) { leader.side_feature_ = hero::valid_features()[selected_feature - COMBO_FEATURES_MIN_VALID]; } else if (selected_feature == COMBO_FEATURES_NONE) { leader.side_feature_ = HEROS_NO_FEATURE; } } return; } /* if (sides_table_->get_item_count()) { return; } */ std::vector<std::string> details; users_.clear(); sides_table_->clear(); int side = 0; foreach (const config &sd, level_.child_range("side")) { if (!sd["allow_player"].to_bool(true)) { side ++; continue; } if (!sd["current_player"].empty()) { const std::string player_id = sd["current_player"].str(); connected_user_list::const_iterator it = users_.begin(); for (; it != users_.end(); ++ it) { if (it->name == player_id) { break; } } if (it == users_.end()) { users_.push_back(connected_user(player_id, (player_id == preferences::login())? CNTR_LOCAL: CNTR_NETWORK, 0)); } } // std::stringstream str; std::map<std::string, string_map> data; data["number"]["label"] = sd["side"].str(); data["player"]["label"] = sd["user_description"]; if (!sd["leader"].empty()) { hero& leader = heros_[sd["leader"].to_int()]; data["faction"]["label"] = leader.name(); data["portrait"]["label"] = leader.image(); } else { data["faction"]["label"] = _("Random"); data["portrait"]["label"] = "hero-64/random.png"; } std::string feature_str; int selected_feature = sd["selected_feature"].to_int(); if (selected_feature == COMBO_FEATURES_RANDOM) { data["feature"]["label"] = _("Random"); } else if (selected_feature >= COMBO_FEATURES_MIN_VALID) { data["feature"]["label"] = hero::feature_str(hero::valid_features()[selected_feature - COMBO_FEATURES_MIN_VALID]); } data["income"]["label"] = sd["income"].str(); data["color"]["label"] = get_color_string(side); // data["label"]["use_markup"] = "true"; sides_table_->add_row(data); tgrid* grid_ptr = sides_table_->get_row_grid(side); tlabel* label = find_widget<tlabel>(grid_ptr, "color", false, true); label->set_use_markup(true); side ++; } update_playerlist(); window.invalidate_layout(); }