1
0
Fork 0

(svn r10032) -Add: sort the strings in server language dropdown

release/0.6
glx 2007-06-04 16:07:22 +00:00
parent f61029d47e
commit cb340626ca
4 changed files with 69 additions and 41 deletions

View File

@ -76,12 +76,38 @@ enum NetworkJoinStatus {
NETWORK_JOIN_STATUS_GETTING_COMPANY_INFO, NETWORK_JOIN_STATUS_GETTING_COMPANY_INFO,
}; };
// language ids for server_lang and client_lang /* Language ids for server_lang and client_lang. Do NOT modify the order. */
enum NetworkLanguage { enum NetworkLanguage {
NETLANG_ANY = 0, NETLANG_ANY = 0,
NETLANG_ENGLISH = 1, NETLANG_ENGLISH,
NETLANG_GERMAN = 2, NETLANG_GERMAN,
NETLANG_FRENCH = 3, NETLANG_FRENCH,
NETLANG_BRAZILIAN,
NETLANG_BULGARIAN,
NETLANG_CHINESE,
NETLANG_CZECH,
NETLANG_DANISH,
NETLANG_DUTCH,
NETLANG_ESPERANTO,
NETLANG_FINNISH,
NETLANG_HUNGARIAN,
NETLANG_ICELANDIC,
NETLANG_ITALIAN,
NETLANG_JAPANESE,
NETLANG_KOREAN,
NETLANG_LITHUANIAN,
NETLANG_NORWEGIAN,
NETLANG_POLISH,
NETLANG_PORTUGUESE,
NETLANG_ROMANIAN,
NETLANG_RUSSIAN,
NETLANG_SLOVAK,
NETLANG_SLOVENIAN,
NETLANG_SPANISH,
NETLANG_SWEDISH,
NETLANG_TURKISH,
NETLANG_UKRAINIAN,
NETLANG_LAST
}; };
VARDEF NetworkGameInfo _network_game_info; VARDEF NetworkGameInfo _network_game_info;

View File

@ -84,20 +84,20 @@ static const StringID _players_dropdown[] = {
STR_NETWORK_10_PLAYERS, STR_NETWORK_10_PLAYERS,
INVALID_STRING_ID INVALID_STRING_ID
}; };
/* The strings are in alphabetical order (in English). */
static const StringID _language_dropdown[] = { static StringID _language_dropdown[] = {
STR_NETWORK_LANG_ANY, STR_NETWORK_LANG_ANY,
STR_NETWORK_LANG_ENGLISH,
STR_NETWORK_LANG_GERMAN,
STR_NETWORK_LANG_FRENCH,
STR_NETWORK_LANG_BRAZILIAN, STR_NETWORK_LANG_BRAZILIAN,
STR_NETWORK_LANG_BULGARIAN, STR_NETWORK_LANG_BULGARIAN,
STR_NETWORK_LANG_CHINESE, STR_NETWORK_LANG_CHINESE,
STR_NETWORK_LANG_CZECH, STR_NETWORK_LANG_CZECH,
STR_NETWORK_LANG_DANISH, STR_NETWORK_LANG_DANISH,
STR_NETWORK_LANG_DUTCH, STR_NETWORK_LANG_DUTCH,
STR_NETWORK_LANG_ENGLISH,
STR_NETWORK_LANG_ESPERANTO, STR_NETWORK_LANG_ESPERANTO,
STR_NETWORK_LANG_FINNISH, STR_NETWORK_LANG_FINNISH,
STR_NETWORK_LANG_FRENCH,
STR_NETWORK_LANG_GERMAN,
STR_NETWORK_LANG_HUNGARIAN, STR_NETWORK_LANG_HUNGARIAN,
STR_NETWORK_LANG_ICELANDIC, STR_NETWORK_LANG_ICELANDIC,
STR_NETWORK_LANG_ITALIAN, STR_NETWORK_LANG_ITALIAN,
@ -119,37 +119,22 @@ static const StringID _language_dropdown[] = {
}; };
/* Used to map the _server_lang value to the sorted string. */ /* Used to map the _server_lang value to the sorted string. */
static const int _server_lang_to_string[] = { static int _server_lang_to_string[NETLANG_LAST] = {0};
0, // Any
7, // English void SortNetworkLanguages() {
11, // German /* Sort the strings (we don't move 'any' and the 'invalid' one) */
10, // French qsort(&_language_dropdown[1], NETLANG_LAST - 1, sizeof(StringID), &StringIDSorter);
1, // Brazilian
2, // Bulgarian /* Update the lookup table */
3, // Chinese for (int i = NETLANG_ANY; i < NETLANG_LAST; i++) {
4, // Czech for (int j = NETLANG_ANY; j < NETLANG_LAST; j++) {
5, // Danish if (_language_dropdown[j] - STR_NETWORK_LANG_ANY == i) {
6, // Dutch _server_lang_to_string[i] = j;
8, // Esperanto break;
9, // Finnish }
12, // Hungarian }
13, // Icelandic }
14, // Italian }
15, // Japanese
16, // Korean
17, // Lithuanian
18, // Norwegian
19, // Polish
20, // Portuguese
21, // Romanian
22, // Russian
23, // Slovak
24, // Slovenian
25, // Spanish
26, // Swedish
27, // Turkish
28, // Ukrainian
};
enum { enum {
NET_PRC__OFFSET_TOP_WIDGET = 54, NET_PRC__OFFSET_TOP_WIDGET = 54,

View File

@ -1101,6 +1101,8 @@ StringID RemapOldStringID(StringID s)
} }
} }
extern void SortNetworkLanguages();
bool ReadLanguagePack(int lang_index) bool ReadLanguagePack(int lang_index)
{ {
int tot_count, i; int tot_count, i;
@ -1156,6 +1158,7 @@ bool ReadLanguagePack(int lang_index)
_dynlang.curr = lang_index; _dynlang.curr = lang_index;
SetCurrentGrfLangID(_langpack->isocode); SetCurrentGrfLangID(_langpack->isocode);
SortNetworkLanguages();
return true; return true;
} }
@ -1191,6 +1194,18 @@ static int CDECL LanguageCompareFunc(const void *a, const void *b)
return strcmp(cmp1->file, cmp2->file); return strcmp(cmp1->file, cmp2->file);
} }
int CDECL StringIDSorter(const void *a, const void *b)
{
const StringID va = *(const StringID*)a;
const StringID vb = *(const StringID*)b;
char stra[512];
char strb[512];
GetString(stra, va, lastof(stra));
GetString(strb, vb, lastof(strb));
return strcmp(stra, strb);
}
/** /**
* Checks whether the given language is already found. * Checks whether the given language is already found.
* @param langs languages we've found so fa * @param langs languages we've found so fa

View File

@ -16,4 +16,6 @@ int32 GetParamInt32();
bool ReadLanguagePack(int index); bool ReadLanguagePack(int index);
void InitializeLanguagePacks(); void InitializeLanguagePacks();
int CDECL StringIDSorter(const void *a, const void *b);
#endif /* STRINGS_H */ #endif /* STRINGS_H */