git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3462 c06c8d41-db1a-0410-9941-cceddc491573
3TNMXC6XG723NP5RJDQS3ONETVCXPTZXOG3YTDFT2JKKGLCYL7WAC
3ZNI2YMHYXRVEONY5CGWXSRMFSLOATZMKU7H6HRY3CC2W6OZAM7QC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
7ISXWQPJNJPE23HHB7JLHYXHEW5QTDULNJIFVNSWONUZXWQJ2L7AC
T4IH76FA5TWHFOZUJFHLQXQJENJHWTUZZP4EGNA7D4GTZY7D4ZKAC
GACH6PWPGGUBEE7PFEPQMOZKSR7HTQGL2WLGF2AQPJD3FCCSKZNQC
Y66ZAXN24E3HLIBOSW4OXUTQ4X4PRGNJII4KVDQH4GQJVA6GO3NAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
2PAHDAPDO6PN4FNGB5N7CQNEGHSE3NOGPXYZMIAOJC4VW34FRVOAC
void display_search_results(std::vector<stash_search_result> &results);
void show_stash_search_prompt();
bool display_search_results(std::vector<stash_search_result> &results,
const char* sort_style);
void show_stash_search_prompt();
// helper for search_stashes
struct compare_by_distance
{
bool operator()(const stash_search_result& lhs,
const stash_search_result& rhs)
{
if (lhs.player_distance != rhs.player_distance) {
// Sort by increasing distance
return (lhs.player_distance < rhs.player_distance);
} else if (lhs.matches != rhs.matches) {
// Then by decreasing number of matches
return (lhs.matches > rhs.matches);
} else {
return false;
}
}
};
// helper for search_stashes
struct compare_by_name
{
bool operator()(const stash_search_result& lhs,
const stash_search_result& rhs)
{
if (lhs.match != rhs.match) {
// Sort by name
return (lhs.match < rhs.match);
} else if (lhs.player_distance != rhs.player_distance) {
// Then sort by increasing distance
return (lhs.player_distance < rhs.player_distance);
} else if (lhs.matches != rhs.matches) {
// Then by decreasing number of matches
return (lhs.matches > rhs.matches);
} else {
return false;
}
}
};
display_search_results(results);
bool sort_by_dist = true;
while (true)
{
const char* sort_style;
if (sort_by_dist) {
std::sort(results.begin(), results.end(), compare_by_distance());
sort_style = "by dist";
} else {
std::sort(results.begin(), results.end(), compare_by_name());
sort_style = "by name";
}
const bool again = display_search_results(results, sort_style);
if (!again) break;
sort_by_dist = !sort_by_dist;
}
cprintf("%d %s%s", title->quantity, title->text.c_str(),
title->quantity > 1? "es" : "");
cprintf("%d %s%s, sorted %s",
title->quantity, title->text.c_str(),
title->quantity > 1? "es" : "",
sort_style);
char buf[200];
snprintf(buf, 200,
" [a-z: %s ?: change action /: change sort]",
menu_action == ACT_TRAVEL ? "travel" : "examine");
if (meta_key)
draw_title_suffix(" (x - examine)", false);
else
draw_title_suffix(" (x - travel; ? - examine)", false);
draw_title_suffix(buf, false);
void StashTracker::display_search_results(
std::vector<stash_search_result> &results)
// Returns true to request redisplay with a different sort method
bool StashTracker::display_search_results(
std::vector<stash_search_result> &results,
const char* sort_style)