コード例 #1
0
ファイル: chat_log.cpp プロジェクト: shikadilord/wesnoth
 void pre_show(twindow& window)
 {
     LOG_CHAT_LOG << "Entering tchat_log::view::pre_show" << std::endl;
     controller_.update_view_from_model(true);
     window.invalidate_layout(); // workaround for assertion failure
     LOG_CHAT_LOG << "Exiting tchat_log::view::pre_show" << std::endl;
 }
コード例 #2
0
void teditor_settings::update_selected_tod_info(twindow& window)
{
	bool custom = custom_tod_toggle_->get_value();
	if (custom) {
		current_tod_label_->set_label(_("Custom setting"));
	} else {
		std::stringstream ss;
		ss << (current_tod_ + 1);
		ss << "/" << tods_.size();
		ss << ": " << get_selected_tod().name;
		current_tod_label_->set_label(ss.str());
		/**
		 * @todo Implement the showing of the ToD icon.
		 *
		 * Note at the moment the icon is a label widget, should become an
		 * image widget.
		 */
		//current_tod_image_->set_icon_name(get_selected_tod().image);
		custom_tod_red_->set_value(get_selected_tod().red);
		custom_tod_green_->set_value(get_selected_tod().green);
		custom_tod_blue_->set_value(get_selected_tod().blue);
		custom_tod_red_field_->set_cache_value(get_selected_tod().red);
		custom_tod_green_field_->set_cache_value(get_selected_tod().green);
		custom_tod_blue_field_->set_cache_value(get_selected_tod().blue);
	}
	custom_tod_red_->set_active(custom);
	custom_tod_green_->set_active(custom);
	custom_tod_blue_->set_active(custom);
	current_tod_label_->set_active(!custom);
	update_tod_display(window);
	window.invalidate_layout();
}
コード例 #3
0
ファイル: player_info.cpp プロジェクト: ArtBears/wesnoth
void tlobby_player_info::update_relation(twindow& w)
{
	add_to_friends_->set_active(false);
	add_to_ignores_->set_active(false);
	remove_from_list_->set_active(false);
	switch(info_.relation) {
		case user_info::FRIEND:
			relation_->set_label(_("On friends list"));
			add_to_ignores_->set_active(true);
			remove_from_list_->set_active(true);
			break;
		case user_info::IGNORED:
			relation_->set_label(_("On ignores list"));
			add_to_friends_->set_active(true);
			remove_from_list_->set_active(true);
			break;
		case user_info::NEUTRAL:
			relation_->set_label(_("Neither a friend nor ignored"));
			add_to_friends_->set_active(true);
			add_to_ignores_->set_active(true);
			break;
		case user_info::ME:
			relation_->set_label(_("You"));
			break;
		default:
			relation_->set_label(_("Error"));
	}
	w.invalidate_layout();
}
コード例 #4
0
ファイル: custom_tod.cpp プロジェクト: ArtBears/wesnoth
void tcustom_tod::update_tod_display(twindow& window)
{
	image::set_color_adjustment(tod_red_field_->get_value(),
								tod_green_field_->get_value(),
								tod_blue_field_->get_value());

	if(!display_) {
		return;
	}

	// Prevent a floating slice of window appearing alone over the
	// theme UI sidebar after redrawing tiles and before we have a
	// chance to redraw the rest of this window.
	window.undraw();

	// NOTE: We only really want to re-render the gamemap tiles here.
	// Redrawing everything is a significantly more expensive task.
	// At this time, tiles are the only elements on which ToD tint is
	// meant to have a visible effect. This is very strongly tied to
	// the image caching mechanism.
	//
	// If this ceases to be the case in the future, you'll need to call
	// redraw_everything() instead.

	// invalidate all tiles so they are redrawn with the new ToD tint next
	display_->invalidate_all();

	// redraw tiles
	display_->draw(false);

	window.invalidate_layout();
}
コード例 #5
0
void trecruit::switch_type_internal(twindow& window)
{
    int side_num = city_.side();
    std::stringstream str;
    int gold = current_team_.gold();

    tlistbox* list = find_widget<tlistbox>(&window, "type_list", false, true);
    list->clear();
    unit_types_.clear();

    const std::vector<const unit_type*>& recruits = city_.recruits(game_config::current_level);
    for (std::vector<const unit_type*>::const_iterator it = recruits.begin(); it != recruits.end(); ++it) {
        /*** Add list item ***/
        const unit_type* type = *it;
        VALIDATE(type, std::string("could not find unit type ") + type->id());

        string_map list_item;
        std::map<std::string, string_map> list_item_item;

        if (gold >= type->cost() * cost_exponent_ / 100) {
            list_item["label"] = type->image() + "~RC(" + type->flag_rgb() + ">" + team::get_side_color_index(side_num) + ")";
        } else {
            list_item["label"] = type->image() + "~GS()";
        }

        list_item_item.insert(std::make_pair("icon", list_item));

        list_item["label"] = type->type_name();
        list_item_item.insert(std::make_pair("name", list_item));

        str.str("");
        str << type->cost() * cost_exponent_ / 100 << " " << sngettext("unit^Gold", "Gold", type->cost() * cost_exponent_ / 100);
        list_item["label"] = str.str();
        list_item_item.insert(std::make_pair("cost", list_item));

        list->add_row(list_item_item);

        tgrid* grid_ptr = list->get_row_grid(unit_types_.size());
        twidget* widget = grid_ptr->find("leader", false);
        widget->set_visible(type->leader()? twidget::VISIBLE: twidget::INVISIBLE);

        unit_types_.push_back(type);
    }
    window.invalidate_layout();
    if (type_index_ >= (int)list->get_item_count()) {
        type_index_ = list->get_item_count() - 1;
    }
    list->select_row(type_index_);

    tbutton* prev = find_widget<tbutton>(&window, "prev", false, true);
    prev->set_active(game_config::current_level != game_config::min_level);
    tbutton* next = find_widget<tbutton>(&window, "next", false, true);
    next->set_active(game_config::current_level != game_config::max_level);

    str.str("");
    str << "misc/digit-big.png~CROP(" << 30 * game_config::current_level << ", 0, 30, 45)";
    find_widget<tcontrol>(&window, "level", false, false)->set_label(str.str());

    type_selected(window);
}
コード例 #6
0
	void pre_show(twindow& window)
	{
		model_.clear_sides();
		controller_.show_sides_list();
		model_.clear_nicks();
		controller_.update_view_from_model();
		window.invalidate_layout(); // workaround for assertion failure
	}
