1*f6dc9357SAndroid Build Coastguard Worker // LangPage.cpp
2*f6dc9357SAndroid Build Coastguard Worker
3*f6dc9357SAndroid Build Coastguard Worker #include "StdAfx.h"
4*f6dc9357SAndroid Build Coastguard Worker
5*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/Lang.h"
6*f6dc9357SAndroid Build Coastguard Worker
7*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/FileFind.h"
8*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/ResourceString.h"
9*f6dc9357SAndroid Build Coastguard Worker
10*f6dc9357SAndroid Build Coastguard Worker #include "HelpUtils.h"
11*f6dc9357SAndroid Build Coastguard Worker #include "LangPage.h"
12*f6dc9357SAndroid Build Coastguard Worker #include "LangPageRes.h"
13*f6dc9357SAndroid Build Coastguard Worker #include "LangUtils.h"
14*f6dc9357SAndroid Build Coastguard Worker #include "RegistryUtils.h"
15*f6dc9357SAndroid Build Coastguard Worker
16*f6dc9357SAndroid Build Coastguard Worker using namespace NWindows;
17*f6dc9357SAndroid Build Coastguard Worker
18*f6dc9357SAndroid Build Coastguard Worker
19*f6dc9357SAndroid Build Coastguard Worker static const unsigned k_NumLangLines_EN = 443;
20*f6dc9357SAndroid Build Coastguard Worker
21*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_LANG
22*f6dc9357SAndroid Build Coastguard Worker static const UInt32 kLangIDs[] =
23*f6dc9357SAndroid Build Coastguard Worker {
24*f6dc9357SAndroid Build Coastguard Worker IDT_LANG_LANG
25*f6dc9357SAndroid Build Coastguard Worker };
26*f6dc9357SAndroid Build Coastguard Worker #endif
27*f6dc9357SAndroid Build Coastguard Worker
28*f6dc9357SAndroid Build Coastguard Worker #define kLangTopic "fm/options.htm#language"
29*f6dc9357SAndroid Build Coastguard Worker
30*f6dc9357SAndroid Build Coastguard Worker
31*f6dc9357SAndroid Build Coastguard Worker struct CLangListRecord
32*f6dc9357SAndroid Build Coastguard Worker {
33*f6dc9357SAndroid Build Coastguard Worker int Order;
34*f6dc9357SAndroid Build Coastguard Worker unsigned LangInfoIndex;
35*f6dc9357SAndroid Build Coastguard Worker bool IsSelected;
36*f6dc9357SAndroid Build Coastguard Worker UString Mark;
37*f6dc9357SAndroid Build Coastguard Worker UString Name;
38*f6dc9357SAndroid Build Coastguard Worker
CLangListRecordCLangListRecord39*f6dc9357SAndroid Build Coastguard Worker CLangListRecord(): Order (10), IsSelected(false) {}
CompareCLangListRecord40*f6dc9357SAndroid Build Coastguard Worker int Compare(const CLangListRecord &a) const
41*f6dc9357SAndroid Build Coastguard Worker {
42*f6dc9357SAndroid Build Coastguard Worker if (Order < a.Order) return -1;
43*f6dc9357SAndroid Build Coastguard Worker if (Order > a.Order) return 1;
44*f6dc9357SAndroid Build Coastguard Worker return MyStringCompareNoCase(Name, a.Name);
45*f6dc9357SAndroid Build Coastguard Worker }
46*f6dc9357SAndroid Build Coastguard Worker };
47*f6dc9357SAndroid Build Coastguard Worker
48*f6dc9357SAndroid Build Coastguard Worker
NativeLangString(UString & dest,const wchar_t * s)49*f6dc9357SAndroid Build Coastguard Worker static void NativeLangString(UString &dest, const wchar_t *s)
50*f6dc9357SAndroid Build Coastguard Worker {
51*f6dc9357SAndroid Build Coastguard Worker dest += " (";
52*f6dc9357SAndroid Build Coastguard Worker dest += s;
53*f6dc9357SAndroid Build Coastguard Worker dest.Add_Char(')');
54*f6dc9357SAndroid Build Coastguard Worker }
55*f6dc9357SAndroid Build Coastguard Worker
56*f6dc9357SAndroid Build Coastguard Worker bool LangOpen(CLang &lang, CFSTR fileName);
57*f6dc9357SAndroid Build Coastguard Worker
OnInit()58*f6dc9357SAndroid Build Coastguard Worker bool CLangPage::OnInit()
59*f6dc9357SAndroid Build Coastguard Worker {
60*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_LANG
61*f6dc9357SAndroid Build Coastguard Worker LangSetDlgItems(*this, kLangIDs, Z7_ARRAY_SIZE(kLangIDs));
62*f6dc9357SAndroid Build Coastguard Worker #endif
63*f6dc9357SAndroid Build Coastguard Worker _langCombo.Attach(GetItem(IDC_LANG_LANG));
64*f6dc9357SAndroid Build Coastguard Worker
65*f6dc9357SAndroid Build Coastguard Worker
66*f6dc9357SAndroid Build Coastguard Worker unsigned listRecords_SelectedIndex = 0;
67*f6dc9357SAndroid Build Coastguard Worker
68*f6dc9357SAndroid Build Coastguard Worker CObjectVector<CLangListRecord> listRecords;
69*f6dc9357SAndroid Build Coastguard Worker {
70*f6dc9357SAndroid Build Coastguard Worker CLangListRecord listRecord;
71*f6dc9357SAndroid Build Coastguard Worker listRecord.Order = 0;
72*f6dc9357SAndroid Build Coastguard Worker listRecord.Mark = "---";
73*f6dc9357SAndroid Build Coastguard Worker listRecord.Name = MyLoadString(IDS_LANG_ENGLISH);
74*f6dc9357SAndroid Build Coastguard Worker NativeLangString(listRecord.Name, MyLoadString(IDS_LANG_NATIVE));
75*f6dc9357SAndroid Build Coastguard Worker listRecord.LangInfoIndex = _langs.Size();
76*f6dc9357SAndroid Build Coastguard Worker listRecords.Add(listRecord);
77*f6dc9357SAndroid Build Coastguard Worker }
78*f6dc9357SAndroid Build Coastguard Worker
79*f6dc9357SAndroid Build Coastguard Worker AStringVector names;
80*f6dc9357SAndroid Build Coastguard Worker unsigned subLangIndex = 0;
81*f6dc9357SAndroid Build Coastguard Worker Lang_GetShortNames_for_DefaultLang(names, subLangIndex);
82*f6dc9357SAndroid Build Coastguard Worker
83*f6dc9357SAndroid Build Coastguard Worker const FString dirPrefix = GetLangDirPrefix();
84*f6dc9357SAndroid Build Coastguard Worker NFile::NFind::CEnumerator enumerator;
85*f6dc9357SAndroid Build Coastguard Worker enumerator.SetDirPrefix(dirPrefix);
86*f6dc9357SAndroid Build Coastguard Worker NFile::NFind::CFileInfo fi;
87*f6dc9357SAndroid Build Coastguard Worker
88*f6dc9357SAndroid Build Coastguard Worker CLang lang_en;
89*f6dc9357SAndroid Build Coastguard Worker {
90*f6dc9357SAndroid Build Coastguard Worker CLangInfo &langInfo = _langs.AddNew();
91*f6dc9357SAndroid Build Coastguard Worker langInfo.Name = "-";
92*f6dc9357SAndroid Build Coastguard Worker if (LangOpen(lang_en, dirPrefix + FTEXT("en.ttt")))
93*f6dc9357SAndroid Build Coastguard Worker {
94*f6dc9357SAndroid Build Coastguard Worker langInfo.NumLines = lang_en._ids.Size();
95*f6dc9357SAndroid Build Coastguard Worker // langInfo.Comments = lang_en.Comments;
96*f6dc9357SAndroid Build Coastguard Worker }
97*f6dc9357SAndroid Build Coastguard Worker else
98*f6dc9357SAndroid Build Coastguard Worker langInfo.NumLines = k_NumLangLines_EN;
99*f6dc9357SAndroid Build Coastguard Worker NumLangLines_EN = langInfo.NumLines;
100*f6dc9357SAndroid Build Coastguard Worker }
101*f6dc9357SAndroid Build Coastguard Worker
102*f6dc9357SAndroid Build Coastguard Worker CLang lang;
103*f6dc9357SAndroid Build Coastguard Worker UString error;
104*f6dc9357SAndroid Build Coastguard Worker UString n;
105*f6dc9357SAndroid Build Coastguard Worker
106*f6dc9357SAndroid Build Coastguard Worker while (enumerator.Next(fi))
107*f6dc9357SAndroid Build Coastguard Worker {
108*f6dc9357SAndroid Build Coastguard Worker if (fi.IsDir())
109*f6dc9357SAndroid Build Coastguard Worker continue;
110*f6dc9357SAndroid Build Coastguard Worker const unsigned kExtSize = 4;
111*f6dc9357SAndroid Build Coastguard Worker if (fi.Name.Len() < kExtSize)
112*f6dc9357SAndroid Build Coastguard Worker continue;
113*f6dc9357SAndroid Build Coastguard Worker const unsigned pos = fi.Name.Len() - kExtSize;
114*f6dc9357SAndroid Build Coastguard Worker if (!StringsAreEqualNoCase_Ascii(fi.Name.Ptr(pos), ".txt"))
115*f6dc9357SAndroid Build Coastguard Worker {
116*f6dc9357SAndroid Build Coastguard Worker // if (!StringsAreEqualNoCase_Ascii(fi.Name.Ptr(pos), ".ttt"))
117*f6dc9357SAndroid Build Coastguard Worker continue;
118*f6dc9357SAndroid Build Coastguard Worker }
119*f6dc9357SAndroid Build Coastguard Worker
120*f6dc9357SAndroid Build Coastguard Worker if (!LangOpen(lang, dirPrefix + fi.Name))
121*f6dc9357SAndroid Build Coastguard Worker {
122*f6dc9357SAndroid Build Coastguard Worker error.Add_Space_if_NotEmpty();
123*f6dc9357SAndroid Build Coastguard Worker error += fs2us(fi.Name);
124*f6dc9357SAndroid Build Coastguard Worker continue;
125*f6dc9357SAndroid Build Coastguard Worker }
126*f6dc9357SAndroid Build Coastguard Worker
127*f6dc9357SAndroid Build Coastguard Worker const UString shortName = fs2us(fi.Name.Left(pos));
128*f6dc9357SAndroid Build Coastguard Worker
129*f6dc9357SAndroid Build Coastguard Worker CLangListRecord listRecord;
130*f6dc9357SAndroid Build Coastguard Worker if (!names.IsEmpty())
131*f6dc9357SAndroid Build Coastguard Worker {
132*f6dc9357SAndroid Build Coastguard Worker for (unsigned i = 0; i < names.Size(); i++)
133*f6dc9357SAndroid Build Coastguard Worker if (shortName.IsEqualTo_Ascii_NoCase(names[i]))
134*f6dc9357SAndroid Build Coastguard Worker {
135*f6dc9357SAndroid Build Coastguard Worker if (subLangIndex == i || names.Size() == 1)
136*f6dc9357SAndroid Build Coastguard Worker {
137*f6dc9357SAndroid Build Coastguard Worker listRecord.Mark = "***";
138*f6dc9357SAndroid Build Coastguard Worker // listRecord.Order = 1;
139*f6dc9357SAndroid Build Coastguard Worker }
140*f6dc9357SAndroid Build Coastguard Worker else
141*f6dc9357SAndroid Build Coastguard Worker {
142*f6dc9357SAndroid Build Coastguard Worker listRecord.Mark = "+++";
143*f6dc9357SAndroid Build Coastguard Worker // listRecord.Order = 2;
144*f6dc9357SAndroid Build Coastguard Worker }
145*f6dc9357SAndroid Build Coastguard Worker break;
146*f6dc9357SAndroid Build Coastguard Worker }
147*f6dc9357SAndroid Build Coastguard Worker if (listRecord.Mark.IsEmpty())
148*f6dc9357SAndroid Build Coastguard Worker {
149*f6dc9357SAndroid Build Coastguard Worker const int minusPos = shortName.Find(L'-');
150*f6dc9357SAndroid Build Coastguard Worker if (minusPos >= 0)
151*f6dc9357SAndroid Build Coastguard Worker {
152*f6dc9357SAndroid Build Coastguard Worker const UString shortName2 = shortName.Left(minusPos);
153*f6dc9357SAndroid Build Coastguard Worker if (shortName2.IsEqualTo_Ascii_NoCase(names[0]))
154*f6dc9357SAndroid Build Coastguard Worker {
155*f6dc9357SAndroid Build Coastguard Worker listRecord.Mark = "+++";
156*f6dc9357SAndroid Build Coastguard Worker // listRecord.Order = 3;
157*f6dc9357SAndroid Build Coastguard Worker }
158*f6dc9357SAndroid Build Coastguard Worker }
159*f6dc9357SAndroid Build Coastguard Worker }
160*f6dc9357SAndroid Build Coastguard Worker }
161*f6dc9357SAndroid Build Coastguard Worker UString s = shortName;
162*f6dc9357SAndroid Build Coastguard Worker const wchar_t *eng = lang.Get(IDS_LANG_ENGLISH);
163*f6dc9357SAndroid Build Coastguard Worker if (eng)
164*f6dc9357SAndroid Build Coastguard Worker s = eng;
165*f6dc9357SAndroid Build Coastguard Worker const wchar_t *native = lang.Get(IDS_LANG_NATIVE);
166*f6dc9357SAndroid Build Coastguard Worker if (native)
167*f6dc9357SAndroid Build Coastguard Worker NativeLangString(s, native);
168*f6dc9357SAndroid Build Coastguard Worker
169*f6dc9357SAndroid Build Coastguard Worker listRecord.Name = s;
170*f6dc9357SAndroid Build Coastguard Worker listRecord.LangInfoIndex = _langs.Size();
171*f6dc9357SAndroid Build Coastguard Worker listRecords.Add(listRecord);
172*f6dc9357SAndroid Build Coastguard Worker if (g_LangID.IsEqualTo_NoCase(shortName))
173*f6dc9357SAndroid Build Coastguard Worker listRecords_SelectedIndex = listRecords.Size() - 1;
174*f6dc9357SAndroid Build Coastguard Worker
175*f6dc9357SAndroid Build Coastguard Worker CLangInfo &langInfo = _langs.AddNew();
176*f6dc9357SAndroid Build Coastguard Worker langInfo.Comments = lang.Comments;
177*f6dc9357SAndroid Build Coastguard Worker langInfo.Name = shortName;
178*f6dc9357SAndroid Build Coastguard Worker unsigned numLines = lang._ids.Size();
179*f6dc9357SAndroid Build Coastguard Worker if (!lang_en.IsEmpty())
180*f6dc9357SAndroid Build Coastguard Worker {
181*f6dc9357SAndroid Build Coastguard Worker numLines = 0;
182*f6dc9357SAndroid Build Coastguard Worker unsigned i1 = 0;
183*f6dc9357SAndroid Build Coastguard Worker unsigned i2 = 0;
184*f6dc9357SAndroid Build Coastguard Worker for (;;)
185*f6dc9357SAndroid Build Coastguard Worker {
186*f6dc9357SAndroid Build Coastguard Worker UInt32 id1 = (UInt32)0 - 1;
187*f6dc9357SAndroid Build Coastguard Worker UInt32 id2 = (UInt32)0 - 1;
188*f6dc9357SAndroid Build Coastguard Worker bool id1_defined = false;
189*f6dc9357SAndroid Build Coastguard Worker bool id2_defined = false;
190*f6dc9357SAndroid Build Coastguard Worker if (i1 < lang_en._ids.Size())
191*f6dc9357SAndroid Build Coastguard Worker {
192*f6dc9357SAndroid Build Coastguard Worker id1 = lang_en._ids[i1];
193*f6dc9357SAndroid Build Coastguard Worker id1_defined = true;
194*f6dc9357SAndroid Build Coastguard Worker }
195*f6dc9357SAndroid Build Coastguard Worker if (i2 < lang._ids.Size())
196*f6dc9357SAndroid Build Coastguard Worker {
197*f6dc9357SAndroid Build Coastguard Worker id2 = lang._ids[i2];
198*f6dc9357SAndroid Build Coastguard Worker id2_defined = true;
199*f6dc9357SAndroid Build Coastguard Worker }
200*f6dc9357SAndroid Build Coastguard Worker
201*f6dc9357SAndroid Build Coastguard Worker bool id1_is_smaller = true;
202*f6dc9357SAndroid Build Coastguard Worker if (id1_defined)
203*f6dc9357SAndroid Build Coastguard Worker {
204*f6dc9357SAndroid Build Coastguard Worker if (id2_defined)
205*f6dc9357SAndroid Build Coastguard Worker {
206*f6dc9357SAndroid Build Coastguard Worker if (id1 == id2)
207*f6dc9357SAndroid Build Coastguard Worker {
208*f6dc9357SAndroid Build Coastguard Worker i1++;
209*f6dc9357SAndroid Build Coastguard Worker i2++;
210*f6dc9357SAndroid Build Coastguard Worker numLines++;
211*f6dc9357SAndroid Build Coastguard Worker continue;
212*f6dc9357SAndroid Build Coastguard Worker }
213*f6dc9357SAndroid Build Coastguard Worker if (id1 > id2)
214*f6dc9357SAndroid Build Coastguard Worker id1_is_smaller = false;
215*f6dc9357SAndroid Build Coastguard Worker }
216*f6dc9357SAndroid Build Coastguard Worker }
217*f6dc9357SAndroid Build Coastguard Worker else if (!id2_defined)
218*f6dc9357SAndroid Build Coastguard Worker break;
219*f6dc9357SAndroid Build Coastguard Worker else
220*f6dc9357SAndroid Build Coastguard Worker id1_is_smaller = false;
221*f6dc9357SAndroid Build Coastguard Worker
222*f6dc9357SAndroid Build Coastguard Worker n.Empty();
223*f6dc9357SAndroid Build Coastguard Worker if (id1_is_smaller)
224*f6dc9357SAndroid Build Coastguard Worker {
225*f6dc9357SAndroid Build Coastguard Worker n.Add_UInt32(id1);
226*f6dc9357SAndroid Build Coastguard Worker n += " : ";
227*f6dc9357SAndroid Build Coastguard Worker n += lang_en.Get_by_index(i1);
228*f6dc9357SAndroid Build Coastguard Worker langInfo.MissingLines.Add(n);
229*f6dc9357SAndroid Build Coastguard Worker i1++;
230*f6dc9357SAndroid Build Coastguard Worker }
231*f6dc9357SAndroid Build Coastguard Worker else
232*f6dc9357SAndroid Build Coastguard Worker {
233*f6dc9357SAndroid Build Coastguard Worker n.Add_UInt32(id2);
234*f6dc9357SAndroid Build Coastguard Worker n += " : ";
235*f6dc9357SAndroid Build Coastguard Worker n += lang.Get_by_index(i2);
236*f6dc9357SAndroid Build Coastguard Worker langInfo.ExtraLines.Add(n);
237*f6dc9357SAndroid Build Coastguard Worker i2++;
238*f6dc9357SAndroid Build Coastguard Worker }
239*f6dc9357SAndroid Build Coastguard Worker }
240*f6dc9357SAndroid Build Coastguard Worker }
241*f6dc9357SAndroid Build Coastguard Worker langInfo.NumLines = numLines + langInfo.ExtraLines.Size();
242*f6dc9357SAndroid Build Coastguard Worker }
243*f6dc9357SAndroid Build Coastguard Worker
244*f6dc9357SAndroid Build Coastguard Worker listRecords[listRecords_SelectedIndex].IsSelected = true;
245*f6dc9357SAndroid Build Coastguard Worker
246*f6dc9357SAndroid Build Coastguard Worker listRecords.Sort();
247*f6dc9357SAndroid Build Coastguard Worker FOR_VECTOR (i, listRecords)
248*f6dc9357SAndroid Build Coastguard Worker {
249*f6dc9357SAndroid Build Coastguard Worker const CLangListRecord &rec= listRecords[i];
250*f6dc9357SAndroid Build Coastguard Worker UString temp = rec.Name;
251*f6dc9357SAndroid Build Coastguard Worker if (!rec.Mark.IsEmpty())
252*f6dc9357SAndroid Build Coastguard Worker {
253*f6dc9357SAndroid Build Coastguard Worker temp += " ";
254*f6dc9357SAndroid Build Coastguard Worker temp += rec.Mark;
255*f6dc9357SAndroid Build Coastguard Worker }
256*f6dc9357SAndroid Build Coastguard Worker const int index = (int)_langCombo.AddString(temp);
257*f6dc9357SAndroid Build Coastguard Worker _langCombo.SetItemData(index, (LPARAM)rec.LangInfoIndex);
258*f6dc9357SAndroid Build Coastguard Worker if (rec.IsSelected)
259*f6dc9357SAndroid Build Coastguard Worker _langCombo.SetCurSel(index);
260*f6dc9357SAndroid Build Coastguard Worker }
261*f6dc9357SAndroid Build Coastguard Worker
262*f6dc9357SAndroid Build Coastguard Worker ShowLangInfo();
263*f6dc9357SAndroid Build Coastguard Worker
264*f6dc9357SAndroid Build Coastguard Worker if (!error.IsEmpty())
265*f6dc9357SAndroid Build Coastguard Worker MessageBoxW(NULL, error, L"Error in Lang file", MB_ICONERROR);
266*f6dc9357SAndroid Build Coastguard Worker return CPropertyPage::OnInit();
267*f6dc9357SAndroid Build Coastguard Worker }
268*f6dc9357SAndroid Build Coastguard Worker
OnApply()269*f6dc9357SAndroid Build Coastguard Worker LONG CLangPage::OnApply()
270*f6dc9357SAndroid Build Coastguard Worker {
271*f6dc9357SAndroid Build Coastguard Worker if (_needSave)
272*f6dc9357SAndroid Build Coastguard Worker {
273*f6dc9357SAndroid Build Coastguard Worker const int pathIndex = (int)_langCombo.GetItemData_of_CurSel();
274*f6dc9357SAndroid Build Coastguard Worker if ((unsigned)pathIndex < _langs.Size())
275*f6dc9357SAndroid Build Coastguard Worker SaveRegLang(_langs[pathIndex].Name);
276*f6dc9357SAndroid Build Coastguard Worker }
277*f6dc9357SAndroid Build Coastguard Worker _needSave = false;
278*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_LANG
279*f6dc9357SAndroid Build Coastguard Worker ReloadLang();
280*f6dc9357SAndroid Build Coastguard Worker #endif
281*f6dc9357SAndroid Build Coastguard Worker LangWasChanged = true;
282*f6dc9357SAndroid Build Coastguard Worker return PSNRET_NOERROR;
283*f6dc9357SAndroid Build Coastguard Worker }
284*f6dc9357SAndroid Build Coastguard Worker
OnNotifyHelp()285*f6dc9357SAndroid Build Coastguard Worker void CLangPage::OnNotifyHelp()
286*f6dc9357SAndroid Build Coastguard Worker {
287*f6dc9357SAndroid Build Coastguard Worker ShowHelpWindow(kLangTopic);
288*f6dc9357SAndroid Build Coastguard Worker }
289*f6dc9357SAndroid Build Coastguard Worker
OnCommand(unsigned code,unsigned itemID,LPARAM param)290*f6dc9357SAndroid Build Coastguard Worker bool CLangPage::OnCommand(unsigned code, unsigned itemID, LPARAM param)
291*f6dc9357SAndroid Build Coastguard Worker {
292*f6dc9357SAndroid Build Coastguard Worker if (code == CBN_SELCHANGE && itemID == IDC_LANG_LANG)
293*f6dc9357SAndroid Build Coastguard Worker {
294*f6dc9357SAndroid Build Coastguard Worker _needSave = true;
295*f6dc9357SAndroid Build Coastguard Worker Changed();
296*f6dc9357SAndroid Build Coastguard Worker ShowLangInfo();
297*f6dc9357SAndroid Build Coastguard Worker return true;
298*f6dc9357SAndroid Build Coastguard Worker }
299*f6dc9357SAndroid Build Coastguard Worker return CPropertyPage::OnCommand(code, itemID, param);
300*f6dc9357SAndroid Build Coastguard Worker }
301*f6dc9357SAndroid Build Coastguard Worker
AddVectorToString(UString & s,const UStringVector & v)302*f6dc9357SAndroid Build Coastguard Worker static void AddVectorToString(UString &s, const UStringVector &v)
303*f6dc9357SAndroid Build Coastguard Worker {
304*f6dc9357SAndroid Build Coastguard Worker UString a;
305*f6dc9357SAndroid Build Coastguard Worker FOR_VECTOR (i, v)
306*f6dc9357SAndroid Build Coastguard Worker {
307*f6dc9357SAndroid Build Coastguard Worker if (i >= 50)
308*f6dc9357SAndroid Build Coastguard Worker break;
309*f6dc9357SAndroid Build Coastguard Worker a = v[i];
310*f6dc9357SAndroid Build Coastguard Worker if (a.Len() > 1500)
311*f6dc9357SAndroid Build Coastguard Worker continue;
312*f6dc9357SAndroid Build Coastguard Worker if (a[0] == ';')
313*f6dc9357SAndroid Build Coastguard Worker {
314*f6dc9357SAndroid Build Coastguard Worker a.DeleteFrontal(1);
315*f6dc9357SAndroid Build Coastguard Worker a.Trim();
316*f6dc9357SAndroid Build Coastguard Worker }
317*f6dc9357SAndroid Build Coastguard Worker s += a;
318*f6dc9357SAndroid Build Coastguard Worker s.Add_LF();
319*f6dc9357SAndroid Build Coastguard Worker }
320*f6dc9357SAndroid Build Coastguard Worker }
321*f6dc9357SAndroid Build Coastguard Worker
AddVectorToString2(UString & s,const char * name,const UStringVector & v)322*f6dc9357SAndroid Build Coastguard Worker static void AddVectorToString2(UString &s, const char *name, const UStringVector &v)
323*f6dc9357SAndroid Build Coastguard Worker {
324*f6dc9357SAndroid Build Coastguard Worker if (v.IsEmpty())
325*f6dc9357SAndroid Build Coastguard Worker return;
326*f6dc9357SAndroid Build Coastguard Worker s.Add_LF();
327*f6dc9357SAndroid Build Coastguard Worker s += "------ ";
328*f6dc9357SAndroid Build Coastguard Worker s += name;
329*f6dc9357SAndroid Build Coastguard Worker s += ": ";
330*f6dc9357SAndroid Build Coastguard Worker s.Add_UInt32(v.Size());
331*f6dc9357SAndroid Build Coastguard Worker s += " :";
332*f6dc9357SAndroid Build Coastguard Worker s.Add_LF();
333*f6dc9357SAndroid Build Coastguard Worker AddVectorToString(s, v);
334*f6dc9357SAndroid Build Coastguard Worker }
335*f6dc9357SAndroid Build Coastguard Worker
ShowLangInfo()336*f6dc9357SAndroid Build Coastguard Worker void CLangPage::ShowLangInfo()
337*f6dc9357SAndroid Build Coastguard Worker {
338*f6dc9357SAndroid Build Coastguard Worker UString s;
339*f6dc9357SAndroid Build Coastguard Worker const int pathIndex = (int)_langCombo.GetItemData_of_CurSel();
340*f6dc9357SAndroid Build Coastguard Worker if ((unsigned)pathIndex < _langs.Size())
341*f6dc9357SAndroid Build Coastguard Worker {
342*f6dc9357SAndroid Build Coastguard Worker const CLangInfo &langInfo = _langs[pathIndex];
343*f6dc9357SAndroid Build Coastguard Worker const unsigned numLines = langInfo.NumLines;
344*f6dc9357SAndroid Build Coastguard Worker s += langInfo.Name;
345*f6dc9357SAndroid Build Coastguard Worker s += " : ";
346*f6dc9357SAndroid Build Coastguard Worker s.Add_UInt32(numLines);
347*f6dc9357SAndroid Build Coastguard Worker if (NumLangLines_EN != 0)
348*f6dc9357SAndroid Build Coastguard Worker {
349*f6dc9357SAndroid Build Coastguard Worker s += " / ";
350*f6dc9357SAndroid Build Coastguard Worker s.Add_UInt32(NumLangLines_EN);
351*f6dc9357SAndroid Build Coastguard Worker s += " = ";
352*f6dc9357SAndroid Build Coastguard Worker s.Add_UInt32(numLines * 100 / NumLangLines_EN);
353*f6dc9357SAndroid Build Coastguard Worker s += "%";
354*f6dc9357SAndroid Build Coastguard Worker }
355*f6dc9357SAndroid Build Coastguard Worker s.Add_LF();
356*f6dc9357SAndroid Build Coastguard Worker AddVectorToString(s, langInfo.Comments);
357*f6dc9357SAndroid Build Coastguard Worker AddVectorToString2(s, "Missing lines", langInfo.MissingLines);
358*f6dc9357SAndroid Build Coastguard Worker AddVectorToString2(s, "Extra lines", langInfo.ExtraLines);
359*f6dc9357SAndroid Build Coastguard Worker }
360*f6dc9357SAndroid Build Coastguard Worker SetItemText(IDT_LANG_INFO, s);
361*f6dc9357SAndroid Build Coastguard Worker }
362