display server list with two columns: Name, Address

This commit is contained in:
Patrick Parker 2007-06-03 03:08:44 +00:00
parent 87f5692ea4
commit ab4caa61a6
3 changed files with 21 additions and 1 deletions

View file

@ -104,12 +104,18 @@ protected:
gui::dialog server_dialog(dialog()->get_display(), _("List of Servers"),
_("Choose a known server from the list"), gui::OK_CANCEL);
std::vector<std::string> servers;
std::ostringstream menu_heading;
menu_heading << HEADING_PREFIX << _("Name") << COLUMN_SEPARATOR << _("Address");
servers.push_back(menu_heading.str());
const std::vector<game_config::server_info>& pref_servers = preferences::server_list();
std::vector<game_config::server_info>::const_iterator server;
for(server = pref_servers.begin(); server != pref_servers.end(); ++server) {
servers.push_back(server->address + HELP_STRING_SEPARATOR + server->name);
servers.push_back(server->name + COLUMN_SEPARATOR + server->address);
}
server_dialog.set_menu(servers);
gui::menu::basic_sorter server_sorter;
server_sorter.set_alpha_sort(0).set_id_sort(1);
server_dialog.get_menu().set_sorter(&server_sorter);
if(server_dialog.show() >= 0) {
//now save the result back to the parent dialog
dialog()->get_textbox().set_text(preferences::server_list()[server_dialog.result()].address);

View file

@ -683,6 +683,17 @@ void menu::scroll(unsigned int)
set_dirty();
}
void menu::set_sorter(sorter *s)
{
if(sortby_ >= 0) {
//clear an existing sort
sort_by(-1);
}
sorter_ = s;
sortreversed_ = false;
sortby_ = -1;
}
void menu::sort_by(int column)
{
const bool already_sorted = (column == sortby_);

View file

@ -193,6 +193,9 @@ public:
void scroll(unsigned int pos);
//currently, menus do not manage the memory of their sorter
//this should be changed to a more object-oriented approach
void set_sorter(sorter *s);
void sort_by(int column);
void wrap_words();