diff -r 0b8b245a2391 -r 1ac8aac92385 src/network/network_gui.cpp --- a/src/network/network_gui.cpp Wed Jun 13 11:45:14 2007 +0000 +++ b/src/network/network_gui.cpp Wed Jun 13 12:05:56 2007 +0000 @@ -85,13 +85,18 @@ INVALID_STRING_ID }; -static const StringID _language_dropdown[] = { - STR_NETWORK_LANG_ANY, - STR_NETWORK_LANG_ENGLISH, - STR_NETWORK_LANG_GERMAN, - STR_NETWORK_LANG_FRENCH, - INVALID_STRING_ID -}; +static StringID _language_dropdown[NETLANG_COUNT + 1] = {STR_NULL}; + +void SortNetworkLanguages() { + /* Init the strings */ + if (_language_dropdown[0] == STR_NULL) { + for (int i = 0; i < NETLANG_COUNT; i++) _language_dropdown[i] = STR_NETWORK_LANG_ANY + i; + _language_dropdown[NETLANG_COUNT] = INVALID_STRING_ID; + } + + /* Sort the strings (we don't move 'any' and the 'invalid' one) */ + qsort(&_language_dropdown[1], NETLANG_COUNT - 1, sizeof(StringID), &StringIDSorter); +} enum { NET_PRC__OFFSET_TOP_WIDGET = 54, @@ -342,7 +347,7 @@ DrawString(x, y, STR_NETWORK_CLIENTS, 2); y += 10; - SetDParam(0, _language_dropdown[sel->info.server_lang]); + SetDParam(0, STR_NETWORK_LANG_ANY + sel->info.server_lang); DrawString(x, y, STR_NETWORK_LANGUAGE, 2); // server language y += 10; @@ -609,7 +614,7 @@ SetDParam( 9, _players_dropdown[_network_game_info.clients_max]); SetDParam(11, _players_dropdown[_network_game_info.companies_max]); SetDParam(13, _players_dropdown[_network_game_info.spectators_max]); - SetDParam(15, _language_dropdown[_network_game_info.server_lang]); + SetDParam(15, STR_NETWORK_LANG_ANY + _network_game_info.server_lang); DrawWindowWidgets(w); GfxFillRect(11, 63, 258, 215, 0xD7); @@ -679,9 +684,17 @@ case 13: case 14: /* Number of Spectators */ ShowDropDownMenu(w, _players_dropdown, _network_game_info.spectators_max, 14, 0, 0); break; - case 15: case 16: /* Language */ - ShowDropDownMenu(w, _language_dropdown, _network_game_info.server_lang, 16, 0, 0); + case 15: case 16: { /* Language */ + uint sel = 0; + for (uint i = 0; i < lengthof(_language_dropdown) - 1; i++) { + if (_language_dropdown[i] == STR_NETWORK_LANG_ANY + _network_game_info.server_lang) { + sel = i; + break; + } + } + ShowDropDownMenu(w, _language_dropdown, sel, 16, 0, 0); break; + } case 17: /* Start game */ _is_network_server = true; @@ -715,7 +728,9 @@ case 10: _network_game_info.clients_max = e->we.dropdown.index; break; case 12: _network_game_info.companies_max = e->we.dropdown.index; break; case 14: _network_game_info.spectators_max = e->we.dropdown.index; break; - case 16: _network_game_info.server_lang = e->we.dropdown.index; break; + case 16: + _network_game_info.server_lang = _language_dropdown[e->we.dropdown.index] - STR_NETWORK_LANG_ANY; + break; } SetWindowDirty(w);