(svn r17790) -Feature: translatable base sound/graphics set descriptions
This commit is contained in:
@@ -13,6 +13,7 @@
|
||||
#define BASE_MEDIA_BASE_H
|
||||
|
||||
#include "fileio_func.h"
|
||||
#include "core/smallmap_type.hpp"
|
||||
|
||||
/* Forward declare these; can't do 'struct X' in functions as older GCCs barf on that */
|
||||
struct IniFile;
|
||||
@@ -41,28 +42,35 @@ struct MD5File {
|
||||
*/
|
||||
template <class T, size_t Tnum_files>
|
||||
struct BaseSet {
|
||||
typedef SmallMap<const char *, const char *> TranslatedStrings;
|
||||
|
||||
/** Number of files in this set */
|
||||
static const size_t NUM_FILES = Tnum_files;
|
||||
|
||||
/** Internal names of the files in this set. */
|
||||
static const char * const *file_names;
|
||||
|
||||
const char *name; ///< The name of the base set
|
||||
const char *description; ///< Description of the base set
|
||||
uint32 shortname; ///< Four letter short variant of the name
|
||||
uint32 version; ///< The version of this base set
|
||||
const char *name; ///< The name of the base set
|
||||
TranslatedStrings description; ///< Description of the base set
|
||||
uint32 shortname; ///< Four letter short variant of the name
|
||||
uint32 version; ///< The version of this base set
|
||||
|
||||
MD5File files[NUM_FILES]; ///< All files part of this set
|
||||
uint found_files; ///< Number of the files that could be found
|
||||
uint valid_files; ///< Number of the files that could be found and are valid
|
||||
MD5File files[NUM_FILES]; ///< All files part of this set
|
||||
uint found_files; ///< Number of the files that could be found
|
||||
uint valid_files; ///< Number of the files that could be found and are valid
|
||||
|
||||
T *next; ///< The next base set in this list
|
||||
T *next; ///< The next base set in this list
|
||||
|
||||
/** Free everything we allocated */
|
||||
~BaseSet()
|
||||
{
|
||||
free((void*)this->name);
|
||||
free((void*)this->description);
|
||||
|
||||
for (TranslatedStrings::iterator iter = this->description.Begin(); iter != this->description.End(); iter++) {
|
||||
free((void*)iter->first);
|
||||
free((void*)iter->second);
|
||||
}
|
||||
|
||||
for (uint i = 0; i < NUM_FILES; i++) {
|
||||
free((void*)this->files[i].filename);
|
||||
free((void*)this->files[i].missing_warning);
|
||||
@@ -97,6 +105,30 @@ struct BaseSet {
|
||||
* @return true if loading was successful.
|
||||
*/
|
||||
bool FillSetDetails(IniFile *ini, const char *path);
|
||||
|
||||
/**
|
||||
* Get the description for the given ISO code.
|
||||
* It falls back to the first two characters of the ISO code in case
|
||||
* no match could be made with the full ISO code. If even then the
|
||||
* matching fails the default is returned.
|
||||
* @param isocode the isocode to search for
|
||||
* @return the description
|
||||
*/
|
||||
const char *GetDescription(const char *isocode = NULL) const
|
||||
{
|
||||
if (isocode != NULL) {
|
||||
/* First the full ISO code */
|
||||
for (TranslatedStrings::const_iterator iter = this->description.Begin(); iter != this->description.End(); iter++) {
|
||||
if (strcmp(iter->first, isocode) == 0) return iter->second;
|
||||
}
|
||||
/* Then the first two characters */
|
||||
for (TranslatedStrings::const_iterator iter = this->description.Begin(); iter != this->description.End(); iter++) {
|
||||
if (strncmp(iter->first, isocode, 2) == 0) return iter->second;
|
||||
}
|
||||
}
|
||||
/* Then fall back */
|
||||
return this->description.Begin()->second;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user