Changeset - r8321:b008a9407302
[Not reviewed]
master
0 4 0
glx - 16 years ago 2008-01-17 00:21:43
glx@openttd.org
(svn r11886) -Add: sort the strings in languages dropdown
4 files changed with 32 insertions and 20 deletions:
0 comments (0 inline, 0 general)
src/settings_gui.cpp
Show inline comments
 
@@ -24,6 +24,7 @@
 
#include "core/alloc_func.hpp"
 
#include "string_func.h"
 
#include "gfx_func.h"
 
#include "widgets/dropdown_type.h"
 
#include "widgets/dropdown_func.h"
 

	
 
#include "table/sprites.h"
 
@@ -157,6 +158,26 @@ enum GameOptionsWidgets {
 
	GAMEOPT_SCREENSHOT_BTN,
 
};
 

	
 
/**
 
 * Update/redraw the languages dropdown
 
 * @param w   the window the dropdown belongs to
 
 */
 
static void ShowLangDropdown(Window *w)
 
{
 
	typedef std::map<StringID, int, StringIDCompare> LangList;
 

	
 
	/* Sort language names */
 
	LangList langs;
 
	for (int i = 0; i < _dynlang.num; i++) langs[SPECSTR_LANGUAGE_START + i] = i;
 

	
 
	DropDownList *list = new DropDownList();
 
	for (LangList::iterator it = langs.begin(); it != langs.end(); it++) {
 
		list->push_back(new DropDownListStringItem((*it).first, (*it).second, false));
 
	}
 

	
 
	ShowDropDownList(w, list, _dynlang.curr, GAMEOPT_LANG_BTN);
 
}
 

	
 
static void ShowCustCurrency();
 

	
 
static void GameOptionsWndProc(Window *w, WindowEvent *e)
 
@@ -228,7 +249,7 @@ static void GameOptionsWndProc(Window *w
 
					break;  // not implemented
 

	
 
				case GAMEOPT_LANG_TXT: case GAMEOPT_LANG_BTN: /* Setup interface language dropdown */
 
					ShowDropDownMenu(w, _dynlang.dropdown, _dynlang.curr, GAMEOPT_LANG_BTN, 0, 0);
 
					ShowLangDropdown(w);
 
					break;
 

	
 
				case GAMEOPT_RESOLUTION_TXT: case GAMEOPT_RESOLUTION_BTN: /* Setup resolution dropdown */
src/strings.cpp
Show inline comments
 
@@ -1318,14 +1318,6 @@ const char *GetCurrentLocale(const char 
 
}
 
#endif /* !(defined(WIN32) || defined(__APPLE__)) */
 

	
 
static int CDECL LanguageCompareFunc(const void *a, const void *b)
 
{
 
	const Language *cmp1 = (const Language*)a;
 
	const Language *cmp2 = (const Language*)b;
 

	
 
	return strcmp(cmp1->file, cmp2->file);
 
}
 

	
 
int CDECL StringIDSorter(const void *a, const void *b)
 
{
 
	const StringID va = *(const StringID*)a;
 
@@ -1432,9 +1424,6 @@ void InitializeLanguagePacks()
 
	}
 
	if (language_count == 0) error("No available language packs (invalid versions?)");
 

	
 
	/* Sort the language names alphabetically */
 
	qsort(files, language_count, sizeof(Language), LanguageCompareFunc);
 

	
 
	/* Acquire the locale of the current system */
 
	const char *lang = GetCurrentLocale("LC_MESSAGES");
 
	if (lang == NULL) lang = "en_GB";
 
@@ -1453,7 +1442,6 @@ void InitializeLanguagePacks()
 

	
 
		dl->ent[dl->num].file = files[i].file;
 
		dl->ent[dl->num].name = strdup(hdr.name);
 
		dl->dropdown[dl->num] = SPECSTR_LANGUAGE_START + dl->num;
 

	
 
		/* We are trying to find a default language. The priority is by
 
		 * configuration file, local environment and last, if nothing found,
 
@@ -1469,8 +1457,6 @@ void InitializeLanguagePacks()
 

	
 
		dl->num++;
 
	}
 
	/* Terminate the dropdown list */
 
	dl->dropdown[dl->num] = INVALID_STRING_ID;
 

	
 
	if (dl->num == 0) error("Invalid version of language packs");
 

	
src/strings_func.h
Show inline comments
 
@@ -69,6 +69,12 @@ void InitializeLanguagePacks();
 

	
 
int CDECL StringIDSorter(const void *a, const void *b);
 

	
 
/** Key comparison function for std::map */
 
struct StringIDCompare
 
{
 
	bool operator()(StringID s1, StringID s2) { return StringIDSorter(&s1, &s2) < 0; }
 
};
 

	
 
void CheckForMissingGlyphsInLoadedLanguagePack();
 

	
 
#endif /* STRINGS_TYPE_H */
src/strings_type.h
Show inline comments
 
@@ -20,11 +20,10 @@ struct Language {
 

	
 
/** Used for dynamic language support */
 
struct DynamicLanguages {
 
	int num;                         ///< Number of languages
 
	int curr;                        ///< Currently selected language index
 
	char curr_file[MAX_PATH];        ///< Currently selected language file name without path (needed for saving the filename of the loaded language).
 
	StringID dropdown[MAX_LANG + 1]; ///< List of languages in the settings gui
 
	Language ent[MAX_LANG];          ///< Information about the languages
 
	int num;                  ///< Number of languages
 
	int curr;                 ///< Currently selected language index
 
	char curr_file[MAX_PATH]; ///< Currently selected language file name without path (needed for saving the filename of the loaded language).
 
	Language ent[MAX_LANG];   ///< Information about the languages
 
};
 

	
 
// special string constants
0 comments (0 inline, 0 general)