Tiberian Technologies Scripts Reference Revision: 9000
Loading...
Searching...
No Matches
TranslateDBClass.h
1/* Renegade Scripts.dll
2 Copyright 2013 Tiberian Technologies
3
4 This file is part of the Renegade scripts.dll
5 The Renegade scripts.dll is free software; you can redistribute it and/or modify it under
6 the terms of the GNU General Public License as published by the Free
7 Software Foundation; either version 2, or (at your option) any later
8 version. See the file COPYING for more details.
9 In addition, an exemption is given to allow Run Time Dynamic Linking of this code with any closed source module that does not contain code covered by this licence.
10 Only the source code to the module(s) containing the licenced code has to be released.
11*/
12#ifndef TT_INCLUDE__TRANSLATEDBCLASS_H
13#define TT_INCLUDE__TRANSLATEDBCLASS_H
14
15
16
17#include "SaveLoadSubSystemClass.h"
18#include "TDBObjClass.h"
19#include "TDBCategoryClass.h"
20#include "HashTemplateClass.h"
21
22
23
24class TDBCategoryClass;
25
26
27
28typedef DynamicVectorClass<TDBObjClass*> TDB_OBJ_LIST;
29typedef DynamicVectorClass<TDBCategoryClass*> TDB_CATEGORY_LIST;
30
31
32
33extern SHARED_API const wchar_t* STRING_NOT_FOUND;
34extern SHARED_API const char* ENGLISH_STRING_NOT_FOUND;
35
36
37
38#define TRANSLATE TranslateDBClass::Get_String
39
40
41
42class TranslateDBClass :
43 public SaveLoadSubSystemClass
44{
45
46public:
47
48 enum
49 {
50 LANGID_ENGLISH = 0,
51 LANGID_FRENCH,
52 LANGID_GERMAN,
53 LANGID_SPANISH,
54 LANGID_CHINESE,
55 LANGID_JAPANESE,
56 LANGID_KOREAN
57 };
58
59 enum FILTER_OPT
60 {
61 FILTER_DISABLED = 0,
62 FILTER_IF_EQUAL,
63 FILTER_IF_NOT_EQUAL,
64 };
65
66private:
67
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;
78#else
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);
88#endif
89
90protected:
91
92 enum
93 {
94 ID_MIN = 1000,
95 ID_MAX = 999999
96 };
97
98 virtual bool Contains_Data() const;
99 virtual bool Save(ChunkSaveClass& csave);
100 virtual bool Load(ChunkLoadClass& cload);
101
102 bool Load_Variables(ChunkLoadClass& cload);
103 bool Load_Objects(ChunkLoadClass& cload);
104 bool Load_Categories(ChunkLoadClass& cload);
105
106 static void Validate_Data();
107 static void Free_Objects();
108 static void Free_Categories();
109
110 static uint32 Find_Unique_ID();
111
112public:
113
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); }
119
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);
124
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);
130
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();
135
136 static int Get_Object_Count()
137 {
138 return m_ObjectList.Count();
139 }
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);
143
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);
151
152 static void Set_Current_Language(int languageId) { m_LanguageID = languageId; }
153 static uint32 Get_Current_Language() { return m_LanguageID; }
154
155 static bool Is_Single_Language_Export_Enabled() { return IsSingleLanguageExport; }
156 static void Enable_Single_Language_Export(bool value) { IsSingleLanguageExport = value; }
157
158 static void Set_Export_Filter(FILTER_OPT filter, uint32 categoryId);
159
160
161 TranslateDBClass() {}
162 virtual ~TranslateDBClass() {}
163
164 virtual uint32 Chunk_ID() const;
165 virtual const char* Name() const { return "TranslateDBClass"; }
166
167};
168
169
170
171TT_INLINE const wchar_t* TranslateDBClass::Get_String(uint32 id)
172{
173 if (!id)
174 return NULL;
175
176 TDBObjClass* translation = Find_Object(id);
177 if (translation)
178 return translation->Get_String();
179
180 return STRING_NOT_FOUND;
181}
182
183
184TT_INLINE const wchar_t* TranslateDBClass::Get_String(const char* id)
185{
186 if (!id)
187 return NULL;
188
189 TDBObjClass* translation = Find_Object(id);
190 if (translation)
191 return translation->Get_String();
192
193 return STRING_NOT_FOUND;
194}
195
196
197
198inline const char* TranslateDBClass::Get_English_String (uint32 id)
199{
200 if (id == 0)
201 return NULL;
202
203 TDBObjClass* translation = Find_Object(id);
204 if (translation)
205 return translation->Get_English_String();
206
207 return ENGLISH_STRING_NOT_FOUND;
208}
209
210
211
212TT_INLINE TDBObjClass* TranslateDBClass::Find_Object(const char* id)
213{
214 TT_ASSERT(Is_Loaded());
215
216 StringClass lowercaseId(id, true);
217 _strlwr(lowercaseId.Peek_Buffer());
218 return m_ObjectHash.Get(lowercaseId, NULL);
219}
220
221
222
223TT_INLINE TDBObjClass* TranslateDBClass::Find_Object(uint32 id)
224{
225 TT_ASSERT(Is_Loaded());
226
227 int index = id - ID_MIN;
228 if (index >= 0 && index < m_ObjectList.Count())
229 {
230 TDBObjClass* object = m_ObjectList[index];
231 //TT_ASSERT(object && object->Get_ID() == id);
232
233 return object;
234 }
235
236 TT_ASSERT(index >= 0 && index < m_ObjectList.Count());
237 return NULL;
238}
239
240extern TranslateDBClass _TheTranslateDB;
241
242#endif