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); } }
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; }
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); } }
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); } }