(svn r10036) -Add: sort the strings in town names dropdown
authorglx
Mon, 04 Jun 2007 19:51:31 +0000
changeset 7293 e5b1b6ef83db
parent 7292 d4cf2baf26ae
child 7294 47874c9a52ef
(svn r10036) -Add: sort the strings in town names dropdown
src/settings_gui.cpp
src/strings.cpp
--- a/src/settings_gui.cpp	Mon Jun 04 19:49:00 2007 +0000
+++ b/src/settings_gui.cpp	Mon Jun 04 19:51:31 2007 +0000
@@ -66,6 +66,21 @@
 	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 @@
 			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 @@
 			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;
--- a/src/strings.cpp	Mon Jun 04 19:49:00 2007 +0000
+++ b/src/strings.cpp	Mon Jun 04 19:51:31 2007 +0000
@@ -1102,6 +1102,7 @@
 }
 
 extern void SortNetworkLanguages();
+extern void SortTownGeneratorNames();
 
 bool ReadLanguagePack(int lang_index)
 {
@@ -1159,6 +1160,7 @@
 	_dynlang.curr = lang_index;
 	SetCurrentGrfLangID(_langpack->isocode);
 	SortNetworkLanguages();
+	SortTownGeneratorNames();
 	return true;
 }