Exemple #1
0
void tbrowse::add_row(twindow& window, tlistbox& list, const std::string& name, bool dir)
{
	std::stringstream ss;

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

	list_item["label"] = "misc/open.png~SCALE(32, 32)";
	list_item_item.insert(std::make_pair("open", list_item));

	ss << tintegrate::generate_img(get_browse_icon(dir) + "~SCALE(24, 24)") << name;
	list_item["label"] = ss.str();
	list_item_item.insert(std::make_pair("name", list_item));

	list_item["label"] = "---";
	list_item_item.insert(std::make_pair("date", list_item));

	list_item["label"] = dir? null_str: "---";
	list_item_item.insert(std::make_pair("size", list_item));

	list.add_row(list_item_item);

	int index = list.get_item_count() - 1;
	ttoggle_panel* panel = dynamic_cast<ttoggle_panel*>(list.get_row_panel(index));

	tbutton* button = find_widget<tbutton>(panel, "open", false, true);
	if (dir) {
		connect_signal_mouse_left_click(
			*button
			, boost::bind(
				&tbrowse::open
				, this
				, boost::ref(window)
				, _3
				, _4
				, (int)true
				, (int)index));

		panel->connect_signal<event::LEFT_BUTTON_DOUBLE_CLICK>(boost::bind(
				  &tbrowse::open
				, this
				, boost::ref(window)
				, _3
				, _4
				, (int)true
				, (int)index)
			, event::tdispatcher::back_pre_child);

	} else {
		button->set_visible(twidget::HIDDEN);
		button->set_active(false);
	}
}
void tside_report::fill_table(tlistbox& list, int catalog)
{
	for (std::vector<artifical*>::const_iterator it = candidate_cities_.begin(); it != candidate_cities_.end(); ++ it) {
		artifical& city = **it;
		std::stringstream str;
		
		/*** Add list item ***/
		string_map table_item;
		std::map<std::string, string_map> table_item_item;

		str.str("");
		str << city.name();
		str << "(Lv";
		str << tintegrate::generate_format(city.level(), "green");
		str << ")";
		table_item["label"] = str.str();
		table_item_item.insert(std::make_pair("name", table_item));

		if (catalog == STATUS_PAGE) {
			str.str("");
			if (city.hitpoints() < city.max_hitpoints() / 2) {
				str << tintegrate::generate_format(city.hitpoints(), "red");
			} else if (city.hitpoints() < city.max_hitpoints()) {
				str << tintegrate::generate_format(city.hitpoints(), "yellow");
			} else {
				str << city.hitpoints();
			}
			str << "/" << city.max_hitpoints();
			table_item["label"] = str.str();
			table_item_item.insert(std::make_pair("hp", table_item));

			str.str("");
			str << city.experience() << "/";
			if (city.can_advance()) {
				str << city.max_experience();
			} else {
				str << "-";
			}
			table_item["label"] = str.str();
			table_item_item.insert(std::make_pair("xp", table_item));

			str.str("");
			str << tintegrate::generate_format(city.fresh_heros().size(), "green");
			str << "/";
			str << tintegrate::generate_format(city.finish_heros().size(), "red");
			str << "/";
			str << tintegrate::generate_format(city.wander_heros().size(), "yellow");
			table_item["label"] = str.str();
			table_item_item.insert(std::make_pair("hero", table_item));

			str.str("");
			str << tintegrate::generate_format(city.reside_troops().size(), "yellow");
			str << "/";
			str << city.field_troops().size();
			table_item["label"] = str.str();
			table_item_item.insert(std::make_pair("troop", table_item));

			str.str("");
			str << tintegrate::generate_format(city.total_gold_income(current_team_.market_increase_), "yellow");
			str << "/";
			str << tintegrate::generate_format(city.total_technology_income(current_team_.technology_increase_), "green");
			table_item["label"] = str.str();
			table_item_item.insert(std::make_pair("income", table_item));

			size_t built = 0;
			size_t building = 0;
			const std::vector<map_location>& ea = city.economy_area();
			for (std::vector<map_location>::const_iterator it2 = ea.begin(); it2 != ea.end(); ++ it2) {
				unit* u = units_.find_unit(*it2);
				if (!u || !hero::is_ea_artifical(u->type()->master())) {
					continue;
				}
				if (u->get_state(ustate_tag::BUILDING)) {
					building ++;
				} else {
					built ++;
				}
			}
			str.str("");
			str << tintegrate::generate_format(building + built, building? "yellow": "green");
			str << "/";
			if (building + built != ea.size()) {
				str << tintegrate::generate_format(ea.size(), "red");
			} else {
				str << ea.size();
			}
			table_item["label"] = str.str();
			table_item_item.insert(std::make_pair("ea", table_item));
		}
		list.add_row(table_item_item);

		unsigned hero_index = list.get_item_count() - 1;
		twidget* grid_ptr = list.get_row_panel(hero_index);
		ttoggle_panel* toggle = dynamic_cast<ttoggle_panel*>(grid_ptr);
		toggle->set_data(hero_index);
	}
}