diff options
author | glx <glx@openttd.org> | 2007-06-04 19:51:31 +0000 |
---|---|---|
committer | glx <glx@openttd.org> | 2007-06-04 19:51:31 +0000 |
commit | 1a7c7d768f982bff42d0503b7cba30cff6cefd7b (patch) | |
tree | 25da8afebc39f54b4f298a78e2f353de86ad8eb0 | |
parent | a5e5757656480d00d3633309569dabc44b28fab8 (diff) | |
download | openttd-1a7c7d768f982bff42d0503b7cba30cff6cefd7b.tar.xz |
(svn r10036) -Add: sort the strings in town names dropdown
-rw-r--r-- | src/settings_gui.cpp | 27 | ||||
-rw-r--r-- | src/strings.cpp | 2 |
2 files changed, 26 insertions, 3 deletions
diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index ce8679b60..dac55369a 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -66,6 +66,21 @@ static StringID *BuildDynamicDropdown(StringID base, int num) return buf; } +static StringID _town_names[SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 2] = {STR_NULL}; + +void SortTownGeneratorNames() +{ + int nb_town_names = SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 1; + /* Init the strings */ + if (_town_names[0] == STR_NULL) { + for (int i = 0; i < nb_town_names; i++) _town_names[i] = STR_TOWNNAME_ORIGINAL_ENGLISH + i; + _town_names[nb_town_names] = INVALID_STRING_ID; + } + + /* Sort the strings */ + qsort(&_town_names[0], nb_town_names, sizeof(StringID), &StringIDSorter); +} + static int GetCurRes() { int i; @@ -136,8 +151,14 @@ static void GameOptionsWndProc(Window *w, WindowEvent *e) ShowDropDownMenu(w, _driveside_dropdown, _opt_ptr->road_side, 11, i, 0); } return; case 13: case 14: { /* Setup townname dropdown */ - int i = _opt_ptr->town_name; - ShowDropDownMenu(w, BuildDynamicDropdown(STR_TOWNNAME_ORIGINAL_ENGLISH, SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 1), i, 14, (_game_mode == GM_MENU) ? 0 : (-1) ^ (1 << i), 0); + uint sel; + for (uint i = 0; i < lengthof(_town_names) - 1; i++) { + if (_town_names[i] == STR_TOWNNAME_ORIGINAL_ENGLISH + _opt_ptr->town_name) { + sel = i; + break; + } + } + ShowDropDownMenu(w, _town_names, sel, 14, (_game_mode == GM_MENU) ? 0 : (-1) ^ (1 << sel), 0); return; } case 16: case 17: /* Setup autosave dropdown */ @@ -193,7 +214,7 @@ static void GameOptionsWndProc(Window *w, WindowEvent *e) break; case 14: /* Town names */ if (_game_mode == GM_MENU) { - _opt_ptr->town_name = e->we.dropdown.index; + _opt_ptr->town_name = _town_names[e->we.dropdown.index] - STR_TOWNNAME_ORIGINAL_ENGLISH; InvalidateWindow(WC_GAME_OPTIONS, 0); } break; diff --git a/src/strings.cpp b/src/strings.cpp index 57b3111c2..8e0b7942f 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -1102,6 +1102,7 @@ StringID RemapOldStringID(StringID s) } extern void SortNetworkLanguages(); +extern void SortTownGeneratorNames(); bool ReadLanguagePack(int lang_index) { @@ -1159,6 +1160,7 @@ bool ReadLanguagePack(int lang_index) _dynlang.curr = lang_index; SetCurrentGrfLangID(_langpack->isocode); SortNetworkLanguages(); + SortTownGeneratorNames(); return true; } |