12#ifndef TT_INCLUDE__TRANSLATEDBCLASS_H
13#define TT_INCLUDE__TRANSLATEDBCLASS_H
17#include "SaveLoadSubSystemClass.h"
18#include "TDBObjClass.h"
19#include "TDBCategoryClass.h"
20#include "HashTemplateClass.h"
24class TDBCategoryClass;
28typedef DynamicVectorClass<TDBObjClass*> TDB_OBJ_LIST;
29typedef DynamicVectorClass<TDBCategoryClass*> TDB_CATEGORY_LIST;
33extern SHARED_API
const wchar_t* STRING_NOT_FOUND;
34extern SHARED_API
const char* ENGLISH_STRING_NOT_FOUND;
38#define TRANSLATE TranslateDBClass::Get_String
42class TranslateDBClass :
43 public SaveLoadSubSystemClass
68#if (TDBEDIT) || (DDBEDIT) || (W3DVIEWER)
69 static TDB_OBJ_LIST m_ObjectList;
70 static HashTemplateClass<StringClass, TDBObjClass*> m_ObjectHash;
71 static TDB_CATEGORY_LIST m_CategoryList;
72 static uint32 m_VersionNumber;
73 static uint32 m_LanguageID;
74 static bool IsSingleLanguageExport;
75 static uint32 CategoryExportFilter;
76 static FILTER_OPT FilterType;
77 static uint32 FilterCategoryID;
79 SHARED_API
static REF_DECL(TDB_OBJ_LIST, m_ObjectList);
80 SHARED_API
static REF_DECL(TT_NOOP(HashTemplateClass<StringClass, TDBObjClass*>), m_ObjectHash);
81 static REF_DECL(TDB_CATEGORY_LIST, m_CategoryList);
82 static REF_DECL(uint32, m_VersionNumber);
83 SHARED_API
static REF_DECL(uint32, m_LanguageID);
84 static REF_DECL(
bool, IsSingleLanguageExport);
85 static REF_DECL(uint32, CategoryExportFilter);
86 static REF_DECL(FILTER_OPT, FilterType);
87 static REF_DECL(uint32, FilterCategoryID);
98 virtual bool Contains_Data()
const;
99 virtual bool Save(ChunkSaveClass& csave);
100 virtual bool Load(ChunkLoadClass& cload);
102 bool Load_Variables(ChunkLoadClass& cload);
103 bool Load_Objects(ChunkLoadClass& cload);
104 bool Load_Categories(ChunkLoadClass& cload);
106 static void Validate_Data();
107 static void Free_Objects();
108 static void Free_Categories();
110 static uint32 Find_Unique_ID();
114 SHARED_API
static void Initialize();
115 SHARED_API
static void Shutdown();
116 SHARED_API
static uint32 Get_Version_Number();
117 static void Update_Version();
118 static bool Is_Loaded() {
return (m_ObjectList.Count() > 0); }
120 static void Import_Strings(
const char* filename);
121 static void Import_C_Header(
const char* filename);
122 static void Export_C_Header(
const char* filename);
123 static void Export_Table(
const char* filename);
125 static const wchar_t* Get_String(uint32
id);
126 static const wchar_t* Get_String(
const char*
id);
127 static const char* Get_English_String(uint32
id);
128 TT_INLINE
static TDBObjClass* Find_Object(uint32
id);
129 TT_INLINE
static TDBObjClass* Find_Object(
const char*
id);
131 static bool Add_Object(TDBObjClass*
object);
132 static bool Remove_Object(
int index);
133 static bool Clear_Object(
int index);
134 SHARED_API
static void Remove_All();
136 static int Get_Object_Count()
138 return m_ObjectList.Count();
140 static TDBObjClass* Get_Object(
int index);
141 static TDBObjClass* Get_First_Object(uint32 categoryId);
142 static TDBObjClass* Get_Next_Object(uint32 categoryId, TDBObjClass*
object);
144 static int Get_Category_Count();
145 static TDBCategoryClass* Get_Category(
int index);
146 static TDBCategoryClass* Find_Category(uint32
id);
147 static TDBCategoryClass* Find_Category(
const char* name);
148 static TDBCategoryClass* Add_Category(
const char* name);
149 static bool Add_Category(TDBCategoryClass* category,
bool assignId =
true);
150 static bool Remove_Category(
int index);
152 static void Set_Current_Language(
int languageId) { m_LanguageID = languageId; }
153 static uint32 Get_Current_Language() {
return m_LanguageID; }
155 static bool Is_Single_Language_Export_Enabled() {
return IsSingleLanguageExport; }
156 static void Enable_Single_Language_Export(
bool value) { IsSingleLanguageExport = value; }
158 static void Set_Export_Filter(FILTER_OPT filter, uint32 categoryId);
161 TranslateDBClass() {}
162 virtual ~TranslateDBClass() {}
164 virtual uint32 Chunk_ID()
const;
165 virtual const char* Name()
const {
return "TranslateDBClass"; }
171TT_INLINE
const wchar_t* TranslateDBClass::Get_String(uint32
id)
176 TDBObjClass* translation = Find_Object(
id);
178 return translation->Get_String();
180 return STRING_NOT_FOUND;
184TT_INLINE
const wchar_t* TranslateDBClass::Get_String(
const char*
id)
189 TDBObjClass* translation = Find_Object(
id);
191 return translation->Get_String();
193 return STRING_NOT_FOUND;
198inline const char* TranslateDBClass::Get_English_String (uint32
id)
203 TDBObjClass* translation = Find_Object(
id);
205 return translation->Get_English_String();
207 return ENGLISH_STRING_NOT_FOUND;
212TT_INLINE TDBObjClass* TranslateDBClass::Find_Object(
const char*
id)
214 TT_ASSERT(Is_Loaded());
216 StringClass lowercaseId(
id,
true);
217 _strlwr(lowercaseId.Peek_Buffer());
218 return m_ObjectHash.Get(lowercaseId, NULL);
223TT_INLINE TDBObjClass* TranslateDBClass::Find_Object(uint32
id)
225 TT_ASSERT(Is_Loaded());
227 int index =
id - ID_MIN;
228 if (index >= 0 && index < m_ObjectList.Count())
230 TDBObjClass*
object = m_ObjectList[index];
236 TT_ASSERT(index >= 0 && index < m_ObjectList.Count());
240extern TranslateDBClass _TheTranslateDB;