コード例 #7
0
void teditor_generate_map::update_current_generator_label(twindow& window)
{
	std::stringstream ss;
	ss << lexical_cast<std::string>(current_map_generator_ + 1);
	ss << "/" << lexical_cast<std::string>(map_generators_.size());
	ss << ": " << get_selected_map_generator()->name() << ", " << get_selected_map_generator()->config_name();
	current_generator_label_->set_label(ss.str());

	window.invalidate_layout();
}
コード例 #8
0
ファイル: game_load.cpp プロジェクト: coolsee/War-Of-Kingdom
void tgame_load::display_savegame(twindow& window)
{
	const int selected_row = savegame_list_->get_selected_row();

	twidget& preview_pane =
			find_widget<twidget>(&window, "preview_pane", false);

	if (selected_row == -1) {
		preview_pane.set_visible(twidget::HIDDEN);
	} else if (current_page_ == LOCAL_PAGE) {
		preview_pane.set_visible(twidget::VISIBLE);

		savegame::save_info& game = games_[selected_row];
		filename_ = game.name;

		config cfg_summary;
		std::string dummy;

		try {
			savegame::manager::load_summary(game.name, cfg_summary, &dummy);
		} catch(game::load_game_failed&) {
			cfg_summary["corrupt"] = "yes";
		}

		find_widget<timage>(&window, "imgLeader", false).
				set_label(cfg_summary["leader_image"]);

		find_widget<tminimap>(&window, "minimap", false).
				set_map_data(cfg_summary["map_data"]);

		find_widget<tlabel>(&window, "lblScenario", false).set_label(game.name);

		std::stringstream str;
		str << format_time_local(cfg_summary["create"].to_long()) << "\n";
		str << _("Total time") << ": " << format_time_elapse(cfg_summary["duration"].to_int());
		str << "(" << help::tintegrate::generate_format(cfg_summary["hash"].to_int(), "yellow") << ")";
		evaluate_summary_string(str, cfg_summary);

		find_widget<tlabel>(&window, "lblSummary", false).set_label(str.str());

		window.invalidate_layout();

	} else if (current_page_ == NETWORK_PAGE) {
		preview_pane.set_visible(twidget::VISIBLE);

		savegame::www_save_info& game = www_saves_[selected_row];
		filename_ = game.name;

		find_widget<tminimap>(&window, "minimap", false).set_map_data("");

		find_widget<tlabel>(&window, "lblScenario", false).set_label(game.name);

		find_widget<tlabel>(&window, "lblSummary", false).set_label("");
	}
}
コード例 #9
0
void tcampaign_selection::campaign_selected(twindow& window, tlistbox& list, const int type)
{
	const int selected_row = list.get_selected_row();

	tscrollbar_panel& multi_page = find_widget<tscrollbar_panel>(&window, "campaign_details", false);

	tscroll_label& label = find_widget<tscroll_label>(&window, "description", false);
	label.set_label(campaigns_[selected_row].description);

	tcontrol& image = find_widget<tcontrol>(&window, "image", false);
	image.set_label(campaigns_[selected_row].image);

	window.invalidate_layout();
}
コード例 #10
0
ファイル: lobby.cpp プロジェクト: CliffsDover/wesnoth
void tlobby_main::show_preferences_button_callback(twindow& window)
{
	if(preferences_callback_) {
		preferences_callback_();

		/**
		 * The screen size might have changed force an update of the size.
		 *
		 * @todo This might no longer be needed when gui2 is done.
		 */
		window.invalidate_layout();

		wesnothd_connection_.send_data(config("refresh_lobby"));
	}
}
コード例 #11
0
ファイル: title_screen.cpp プロジェクト: oys0317/opensanguo
void ttitle_screen::update_tip(twindow& window, const bool previous)
{
	next_tip_of_day(tips_, previous);
	const config *tip = get_tip_of_day(tips_);
	assert(tip);

	find_widget<tlabel>(&window, "tip", false).set_label((*tip)["text"]);
	find_widget<tlabel>(&window, "source", false).set_label((*tip)["source"]);

	/**
	 * @todo Convert the code to use a multi_page so the invalidate is not
	 * needed.
	 */
	window.invalidate_layout();
}
コード例 #12
0
void ttreasure::set_internal(twindow& window)
{
	const std::vector<size_t>& holded_treasures = current_team_.holded_treasures();

	treasure_list_->clear();
	human_list_->clear();
	fill_2list(window);

	window.invalidate_layout();
	treasure_index_ = treasure_list_->get_item_count() - 1;
	if (treasure_index_ >= 0) {
		treasure_list_->select_row(treasure_index_);
	}
	human_list_->select_row(human_index_);

	const hero& h = heros_[human_pairs_[human_index_].first];
	refresh_3button(window, h);
}
コード例 #13
0
ファイル: camp_armory.cpp プロジェクト: hyrio/War-Of-Kingdom
void tcamp_armory::refresh_according_to_hero(twindow& window, const int curr)
{
	char id[24];
	unit& u = *candidate_troops_[prev_troop_];
	hero* replaced_hero = NULL;
	ttoggle_button* toggle;
	
	// extra replaced hero pointer
	if (prev_captain_ == 0) {
		replaced_hero = &u.master();
	} else if (prev_captain_ == 1) {
		if (u.second().valid()) {
			replaced_hero = &u.second();
		}
	} else if (prev_captain_ == 2) {
		if (u.third().valid()) {
			replaced_hero = &u.third();
		}
	}

	if (!replaced_hero && curr == candidate_heros_.size()) {
		sprintf(id, "candidate_hero%u", curr);
		toggle = find_widget<ttoggle_button>(&window, id, false, false);
		toggle->set_value(false);
		return;
	} else if (u.type()->require() == unit_type::REQUIRE_LEADER) {
		if (replaced_hero && replaced_hero->official_ == hero_official_leader) { 
			sprintf(id, "candidate_hero%u", curr);
			toggle = find_widget<ttoggle_button>(&window, id, false, false);
			toggle->set_value(false);
			return;
		}
	} else if (u.type()->require() == unit_type::REQUIRE_FEMALE) {
		if (replaced_hero && curr != candidate_heros_.size() && candidate_heros_[curr]->gender_ != hero_gender_female) {
			bool other_has_female = false;
			if (candidate_heros_[curr]->official_ != hero_official_leader) {
				if (u.master().number_ != replaced_hero->number_ && u.master().gender_ == hero_gender_female) {
					other_has_female = true;
				}
				if (!other_has_female && u.second().valid() && u.second().number_ != replaced_hero->number_ && u.second().gender_ == hero_gender_female) {
					other_has_female = true;
				} 
				if (!other_has_female && u.third().valid() && u.third().number_ != replaced_hero->number_ && u.third().gender_ == hero_gender_female) {
					other_has_female = true;
				}
			} else {
				other_has_female = candidate_heros_[curr]->gender_ == hero_gender_female;
			}

			if (!other_has_female) {
				sprintf(id, "candidate_hero%u", curr);
				toggle = find_widget<ttoggle_button>(&window, id, false, false);
				toggle->set_value(false);
				return;
			}
		}

	}

	// replace!!
	std::vector<hero*> used_heros;
	used_heros.push_back(&u.master());
	if (u.second().valid()) {
		used_heros.push_back(&u.second());
	}
	if (u.third().valid()) {
		used_heros.push_back(&u.third());
	}
	if (prev_captain_ < (int)used_heros.size()) {
		used_heros.erase(used_heros.begin() + prev_captain_);
	}
	if (curr != candidate_heros_.size()) {
		used_heros.push_back(candidate_heros_[curr]);
	}
	// sort
	std::sort(used_heros.begin(), used_heros.end(), sort_recruit(u.type()));

	u.replace_captains(used_heros);

	// update candidate heros
	if (replaced_hero) {
		if (curr != candidate_heros_.size()) {
			candidate_heros_[curr] = replaced_hero;
		} else {
			candidate_heros_.push_back(replaced_hero);
		}
		// sort
		// std::sort(candidate_heros_.begin(), candidate_heros_.end(), compare_leadership);
	} else if (curr != candidate_heros_.size()) {
		candidate_heros_.erase(candidate_heros_.begin() + curr);
	}

	sprintf(id, "candidate_hero%u", curr);
	toggle = find_widget<ttoggle_button>(&window, id, false, false);
	toggle->set_value(false);

	refresh_buttons_from_armory_cfg(window);

	if (rpg::stratum == hero_stratum_citizen) {
		bool found = false;
		for (size_t i = reserve_heros_; i < candidate_heros_.size(); i ++) {
			if (candidate_heros_[i] == rpg::h) {
				found = true;
				break;
			}
		}
		tbutton* ok = find_widget<tbutton>(&window, "ok", false, false);
		ok->set_active(!found);
	}

	window.invalidate_layout();
}
コード例 #14
0
ファイル: camp_armory.cpp プロジェクト: hyrio/War-Of-Kingdom
void tcamp_armory::refresh_according_to_troop(twindow& window, const int curr)
{
	std::stringstream str;
	size_t i;

	if (candidate_troops_.empty()) {
		return;
	}
	if (prev_troop_ == curr) {
		if (prev_troop_ != -1) {
			str.str("");
			str << "candidate_troop" << prev_troop_;
			ttoggle_button* prev_troop = find_widget<ttoggle_button>(&window, str.str(), false, false);
			prev_troop->set_value(true);
		}
		return;
	}

	if (prev_troop_ != -1) {
		str.str("");
		str << "candidate_troop" << prev_troop_;
		ttoggle_button* prev_troop = find_widget<ttoggle_button>(&window, str.str(), false, false);
		prev_troop->set_value(false);
		prev_troop->set_dirty();

		window.invalidate_layout();
	}

	// current troop
	str.str("");
	str << "candidate_troop" << curr;
	ttoggle_button* curr_troop = find_widget<ttoggle_button>(&window, str.str(), false, false);
	// curr_troop->set_value(true);
	curr_troop->set_dirty();

	// remember this index
	prev_troop_ = curr;

	unit& u = *candidate_troops_[curr];
	ttoggle_button* toggle = NULL;

	toggle = find_widget<ttoggle_button>(&window, "hero0", false, false);
	for (i = 0; i < 6; i ++) {
		toggle->canvas()[i].set_variable("image", variant(u.master().image()));
	}
	toggle->set_value(false);

	toggle = find_widget<ttoggle_button>(&window, "hero1", false, false);
	for (i = 0; i < 6; i ++) {
		if (u.second().valid()) {
			toggle->canvas()[i].set_variable("image", variant(u.second().image()));
		} else {
			toggle->canvas()[i].set_variable("image", variant(""));
		}
	}
	toggle->set_value(false);

	toggle = find_widget<ttoggle_button>(&window, "hero2", false, false);
	for (i = 0; i < 6; i ++) {
		if (u.third().valid()) {
			toggle->canvas()[i].set_variable("image", variant(u.third().image()));
		} else {
			toggle->canvas()[i].set_variable("image", variant(""));
		}
	}
	toggle->set_value(false);

	int last_captain;
	if (u.second().valid()) {
		toggle->set_active(true);
		if (u.third().valid()) {
			last_captain = 2;
		} else {
			last_captain = 1;
		}
	} else {
		toggle->set_active(false);
		last_captain = 0;
	}

	if (prev_captain_ == 0) {
		prev_captain_ = -1;
	}
	refresh_according_to_captain(window, (last_captain + 1) % 3);

	// image of arms
	toggle = find_widget<ttoggle_button>(&window, "arms_image", false, false);
	update_troop_ui2(toggle, &u);
	toggle->set_active(false);

	tlabel* label;
/*	// leadership
	label = find_widget<tlabel>(&window, "tip_leadership", false, true);
	label->set_label(lexical_cast<std::string>(u.leadership_));

	// force
	label = find_widget<tlabel>(&window, "tip_force", false, true);
	label->set_label(lexical_cast<std::string>(u.force_));

	// intellect
	label = find_widget<tlabel>(&window, "tip_intellect", false, true);
	label->set_label(lexical_cast<std::string>(u.intellect_));

	// spirit
	label = find_widget<tlabel>(&window, "tip_spirit", false, true);
	label->set_label(lexical_cast<std::string>(u.spirit_));

	// charm
	label = find_widget<tlabel>(&window, "tip_charm", false, true);
	label->set_label(lexical_cast<std::string>(u.charm_));
*/
	// hp
	label = find_widget<tlabel>(&window, "tip_hp", false, true);
	str.str("");
	str << "HP: " << u.max_hitpoints();
	label->set_label(str.str());

	// xp
	label = find_widget<tlabel>(&window, "tip_xp", false, true);
	str.str("");
	str << "XP: " << u.max_experience();
	label->set_label(str.str());

	// mp
	label = find_widget<tlabel>(&window, "tip_mp", false, true);
	str.str("");
	str << "MP: " << u.total_movement();
	label->set_label(str.str());

	// traits
	tscroll_label* label2 = find_widget<tscroll_label>(&window, "tip_traits", false, true);
	label2->set_label(u.form_tip(true));

	str.str("");
	str << "candidate_hero" << candidate_heros_.size();
	toggle = find_widget<ttoggle_button>(&window, str.str(), false, false);
	if (toggle) {
		toggle->set_active(u.second().valid()? true: false);
	}
}
コード例 #15
0
	void handle_nicks_list_item_clicked(twindow& window)
	{
		controller_.handle_nicks_list_item_clicked();
		window.invalidate_layout(); // workaround for assertion failure
	}
