示例#1
0
void tside_list::catalog_page(twindow& window, int catalog, bool swap)
{
	if (catalog < MIN_PAGE || catalog > MAX_PAGE) {
		return;
	}
	int index = catalog - MIN_PAGE;

	if (window.alternate_index() == index) {
		// desired page is the displaying page, do nothing.
		return;
	}
	
	int selected_row = 0;
	if (swap) {
		selected_row = hero_table_->get_selected_row();
	}

	window.alternate_uh(hero_table_, index);

	fill_table(catalog);

	if (swap) {
		window.alternate_bh(hero_table_, index);
		hero_table_->select_row(selected_row);
	} else {
		hero_changed(window);
	}
}
示例#2
0
void ttreasure_list::catalog_page(twindow& window, int catalog, bool swap)
{
	if (catalog < MIN_PAGE || catalog > MAX_PAGE) {
		return;
	}
	int index = catalog - MIN_PAGE;

	if (window.alternate_index() == index) {
		// desired page is the displaying page, do nothing.
		return;
	}
	
	unsigned int selected_row = 0;
	if (swap) {
		// because sort, order is changed.
		selected_row = hero_table_->get_selected_row();
		tgrid* grid_ptr = hero_table_->get_row_grid(hero_table_->get_selected_row());
		selected_row = dynamic_cast<ttoggle_panel*>(grid_ptr->find("_toggle", true))->get_data();
	}

	window.alternate_uh(hero_table_, index);

	fill_table(catalog);

	if (swap) {
		window.alternate_bh(hero_table_, index);
		hero_table_->select_row(selected_row);
		// swap to other page, there is no sorted column.
		sorting_widget_ = NULL;
	} else {
		hero_changed(window);
	}

	// in order to support sortable, form relative data.
	std::vector<tbutton*> widgets;
	if (catalog == OWNERSHIP_PAGE) {
		widgets.push_back(&find_widget<tbutton>(&window, "button_name", false));
		widgets.back()->set_active(false);
		widgets.push_back(&find_widget<tbutton>(&window, "button_feature", false));
		widgets.back()->set_active(false);
		widgets.push_back(&find_widget<tbutton>(&window, "button_side", false));
		widgets.back()->set_active(false);
		widgets.push_back(&find_widget<tbutton>(&window, "button_hero", false));
		widgets.back()->set_active(false);
	}
	for (std::vector<tbutton*>::iterator i = widgets.begin(); i != widgets.end(); ++ i) {
		tbutton& widget = **i;
		connect_signal_mouse_left_click(
			widget
			, boost::bind(
				&ttreasure_list::sort_column
				, this
				, boost::ref(window)
				, boost::ref(widget)));
	}
	sorting_widgets_[catalog] = widgets;

	// speeden compare_row, remember this catalog.
	current_page_ = catalog;
}
示例#3
0
void trecruit::catalog_page(twindow& window, int catalog, bool swap)
{
    if (catalog < MIN_PAGE || catalog > MAX_PAGE) {
        return;
    }
    int index = catalog - MIN_PAGE;

    if (window.alternate_index() == index) {
        // desired page is the displaying page, do nothing.
        return;
    }

    std::vector<int> features;
    std::stringstream str;

    int selected_row = 0;
    if (swap) {
        selected_row = hero_table_->get_selected_row();
    }

    window.alternate_uh(hero_table_, index);

    const hero* rpg_hero = rpg::h;
    int hero_index = 0;
    int activity_ajdusted;
    const treasure_map& treasures = unit_types.treasures();

    for (std::vector<hero*>::iterator itor = fresh_heros_.begin(); itor != fresh_heros_.end(); ++ itor, hero_index ++) {
        /*** Add list item ***/
        string_map table_item;
        std::map<std::string, string_map> table_item_item;

        hero* h = *itor;

        if (catalog == ABILITY_PAGE) {
            table_item["use_markup"] = "true";
            str.str("");
            if (h->official_ == hero_official_commercial) {
                str << "<0,0,255>";
            } else if (h->activity_ < HEROS_FULL_ACTIVITY) {
                str << "<255,0,0>";
            }
            str << h->name();
            table_item["label"] = str.str();
            table_item_item.insert(std::make_pair("name", table_item));

            table_item["label"] = lexical_cast<std::string>(h->loyalty(*teams_[h->side_].leader()));;
            table_item_item.insert(std::make_pair("loyalty", table_item));

            table_item["label"] = hero::feature_str(h->feature_);
            table_item_item.insert(std::make_pair("feature", table_item));

            str.str("");
            if (h->activity_ < HEROS_FULL_ACTIVITY) {
                activity_ajdusted = 1 * h->leadership_ * h->activity_ / HEROS_FULL_ACTIVITY;
                str << fxptoi9(activity_ajdusted) << "/";
            }
            str << fxptoi9(h->leadership_);
            table_item["label"] = str.str();
            table_item_item.insert(std::make_pair("leadership", table_item));

            str.str("");
            if (h->activity_ < HEROS_FULL_ACTIVITY) {
                activity_ajdusted = 1 * h->force_ * h->activity_ / HEROS_FULL_ACTIVITY;
                str << fxptoi9(activity_ajdusted) << "/";
            }
            str << fxptoi9(h->force_);
            table_item["label"] = str.str();
            table_item_item.insert(std::make_pair("force", table_item));

            str.str("");
            if (h->activity_ < HEROS_FULL_ACTIVITY) {
                activity_ajdusted = 1 * h->intellect_ * h->activity_ / HEROS_FULL_ACTIVITY;
                str << fxptoi9(activity_ajdusted) << "/";
            }
            str << fxptoi9(h->intellect_);
            table_item["label"] = str.str();
            table_item_item.insert(std::make_pair("intellect", table_item));

            str.str("");
            if (h->activity_ < HEROS_FULL_ACTIVITY) {
                activity_ajdusted = 1 * h->politics_ * h->activity_ / HEROS_FULL_ACTIVITY;
                str << fxptoi9(activity_ajdusted) << "/";
            }
            str << fxptoi9(h->politics_);
            table_item["label"] = str.str();
            table_item_item.insert(std::make_pair("politics", table_item));

            str.str("");
            if (h->activity_ < HEROS_FULL_ACTIVITY) {
                activity_ajdusted = 1 * h->charm_ * h->activity_ / HEROS_FULL_ACTIVITY;
                str << fxptoi9(activity_ajdusted) << "/";
            }
            str << fxptoi9(h->charm_);
            table_item["label"] = str.str();
            table_item_item.insert(std::make_pair("charm", table_item));

            str.str("");
            str << 100 * h->activity_ / HEROS_FULL_ACTIVITY << "%";
            table_item["label"] = str.str();
            table_item_item.insert(std::make_pair("activity", table_item));

        } else if (catalog == ADAPTABILITY_PAGE) {
            table_item["use_markup"] = "true";
            str.str("");
            if (h->official_ == hero_official_commercial) {
                str << "<0,0,255>";
            } else if (h->activity_ < HEROS_FULL_ACTIVITY) {
                str << "<255,0,0>";
            }
            str << h->name();
            table_item["label"] = str.str();
            table_item_item.insert(std::make_pair("name", table_item));

            table_item["label"] = hero::adaptability_str2(h->arms_[0]);
            table_item_item.insert(std::make_pair("arm0", table_item));

            table_item["label"] = hero::adaptability_str2(h->arms_[1]);
            table_item_item.insert(std::make_pair("arm1", table_item));

            table_item["label"] = hero::adaptability_str2(h->arms_[2]);
            table_item_item.insert(std::make_pair("arm2", table_item));

            table_item["label"] = hero::adaptability_str2(h->arms_[3]);
            table_item_item.insert(std::make_pair("arm3", table_item));

            table_item["label"] = hero::adaptability_str2(h->arms_[4]);
            table_item_item.insert(std::make_pair("arm4", table_item));

        } else if (catalog == PERSONAL_PAGE) {
            table_item["use_markup"] = "true";
            str.str("");
            if (h->official_ == hero_official_commercial) {
                str << "<0,0,255>";
            } else if (h->activity_ < HEROS_FULL_ACTIVITY) {
                str << "<255,0,0>";
            }
            str << h->name();
            table_item["label"] = str.str();
            table_item_item.insert(std::make_pair("name", table_item));

            table_item["label"] = hero::gender_str(h->gender_);
            table_item_item.insert(std::make_pair("gender", table_item));

            str.str("");
            str << hero::treasure_str(h->treasure_);
            if (h->treasure_ != HEROS_NO_TREASURE) {
                treasure_map::const_iterator it = treasures.find(h->treasure_);
                str << "(";
                if (it != treasures.end()) {
                    for (std::vector<int>::const_iterator it2 = it->second.begin(); it2 != it->second.end(); ++ it2) {
                        if (it2 == it->second.begin()) {
                            str << hero::feature_str(*it2);
                        } else {
                            str << " " << hero::feature_str(*it2);
                        }
                    }
                }
                str << ")";
            }
            table_item["label"] = str.str();
            table_item_item.insert(std::make_pair("treasure", table_item));

        } else if (catalog == RELATION_PAGE) {
            table_item["use_markup"] = "true";
            str.str("");
            if (h->official_ == hero_official_commercial) {
                str << "<0,0,255>";
            } else if (h->activity_ < HEROS_FULL_ACTIVITY) {
                str << "<255,0,0>";
            }
            str << h->name();
            table_item["label"] = str.str();
            table_item_item.insert(std::make_pair("name", table_item));

            if (h->parent_[0].hero_ != HEROS_INVALID_NUMBER) {
                table_item["label"] = heros_[h->parent_[0].hero_].name();
            } else {
                table_item["label"] = "";
            }
            table_item_item.insert(std::make_pair("father", table_item));

            if (h->parent_[1].hero_ != HEROS_INVALID_NUMBER) {
                table_item["label"] = heros_[h->parent_[1].hero_].name();
            } else {
                table_item["label"] = "";
            }
            table_item_item.insert(std::make_pair("mother", table_item));

            str.str("");
            for (uint32_t i = 0; i < HEROS_MAX_OATH; i ++) {
                if (h->oath_[i].hero_ != HEROS_INVALID_NUMBER) {
                    if (i == 0) {
                        str << heros_[h->oath_[i].hero_].name();
                    } else {
                        str << " " << heros_[h->oath_[i].hero_].name();
                    }
                }
            }
            table_item["label"] = str.str();
            table_item_item.insert(std::make_pair("oath", table_item));

            str.str("");
            for (uint32_t i = 0; i < HEROS_MAX_CONSORT; i ++) {
                if (h->consort_[i].hero_ != HEROS_INVALID_NUMBER) {
                    if (i == 0) {
                        str << heros_[h->consort_[i].hero_].name();
                    } else {
                        str << " " << heros_[h->consort_[i].hero_].name();
                    }
                }
            }
            table_item["label"] = str.str();
            table_item_item.insert(std::make_pair("consort", table_item));

            str.str("");
            for (uint32_t i = 0; i < HEROS_MAX_INTIMATE; i ++) {
                if (h->intimate_[i].hero_ != HEROS_INVALID_NUMBER) {
                    if (i == 0) {
                        str << heros_[h->intimate_[i].hero_].name();
                    } else {
                        str << " " << heros_[h->intimate_[i].hero_].name();
                    }
                }
            }
            table_item["label"] = str.str();
            table_item_item.insert(std::make_pair("intimate", table_item));

            str.str("");
            for (uint32_t i = 0; i < HEROS_MAX_HATE; i ++) {
                if (h->hate_[i].hero_ != HEROS_INVALID_NUMBER) {
                    if (i == 0) {
                        str << heros_[h->hate_[i].hero_].name();
                    } else {
                        str << " " << heros_[h->hate_[i].hero_].name();
                    }
                }
            }
            table_item["label"] = str.str();
            table_item_item.insert(std::make_pair("hate", table_item));

        }
        hero_table_->add_row(table_item_item);

        tgrid* grid_ptr = hero_table_->get_row_grid(hero_index);
        ttoggle_button* toggle = dynamic_cast<ttoggle_button*>(grid_ptr->find("prefix", true));
        toggle->set_callback_state_change(boost::bind(&trecruit::hero_toggled, this, _1));
        toggle->set_data(hero_index);
        if (rpg_mode_ && h == rpg_hero) {
            toggle->set_active(false);
            toggle->set_value(true);
            if (!checked_heros_.count(hero_index)) {
                checked_heros_.insert(hero_index);
            }
        } else {
            if (checked_heros_.find(hero_index) != checked_heros_.end()) {
                toggle->set_value(true);
            }
            if (h->activity_ < game_config::minimal_activity) {
                toggle->set_active(false);
            }
        }
    }
    if (swap) {
        window.alternate_bh(hero_table_, index);
        hero_table_->select_row(selected_row);
    }
}
示例#4
0
void tinterior::catalog_page(twindow& window, int catalog, bool swap)
{
	if (catalog < MIN_PAGE || catalog > MAX_PAGE) {
		return;
	}
	int index = catalog - MIN_PAGE;
	
	if (window.alternate_index() == index) {
		// desired page is the displaying page, do nothing.
		return;
	}

	std::vector<int> features;
	std::stringstream str;

	int selected_row = 0;
	if (swap) {
		selected_row = hero_table_->get_selected_row();
	}

	window.alternate_uh(hero_table_, index);

	int hero_index = 0;
	for (std::vector<hero*>::iterator itor = fresh_heros_.begin(); itor != fresh_heros_.end(); ++ itor, hero_index ++) {
		/*** Add list item ***/
		string_map table_item;
		std::map<std::string, string_map> table_item_item;

		hero* h = *itor;

		if (catalog == ABILITY_PAGE) {
			str.str("");
			str << "<format>";
			if (h->official_ == hero_official_mayor) {
				str << "color=blue ";
			} else if (h->official_ != HEROS_NO_OFFICIAL) {
				str << "color=red ";
			}
			str << "text='" << h->name() << "'</format>";
			table_item["label"] = str.str();
			table_item_item.insert(std::make_pair("name", table_item));
			
			table_item["label"] = lexical_cast<std::string>(h->loyalty(*teams_[h->side_].leader()));;
			table_item_item.insert(std::make_pair("loyalty", table_item));

			str.str("");
			str << fxptoi9(h->politics_);
			table_item["label"] = str.str();
			table_item_item.insert(std::make_pair("politics", table_item));

			str.str("");
			str << hero::adaptability_str2(h->skill_[hero_skill_commercial]);
			table_item["label"] = str.str();
			table_item_item.insert(std::make_pair("commercial", table_item));

			str.str("");
			str << hero::adaptability_str2(h->skill_[hero_skill_invent]);
			table_item["label"] = str.str();
			table_item_item.insert(std::make_pair("technology", table_item));

			table_item["label"] = hero::feature_str(h->feature_);
			table_item_item.insert(std::make_pair("feature", table_item));

			str.str("");
			str << fxptoi9(h->leadership_);
			table_item["label"] = str.str();
			table_item_item.insert(std::make_pair("leadership", table_item));

			str.str("");
			str << fxptoi9(h->intellect_);
			table_item["label"] = str.str();
			table_item_item.insert(std::make_pair("intellect", table_item));

			str.str("");
			str << fxptoi9(h->charm_);
			table_item["label"] = str.str();
			table_item_item.insert(std::make_pair("charm", table_item));

		} else if (catalog == ADAPTABILITY_PAGE) {
			str.str("");
			str << "<format>";
			if (h->official_ == hero_official_mayor) {
				str << "color=blue ";
			} else if (h->official_ != HEROS_NO_OFFICIAL) {
				str << "color=red ";
			}
			str << "text='" << h->name() << "'</format>";
			table_item["label"] = str.str();
			table_item_item.insert(std::make_pair("name", table_item));

			table_item["label"] = hero::adaptability_str2(h->arms_[0]);
			table_item_item.insert(std::make_pair("arm0", table_item));

			table_item["label"] = hero::adaptability_str2(h->arms_[1]);
			table_item_item.insert(std::make_pair("arm1", table_item));

			table_item["label"] = hero::adaptability_str2(h->arms_[2]);
			table_item_item.insert(std::make_pair("arm2", table_item));

			table_item["label"] = hero::adaptability_str2(h->arms_[3]);
			table_item_item.insert(std::make_pair("arm3", table_item));

			table_item["label"] = hero::adaptability_str2(h->arms_[4]);
			table_item_item.insert(std::make_pair("arm4", table_item));

		} else if (catalog == RELATION_PAGE) {
			str.str("");
			str << "<format>";
			if (h->official_ == hero_official_mayor) {
				str << "color=blue ";
			} else if (h->official_ != HEROS_NO_OFFICIAL) {
				str << "color=red ";
			}
			str << "text='" << h->name() << "'</format>";
			table_item["label"] = str.str();
			table_item_item.insert(std::make_pair("name", table_item));

			if (h->parent_[0].hero_ != HEROS_INVALID_NUMBER) {
				table_item["label"] = heros_[h->parent_[0].hero_].name();
			} else {
				table_item["label"] = "";
			}
			table_item_item.insert(std::make_pair("father", table_item));

			if (h->parent_[1].hero_ != HEROS_INVALID_NUMBER) {
				table_item["label"] = heros_[h->parent_[1].hero_].name();
			} else {
				table_item["label"] = "";
			}
			table_item_item.insert(std::make_pair("mother", table_item));

			str.str("");
			for (uint32_t i = 0; i < HEROS_MAX_OATH; i ++) {
				if (h->oath_[i].hero_ != HEROS_INVALID_NUMBER) {
					if (i == 0) {
						str << heros_[h->oath_[i].hero_].name();
					} else {
						str << " " << heros_[h->oath_[i].hero_].name();
					}
				}
			}
			table_item["label"] = str.str();
			table_item_item.insert(std::make_pair("oath", table_item));

			str.str("");
			for (uint32_t i = 0; i < HEROS_MAX_CONSORT; i ++) {
				if (h->consort_[i].hero_ != HEROS_INVALID_NUMBER) {
					if (i == 0) {
						str << heros_[h->consort_[i].hero_].name();
					} else {
						str << " " << heros_[h->consort_[i].hero_].name();
					}
				}
			}
			table_item["label"] = str.str();
			table_item_item.insert(std::make_pair("consort", table_item));

			str.str("");
			for (uint32_t i = 0; i < HEROS_MAX_INTIMATE; i ++) {
				if (h->intimate_[i].hero_ != HEROS_INVALID_NUMBER) {
					if (i == 0) {
						str << heros_[h->intimate_[i].hero_].name();
					} else {
						str << " " << heros_[h->intimate_[i].hero_].name();
					}
				}
			}
			table_item["label"] = str.str();
			table_item_item.insert(std::make_pair("intimate", table_item));

			str.str("");
			for (uint32_t i = 0; i < HEROS_MAX_HATE; i ++) {
				if (h->hate_[i].hero_ != HEROS_INVALID_NUMBER) {
					if (i == 0) {
						str << heros_[h->hate_[i].hero_].name();
					} else {
						str << " " << heros_[h->hate_[i].hero_].name();
					}
				}
			}
			table_item["label"] = str.str();
			table_item_item.insert(std::make_pair("hate", table_item));

		}
		hero_table_->add_row(table_item_item);

		tgrid* grid_ptr = hero_table_->get_row_grid(hero_index);
		ttoggle_button* toggle = dynamic_cast<ttoggle_button*>(grid_ptr->find("prefix", true));
		toggle->set_callback_state_change(boost::bind(&tinterior::hero_toggled, this, _1));
		toggle->set_data(hero_index);
		if (checked_hero_ == hero_index) {
			toggle->set_value(true);
		}
		if (browse_) {
			toggle->set_active(false);
		} else if (h->official_ != HEROS_NO_OFFICIAL && h->official_ != hero_official_mayor) {
			toggle->set_active(false);
		} else if (h->loyalty(*current_team_.leader()) < game_config::wander_loyalty_threshold) {
			toggle->set_active(false);
		}
	}
	if (swap) {
		window.alternate_bh(hero_table_, index);
		hero_table_->select_row(selected_row);
	}
}