summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorglx <glx@openttd.org>2007-06-04 19:51:31 +0000
committerglx <glx@openttd.org>2007-06-04 19:51:31 +0000
commit1a7c7d768f982bff42d0503b7cba30cff6cefd7b (patch)
tree25da8afebc39f54b4f298a78e2f353de86ad8eb0
parenta5e5757656480d00d3633309569dabc44b28fab8 (diff)
downloadopenttd-1a7c7d768f982bff42d0503b7cba30cff6cefd7b.tar.xz
(svn r10036) -Add: sort the strings in town names dropdown
-rw-r--r--src/settings_gui.cpp27
-rw-r--r--src/strings.cpp2
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;
}