コード例 #16
0
ファイル: exile.cpp プロジェクト: hyrio/War-Of-Kingdom
void texile::fill_exile_table(twindow& window, int cursel)
{
	std::stringstream strstr;
	int value;

	tlistbox* list = find_widget<tlistbox>(&window, "type_list", false, true);
	list->clear();

	const std::vector<tgroup::tmember>& exiles = group_.exiles();
	for (std::vector<tgroup::tmember>::const_iterator it = exiles.begin(); it != exiles.end(); ++ it) {
		const tgroup::tmember& m = *it;
		hero& h = *m.h;

		/*** Add list item ***/
		string_map list_item;
		std::map<std::string, string_map> list_item_item;

		strstr.str("");
		strstr << (std::distance(exiles.begin(), it) + 1);
		list_item["label"] = strstr.str();
		list_item_item.insert(std::make_pair("index", list_item));

		strstr.str("");
		strstr << h.image();
		list_item["label"] = strstr.str();
		list_item_item.insert(std::make_pair("icon", list_item));

		// name
		strstr.str("");
		if (h.utype_ != HEROS_NO_UTYPE) {
			const unit_type* ut = unit_types.keytype(h.utype_);
			strstr << tintegrate::generate_img(ut->icon()) << "\n";
		}
		strstr << h.name();
		list_item["label"] = strstr.str();
		list_item_item.insert(std::make_pair("name", list_item));

		// level
		strstr.str("");
		if (m.level / game_config::levels_per_rank >= 2) {
			strstr << _("rank^Gold");
		} else if (m.level / game_config::levels_per_rank >= 1) {
			strstr << _("rank^Silver");
		} else {
			strstr << _("rank^Copper");
		}
		strstr << "(" << (m.level % game_config::levels_per_rank + 1) << ")";
		list_item["label"] = "--";
		list_item_item.insert(std::make_pair("level", list_item));

		// cost
		strstr.str("");
		value = h.cost_;
		strstr << value;
		list_item["label"] = strstr.str();
		list_item_item.insert(std::make_pair("cost", list_item));

		// leadership
		strstr.str("");
		strstr << fxptoi9(h.leadership_);
		list_item["label"] = strstr.str();
		list_item_item.insert(std::make_pair("leadership", list_item));

		// charm
		strstr.str("");
		strstr << fxptoi9(h.charm_);
		list_item["label"] = strstr.str();
		list_item_item.insert(std::make_pair("charm", list_item));

		// feature
		strstr.str("");
		strstr << hero::feature_str(h.feature_);
		list_item["label"] = strstr.str();
		list_item_item.insert(std::make_pair("feature", list_item));

		// tactic
		strstr.str("");
		if (h.tactic_ != HEROS_NO_TACTIC) {
			strstr << unit_types.tactic(h.tactic_).name();
		} else if (m.base->tactic_ != HEROS_NO_TACTIC) {
			strstr << tintegrate::generate_format(unit_types.tactic(m.base->tactic_).name(), "red");
		}
		list_item["label"] = strstr.str();
		list_item_item.insert(std::make_pair("tactic", list_item));

		list->add_row(list_item_item);

		tgrid* grid = list->get_row_grid(list->get_item_count() - 1);
		ttoggle_panel* toggle = dynamic_cast<ttoggle_panel*>(grid->find("_toggle", true));
		toggle->set_data(h.number_);
	}

	if (cursel >= (int)exiles.size()) {
		cursel = (int)exiles.size() - 1;
	}
	if (!exiles.empty()) {
		list->select_row(cursel);
	}
	selected_number_ = exiles.size()? exiles[cursel].h->number_: HEROS_INVALID_NUMBER;

	refresh_title_flag(window);
	set_2button_active(window);

	window.invalidate_layout();
}
コード例 #17
0
ファイル: chat_log.cpp プロジェクト: shikadilord/wesnoth
 void filter(twindow& window)
 {
     controller_.filter();
     window.invalidate_layout(); // workaround for assertion failure
 }
コード例 #18
0
ファイル: chat_log.cpp プロジェクト: shikadilord/wesnoth
 void previous_page(twindow& window)
 {
     controller_.previous_page();
     window.invalidate_layout(); // workaround for assertion failure
 }
コード例 #19
0
ファイル: chat_log.cpp プロジェクト: shikadilord/wesnoth
 void handle_page_number_changed(twindow& window)
 {
     controller_.handle_page_number_changed();
     window.invalidate_layout(); // workaround for assertion failure
 }
コード例 #20
0
ファイル: mp_side_wait.cpp プロジェクト: hyrio/War-Of-Kingdom
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();
}
コード例 #21
0
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();
}