1 // config_languages_dlg.cpp : implementation file
2 //
3
4 #include "studiox_includes.h"
5 #include "config_languages_dlg.h"
6 #include "afxdialogex.h"
7
8 #ifdef _DEBUG
9 #define new DEBUG_NEW
10 #endif
11
12 // ISO 639-1 three-letter language codes
13 // http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
14 // http://www.loc.gov/standards/iso639-2/php/code_list.php
15
16 typedef struct {
17 char *name;
18 char *symbol;
19 } language_record;
20
21 language_record language_list[] = {
22 {"Abkhaz", "ab"},
23 {"Afar", "aa"},
24 {"Afrikaans", "af"},
25 {"Akan", "ak"},
26 {"Albanian", "sq"},
27 {"Amharic", "am"},
28 {"Arabic", "ar"},
29 {"Aragonese", "an"},
30 {"Armenian", "hy"},
31 {"Assamese", "as"},
32 {"Avaric", "av"},
33 {"Avestan", "ae"},
34 {"Aymara", "ay"},
35 {"Azerbaijani", "az"},
36 {"Bamanankan", "bm"},
37 {"Bangla", "bn"},
38 {"Bashkir", "ba"},
39 {"Basque", "eu"},
40 {"Belarusian", "be"},
41 {"Bihari", "bh"},
42 {"Bislama", "bi"},
43 {"Bosnian", "bs"},
44 {"Breton", "br"},
45 {"Bulgarian", "bg"},
46 {"Burmese", "my"},
47 {"Catalan", "ca"},
48 {"Chamorro", "ch"},
49 {"Chechen", "ce"},
50 {"Chichewa", "ny"},
51 {"Chinese", "zh"},
52 {"Church Slavic", "cu"},
53 {"Chuvash", "cv"},
54 {"Cornish", "kw"},
55 {"Corsican", "co"},
56 {"Cree", "cr"},
57 {"Croatian", "hr"},
58 {"Czech", "cs"},
59 {"Danish", "da"},
60 {"Divehi", "dv"},
61 {"Dutch", "nl"},
62 {"Dzongkha", "dz"},
63 {"English", "en"},
64 {"Esperanto", "eo"},
65 {"Estonian", "et"},
66 {"Ewe", "ee"},
67 {"Faroese", "fo"},
68 {"Fijian", "fj"},
69 {"Finnish", "fi"},
70 {"French", "fr"},
71 {"Frisian", "fy"},
72 {"Fulah", "ff"},
73 {"Galician", "gl"},
74 {"Ganda", "lg"},
75 {"Georgian", "ka"},
76 {"German", "de"},
77 {"Greek", "el"},
78 {"Guarani", "gn"},
79 {"Gujarati", "gu"},
80 {"Haitian", "ht"},
81 {"Hausa", "ha"},
82 {"Hebrew", "he"},
83 {"Herero", "hz"},
84 {"Hindi", "hi"},
85 {"Hiri Motu", "ho"},
86 {"Hungarian", "hu"},
87 {"Icelandic", "is"},
88 {"Ido", "io"},
89 {"Igbo", "ig"},
90 {"Indonesian", "id"},
91 {"Interlingue", "ie"},
92 {"Interlingua", "ia"},
93 {"Inuktitut", "iu"},
94 {"Inupiaq", "ik"},
95 {"Irish", "ga"},
96 {"Italian", "it"},
97 {"Japanese", "ja"},
98 {"Javanese", "jv"},
99 {"Kalaallisut", "kl"},
100 {"Kannada", "kn"},
101 {"Kanuri", "kr"},
102 {"Kashmiri", "ks"},
103 {"Kazakh", "kk"},
104 {"Khmer", "km"},
105 {"Kikuyu", "ki"},
106 {"Kinyarwanda", "rw"},
107 {"Kirghiz", "ky"},
108 {"Komi", "kv"},
109 {"Kongo", "kg"},
110 {"Korean", "ko"},
111 {"Kuanyama", "kj"},
112 {"Kurdish", "ku"},
113 {"Lao", "lo"},
114 {"Latin", "la"},
115 {"Latvian", "lv"},
116 {"Limburgan", "li"},
117 {"Lingala", "ln"},
118 {"Lithuanian", "lt"},
119 {"Luba-Katanga", "lu"},
120 {"Luxembourgish", "lb"},
121 {"Macedonian", "mk"},
122 {"Malagasy", "mg"},
123 {"Malay", "ms"},
124 {"Malayalam", "ml"},
125 {"Maltese", "mt"},
126 {"Manx", "gv"},
127 {"Maori", "mi"},
128 {"Marathi", "mr"},
129 {"Marshallese", "mh"},
130 {"Mongolian", "mn"},
131 {"Nauru", "na"},
132 {"Navajo", "nv"},
133 {"Ndebele", "nd"},
134 {"Ndonga", "ng"},
135 {"Nepali", "ne"},
136 {"Norwegian", "no"},
137 {"Occitan", "oc"},
138 {"Odia", "or"},
139 {"Ojibwa", "oj"},
140 {"Oromo", "om"},
141 {"Ossetian", "os"},
142 {"Pali", "pi"},
143 {"Panjabi", "pa"},
144 {"Persian", "fa"},
145 {"Polish", "pl"},
146 {"Portuguese", "pt"},
147 {"Pushto", "ps"},
148 {"Quechua", "qu"},
149 {"Romanian", "ro"},
150 {"Romansh", "rm"},
151 {"Rundi", "rn"},
152 {"Russian", "ru"},
153 {"Samoan", "sm"},
154 {"Sango", "sg"},
155 {"Sanskrit", "sa"},
156 {"Sardinian", "sc"},
157 {"Scottish Gaelic", "gd"},
158 {"Serbian", "sr"},
159 {"Shona", "sn"},
160 {"Sindhi", "sd"},
161 {"Sinhala", "si"},
162 {"Slovak", "sk"},
163 {"Slovenian", "sl"},
164 {"Somali", "so"},
165 {"Sotho", "st"},
166 {"Spanish", "es"},
167 {"Sundanese", "su"},
168 {"Swahili", "sw"},
169 {"Swati", "ss"},
170 {"Swedish", "sv"},
171 {"Tagalog", "tl"},
172 {"Tahitian", "ty"},
173 {"Tajik", "tg"},
174 {"Tamil", "ta"},
175 {"Tatar", "tt"},
176 {"Telugu", "te"},
177 {"Thai", "th"},
178 {"Tibetan", "bo"},
179 {"Tigrinya", "ti"},
180 {"Tonga", "to"},
181 {"Tswana", "tn"},
182 {"Tsonga", "ts"},
183 {"Turkmen", "tk"},
184 {"Turkish", "tr"},
185 {"Twi", "tw"},
186 {"Uighur", "ug"},
187 {"Ukrainian", "uk"},
188 {"Urdu", "ur"},
189 {"Uzbek", "uz"},
190 {"Venda", "ve"},
191 {"Vietnamese", "vi"},
192 {"Volap?", "vo"},
193 {"Walloon", "wa"},
194 {"Welsh", "cy"},
195 {"Wolof", "wo"},
196 {"Xhosa", "xh"},
197 {"Yi", "ii"},
198 {"Yiddish", "yi"},
199 {"Yoruba", "yo"},
200 {"Zhuang", "za"},
201 {"Zulu", "zu"},
202 {NULL, NULL}
203 };
204
205 typedef struct name_convert_map_struct {
206 char *old_name;
207 char *new_name;
208 }name_convert_map;
209
210 name_convert_map language_name_convert_list[] = {
211 {"Bambara", "Bamanankan"},
212 {"Bengali", "Bangla"},
213 {"Gaelic", "Scottish Gaelic"},
214 {"Oriya", "Odia"},
215 {"Sichuan Yi", "Yi"},
216 {NULL, NULL}
217 };
218
219 enum config_languages_dlg_test_commands{
220 TEST_ADD_LANGUAGE = 1,
221 TEST_DELETE_LANGEUGE,
222 TEST_SELECT_LANGUAGE_INDEX,
223 TEST_SELECT_LANGUAGE_ID,
224 TEST_CHECK_SUPPORT_BIDI_TEXT,
225 TEST_CHECK_REORDER_BIDI_TEXT,
226 TEST_CHECK_SUPPORT_THAI_SHAPING,
227 TEST_CHECK_GEN_ADJUSTED_THAI,
228 TEST_SAVE_LANGUAGE_CONFIGURE,
229 TEST_CANCEL_LANGUAGE_CONFIGURE
230 };
231
232 // config_languages_dlg dialog
233
234 #define LANGUAGE_LIST_SIZE ((sizeof(language_list) / sizeof(language_record)) - 1)
235
IMPLEMENT_DYNAMIC(config_languages_dlg,express_dialog)236 IMPLEMENT_DYNAMIC(config_languages_dlg, express_dialog)
237
238 ///////////////////////////////////////////////////////////////////////////////
239 config_languages_dlg::config_languages_dlg(CWnd* pParent /*=NULL*/)
240 : express_dialog(config_languages_dlg::IDD, pParent)
241 {
242 IconId = IDB_CONFIGURE_LANGUAGES;
243 SetTitleText("Configure Languages");
244 studiox_project *project = GetOpenProject();
245
246 if (project)
247 {
248 mNumLanguages = project->mHeader.num_languages;
249 mStartLanguages = mNumLanguages;
250
251 if (mNumLanguages <= 0)
252 {
253 mNumLanguages = 1;
254 }
255 mLanguages.SetSize(mNumLanguages, 1);
256
257 for (int index = 0; index < mNumLanguages; index++)
258 {
259 mLanguages[index].name = project->mHeader.languages[index].name;
260 mLanguages[index].support_bidi_text = project->mHeader.languages[index].support_bidi_text;
261 mLanguages[index].gen_reordered_bidi_text = project->mHeader.languages[index].gen_reordered_bidi_text;
262
263 mLanguages[index].support_thai_glyph_shaping = project->mHeader.languages[index].support_thai_glyph_shaping;
264 mLanguages[index].gen_adjusted_thai_string = project->mHeader.languages[index].gen_adjusted_thai_string;
265
266 mLanguages[index].statically_defined = project->mHeader.languages[index].statically_defined;
267 }
268 }
269 }
270
271 ///////////////////////////////////////////////////////////////////////////////
~config_languages_dlg()272 config_languages_dlg::~config_languages_dlg()
273 {
274 }
275
276 ///////////////////////////////////////////////////////////////////////////////
BuildCombinedLanguageName(char * name,char * symbol)277 CString config_languages_dlg::BuildCombinedLanguageName(char *name, char *symbol)
278 {
279 CString combined;
280 CString tname = CA2T(name);
281 CString tsymbol = CA2T(symbol);
282
283 combined.Format(_T("%s [%s]"), tname, tsymbol);
284 return combined;
285 }
286
287 ///////////////////////////////////////////////////////////////////////////////
BuildCombinedLanguageName(int index)288 CString config_languages_dlg::BuildCombinedLanguageName(int index)
289 {
290 if (language_list[index].name)
291 {
292 return BuildCombinedLanguageName(language_list[index].name,
293 language_list[index].symbol);
294 }
295 return CString("");
296 }
297
298 ///////////////////////////////////////////////////////////////////////////////
GetLanguageNameIndex(CString & findname)299 int config_languages_dlg::GetLanguageNameIndex(CString &findname)
300 {
301 int index = 0;
302 CString combined;
303
304 while(language_list[index].name)
305 {
306 if (language_list[index].name == findname)
307 {
308 return index;
309 }
310 combined = BuildCombinedLanguageName(language_list[index].name, language_list[index].symbol);
311 if (combined == findname)
312 {
313 return index;
314 }
315 index++;
316 }
317
318 return 0;
319 }
320
321 ///////////////////////////////////////////////////////////////////////////////
GetLanguageIdIndex(CString & findid)322 int config_languages_dlg::GetLanguageIdIndex(CString &findid)
323 {
324 int index = 0;
325 CString combined;
326
327 while(language_list[index].name)
328 {
329 if (language_list[index].symbol == findid)
330 {
331 return index;
332 }
333 index++;
334 }
335 return 0;
336 }
337
338 ///////////////////////////////////////////////////////////////////////////////
GetLanguageId(CString & findname)339 CString config_languages_dlg::GetLanguageId(CString &findname)
340 {
341 int index = 0;
342
343 while(language_list[index].name)
344 {
345 if (language_list[index].name == findname)
346 {
347 return CString(language_list[index].symbol);
348 }
349 index++;
350 }
351 return CString("en");
352 }
353
354 ///////////////////////////////////////////////////////////////////////////////
GetLanguageId(int index)355 CString config_languages_dlg::GetLanguageId(int index)
356 {
357 if (index < LANGUAGE_LIST_SIZE)
358 {
359 return CString(language_list[index].symbol);
360 }
361 return CString("");
362 }
363
364 ///////////////////////////////////////////////////////////////////////////////
GetLanguageName(int index)365 CString config_languages_dlg::GetLanguageName(int index)
366 {
367 if (index < LANGUAGE_LIST_SIZE)
368 {
369 return CString(language_list[index].name);
370 }
371 return CString("");
372 }
373
374 ///////////////////////////////////////////////////////////////////////////////
GetStringTableIndexFromLanguageIndex(studiox_project * project,int seek_language)375 int config_languages_dlg::GetStringTableIndexFromLanguageIndex(studiox_project *project, int seek_language)
376 {
377 int table_index = 0;
378
379 for (table_index = 0; table_index < project->mHeader.num_languages; table_index++)
380 {
381 int language_index = GetLanguageNameIndex(project->mHeader.languages[table_index].name);
382
383 if (language_index == seek_language)
384 {
385 return table_index;
386 }
387 }
388 return -1;
389 }
390
391 ///////////////////////////////////////////////////////////////////////////////
ConvertOldLanguageName(CString & old_language_name)392 CString config_languages_dlg::ConvertOldLanguageName(CString &old_language_name)
393 {
394 name_convert_map *list = language_name_convert_list;
395
396 while (list->old_name)
397 {
398 if (list->old_name == old_language_name)
399 {
400 return CString(list->new_name);
401 }
402 list++;
403 }
404
405 return old_language_name;
406 }
407
408
409 ///////////////////////////////////////////////////////////////////////////////
AnnounceLanguageNumberChange()410 void config_languages_dlg::AnnounceLanguageNumberChange()
411 {
412 GetDlgItem(IDC_NUM_LANGUAGES)->NotifyWinEvent(
413 EVENT_OBJECT_LIVEREGIONCHANGED,
414 OBJID_CLIENT,
415 CHILDID_SELF);
416
417 CMainFrame* pMain = (CMainFrame*)AfxGetApp()->GetMainWnd();
418
419 if (pMain && (!mSavedMsg.IsEmpty()))
420 {
421 CString msg;
422 msg.Format(L"Number of Languages %d", mNumLanguages);
423 pMain->GetStatusMsgControl()->SetWindowText(msg);
424 pMain->GetStatusMsgControl()->NotifyWinEvent(
425 EVENT_OBJECT_LIVEREGIONCHANGED,
426 OBJID_CLIENT,
427 CHILDID_SELF);
428 }
429 }
430
431 ///////////////////////////////////////////////////////////////////////////////
OnInitDialog()432 BOOL config_languages_dlg::OnInitDialog()
433 {
434 express_dialog::OnInitDialog();
435 CSpinButtonCtrl * pb = (CSpinButtonCtrl *) GetDlgItem(IDC_SPIN_LANGUAGE_INDEX);
436 CEdit *ps = (CEdit *) GetDlgItem(IDC_LANGUAGE_INDEX);
437 pb->SetBuddy(ps);
438 pb->SetRange(1, mNumLanguages);
439 ps->SetWindowText(_T("1"));
440
441 int index = 0;
442
443 while(language_list[index].name)
444 {
445 CString lang_name;
446 lang_name = BuildCombinedLanguageName(language_list[index].name, language_list[index].symbol);
447 mLanguageNameCombo.AddString(lang_name);
448 index++;
449 }
450 mLanguageNameCombo.SetCurSel(GetLanguageNameIndex(mLanguages[0].name));
451
452 //set bidi text support information
453 mBidiTextSupportBox.SetCheck(mLanguages[0].support_bidi_text);
454 mBidiTextGenerateBox.SetCheck(mLanguages[0].gen_reordered_bidi_text);
455 mStaticallyDefined.SetCheck(mLanguages[0].statically_defined);
456 OnClickSupportBidiTextBox();
457
458 mThaiGlyphShapingSupport.SetCheck(mLanguages[0].support_thai_glyph_shaping);
459 mGenAdjustedThaiString.SetCheck(mLanguages[0].gen_adjusted_thai_string);
460 OnClickedThaiGlyphShapingSupport();
461
462 AddCancelButton();
463 AddSaveButton();
464
465 return TRUE; // return TRUE unless you set the focus to a control
466 }
467
468
469 ///////////////////////////////////////////////////////////////////////////////
DoDataExchange(CDataExchange * pDX)470 void config_languages_dlg::DoDataExchange(CDataExchange* pDX)
471 {
472 express_dialog::DoDataExchange(pDX);
473 DDX_Control(pDX, IDC_LANG_NAME_COMBO, mLanguageNameCombo);
474 DDX_Text(pDX, IDC_NUM_LANGUAGES, mNumLanguages);
475 SetLiveRegion(GetDlgItem(IDC_NUM_LANGUAGES)->GetSafeHwnd());
476
477 CRect size;
478
479 // Set the drop-down list size for each of the combo-boxes.
480 // There doesn't seem to be any way to do it in resource editor.
481 mLanguageNameCombo.GetWindowRect(&size);
482 size.bottom = size.top + 200;
483 ScreenToClient(&size);
484 mLanguageNameCombo.MoveWindow(&size);
485
486 DDX_Control(pDX, IDC_SPIN_LANGUAGE_INDEX, mSpinLanguageIndex);
487
488 DDX_Control(pDX, IDC_CHECK_STATICALLY_DEFINED, mStaticallyDefined);
489 DDX_Control(pDX, IDC_CHECK_SUPPORT_BIDI_TEXT, mBidiTextSupportBox);
490 DDX_Control(pDX, IDC_CHECK_REORDER_BIDI_TEXT, mBidiTextGenerateBox);
491 DDX_Control(pDX, IDC_THAI_GLYPH_SHAPING_SUPPORT, mThaiGlyphShapingSupport);
492 DDX_Control(pDX, IDC_GEN_ADJUSTED_THAI_STRING, mGenAdjustedThaiString);
493 }
494
495 ///////////////////////////////////////////////////////////////////////////////
BEGIN_MESSAGE_MAP(config_languages_dlg,express_dialog)496 BEGIN_MESSAGE_MAP(config_languages_dlg, express_dialog)
497 ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN_LANGUAGE_INDEX, &config_languages_dlg::OnDeltaposSpinLanguageIndex)
498 ON_BN_CLICKED(IDC_ADD_LANGUAGE, &config_languages_dlg::OnBnClickedAddLanguage)
499 ON_BN_CLICKED(IDC_DELETE_LANGUAGE, &config_languages_dlg::OnBnClickedDeleteLanguage)
500 ON_BN_CLICKED(IDCANCEL, &config_languages_dlg::OnBnClickedCancel)
501 ON_BN_CLICKED(IDOK, &config_languages_dlg::OnBnClickedOk)
502 ON_MESSAGE(STUDIO_TEST, OnTestMessage)
503 ON_BN_CLICKED(IDC_CHECK_SUPPORT_BIDI_TEXT, &config_languages_dlg::OnClickSupportBidiTextBox)
504 ON_BN_CLICKED(IDC_THAI_GLYPH_SHAPING_SUPPORT, &config_languages_dlg::OnClickedThaiGlyphShapingSupport)
505 END_MESSAGE_MAP()
506
507
508 ///////////////////////////////////////////////////////////////////////////////
509 // config_languages_dlg message handlers
510
511 void config_languages_dlg::OnDeltaposSpinLanguageIndex(NMHDR *pNMHDR, LRESULT *pResult)
512 {
513 LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
514 // TODO: Add your control notification handler code here
515 int upper;
516 int lower;
517
518 mSpinLanguageIndex.GetRange(lower, upper);
519
520 int oldval = pNMUpDown ->iPos;
521 int newval = oldval + pNMUpDown->iDelta;
522
523 // save the current name, update to new name, if the value is within
524 // limits
525 if (oldval <= upper && oldval >= lower &&
526 newval <= upper && newval >= lower)
527 {
528 mLanguages[oldval - 1].name = language_list[mLanguageNameCombo.GetCurSel()].name;
529
530 //bidi text
531 mLanguages[oldval - 1].support_bidi_text = mBidiTextSupportBox.GetCheck();
532 mLanguages[oldval - 1].gen_reordered_bidi_text = mBidiTextGenerateBox.GetCheck();
533
534 //thai string
535 mLanguages[oldval - 1].support_thai_glyph_shaping = mThaiGlyphShapingSupport.GetCheck();
536 mLanguages[oldval - 1].gen_adjusted_thai_string = mGenAdjustedThaiString.GetCheck();
537
538 mLanguages[oldval - 1].statically_defined = mStaticallyDefined.GetCheck();
539 mLanguageNameCombo.SetCurSel(GetLanguageNameIndex(mLanguages[newval - 1].name));
540
541 mBidiTextSupportBox.SetCheck(mLanguages[newval - 1].support_bidi_text);
542 mBidiTextGenerateBox.SetCheck(mLanguages[newval - 1].gen_reordered_bidi_text);
543 mStaticallyDefined.SetCheck(mLanguages[newval - 1].statically_defined);
544 OnClickSupportBidiTextBox();
545
546 mThaiGlyphShapingSupport.SetCheck(mLanguages[newval - 1].support_thai_glyph_shaping);
547 mGenAdjustedThaiString.SetCheck(mLanguages[newval - 1].gen_adjusted_thai_string);
548 OnClickedThaiGlyphShapingSupport();
549 }
550 *pResult = 0;
551 }
552
553 ///////////////////////////////////////////////////////////////////////////////
OnBnClickedAddLanguage()554 void config_languages_dlg::OnBnClickedAddLanguage()
555 {
556 // TODO: Add your control notification handler code here
557 if (mNumLanguages + 1 > MAX_LANGUAGES)
558 {
559 return;
560 }
561
562 mNumLanguages++;
563
564 mSpinLanguageIndex.SetRange(1, mNumLanguages);
565
566 language_info info;
567 info.name = language_list[0].name;
568 info.statically_defined = TRUE;
569 info.support_bidi_text = FALSE;
570 info.gen_reordered_bidi_text = FALSE;
571 info.support_thai_glyph_shaping = FALSE;
572
573 mLanguages.Add(info);
574
575 SetDlgItemInt(IDC_NUM_LANGUAGES, mNumLanguages);
576
577 AnnounceLanguageNumberChange();
578 }
579
580 ///////////////////////////////////////////////////////////////////////////////
OnBnClickedDeleteLanguage()581 void config_languages_dlg::OnBnClickedDeleteLanguage()
582 {
583 if (mNumLanguages > 1)
584 {
585 int Index = mSpinLanguageIndex.GetPos();
586 mLanguages.RemoveAt(Index - 1);
587 mNumLanguages--;
588 SetDlgItemInt(IDC_NUM_LANGUAGES, mNumLanguages);
589
590 AnnounceLanguageNumberChange();
591
592 mSpinLanguageIndex.SetRange(1, mNumLanguages);
593
594 if (GetDlgItemInt(IDC_LANGUAGE_INDEX) > (UINT) mNumLanguages)
595 {
596 SetDlgItemInt(IDC_LANGUAGE_INDEX, mNumLanguages);
597 }
598
599 Index = GetDlgItemInt(IDC_LANGUAGE_INDEX);
600 mLanguageNameCombo.SetCurSel(GetLanguageNameIndex(mLanguages[Index - 1].name));
601 mBidiTextSupportBox.SetCheck(mLanguages[Index - 1].support_bidi_text);
602 mBidiTextGenerateBox.SetCheck(mLanguages[Index - 1].gen_reordered_bidi_text);
603 mStaticallyDefined.SetCheck(mLanguages[Index - 1].statically_defined);
604 OnClickSupportBidiTextBox();
605
606 mThaiGlyphShapingSupport.SetCheck(mLanguages[Index - 1].support_thai_glyph_shaping);
607 mGenAdjustedThaiString.SetCheck(mLanguages[Index - 1].gen_adjusted_thai_string);
608 OnClickedThaiGlyphShapingSupport();
609 }
610 else
611 {
612 ErrorMsg("Encountered Improper Arguement.", this);
613 }
614 }
615
616 ///////////////////////////////////////////////////////////////////////////////
OnBnClickedCancel()617 void config_languages_dlg::OnBnClickedCancel()
618 {
619 // just return without doing anything
620 express_dialog::OnOK();
621 }
622
623 ///////////////////////////////////////////////////////////////////////////////
OnBnClickedOk()624 void config_languages_dlg::OnBnClickedOk()
625 {
626 int index;
627 int display;
628 int old_language;
629 int new_language;
630 BOOL copy_language;
631 studiox_project *project = GetOpenProject();
632
633 if (!project)
634 {
635 return;
636 }
637
638 // save the last change in case it has not been saved yet
639 index = GetDlgItemInt(IDC_LANGUAGE_INDEX);
640 mLanguages[index - 1].name = language_list[mLanguageNameCombo.GetCurSel()].name;
641 mLanguages[index - 1].support_bidi_text = mBidiTextSupportBox.GetCheck();
642 mLanguages[index - 1].gen_reordered_bidi_text = mBidiTextGenerateBox.GetCheck();
643
644 mLanguages[index - 1].support_thai_glyph_shaping = mThaiGlyphShapingSupport.GetCheck();
645 mLanguages[index - 1].gen_adjusted_thai_string = mGenAdjustedThaiString.GetCheck();
646
647 mLanguages[index - 1].statically_defined = mStaticallyDefined.GetCheck();
648
649 // update the project header to hold our new langauge count and names:
650 int old_num_languages = project->mHeader.num_languages;
651 project->mHeader.num_languages = mNumLanguages;
652
653 for (index = 0; index < mNumLanguages; index++)
654 {
655 project->mHeader.languages[index].name = mLanguages[index].name;
656
657 project->mHeader.languages[index].support_bidi_text = mLanguages[index].support_bidi_text;
658 project->mHeader.languages[index].gen_reordered_bidi_text = mLanguages[index].gen_reordered_bidi_text;
659 project->mHeader.languages[index].support_thai_glyph_shaping = mLanguages[index].support_thai_glyph_shaping;
660 project->mHeader.languages[index].gen_adjusted_thai_string = mLanguages[index].gen_adjusted_thai_string;
661 project->mHeader.languages[index].statically_defined = mLanguages[index].statically_defined;
662 }
663
664 for (index = old_num_languages; index < mNumLanguages; index++)
665 {
666 //for the new added languages, enabled language generation for all displays
667 for (int display = 0; display < project->mHeader.num_displays; display++)
668 {
669 project->mDisplays[display].gen_string_table[index] = TRUE;
670 }
671 }
672
673 // make a new string tables for each display holding the new languages.
674 // Copy what we can from the old tables (matching langauge names)
675
676 int active_display = 0;
677 if (GetProjectView())
678 {
679 active_display = GetProjectView()->GetActiveDisplay();
680 }
681
682 for (display = 0; display < project->mHeader.num_displays; display++)
683 {
684 string_table *pOldTable = project->mDisplays[display].stable;
685 if (!pOldTable)
686 {
687 ErrorMsg("Internal Error: Source string table invalid", this);
688 express_dialog::OnOK();
689 return;
690 }
691 int num_strings = pOldTable->CountStrings();
692
693 string_table *pNewTable = new string_table;
694 pNewTable->Initialize(mNumLanguages, pOldTable->CountStrings());
695
696 CString id_name;
697 for (index = 1; index < num_strings; index++)
698 {
699 id_name = pOldTable->GetResourceIdName(index);
700 pNewTable->AddToDictionary(id_name, index);
701 }
702
703 // copy the string_ids, fonts, and notes:
704 for (index = 0; index < num_strings; index++)
705 {
706 string_table_record record = pOldTable->GetRecord(index);
707 pNewTable->SetDisplayFont(index, record.font_id);
708 pNewTable->SetStringId(index, record.id_name);
709 if (!record.notes.IsEmpty())
710 {
711 pNewTable->SetNotes(index, record.notes);
712 }
713 }
714
715 // for each language in the new table, see if we have that
716 // language in the old table
717 for (new_language = 0; new_language < mNumLanguages; new_language++)
718 {
719 copy_language = FALSE;
720 for (old_language = 0; old_language < mStartLanguages; old_language++)
721 {
722 if (mLanguages[old_language].name == mLanguages[new_language].name)
723 {
724 copy_language = TRUE;
725 break;
726 }
727 }
728
729 if (copy_language)
730 {
731 // we found a match, copy strings from old table to new
732 for (index = 0; index < num_strings; index++)
733 {
734 pNewTable->SetString(index, new_language, pOldTable->GetString(index, old_language));
735 }
736 }
737 }
738
739 if (display == active_display)
740 {
741 int active_language = pOldTable->GetActiveLanguage();
742
743 if (active_language >= mNumLanguages)
744 {
745 active_language = 0;
746 }
747
748 pNewTable->SetActiveLanguage(active_language);
749 }
750
751 // swap out the string tables:
752 project->mDisplays[display].stable = pNewTable;
753 if (pOldTable)
754 {
755 delete pOldTable;
756 }
757
758 pNewTable->UpdateGuixLanguageTable(NULL, FALSE);
759 }
760
761 express_dialog::OnOK();
762 }
763
764 ///////////////////////////////////////////////////////////////////////////////
OnClickSupportBidiTextBox()765 void config_languages_dlg::OnClickSupportBidiTextBox()
766 {
767 BOOL enable = FALSE;
768
769 if (mBidiTextSupportBox.GetCheck())
770 {
771 enable = TRUE;
772 }
773
774 mBidiTextGenerateBox.EnableWindow(enable);
775 }
776
777 ///////////////////////////////////////////////////////////////////////////////
OnClickedThaiGlyphShapingSupport()778 void config_languages_dlg::OnClickedThaiGlyphShapingSupport()
779 {
780 BOOL enabed = FALSE;
781
782 if (mThaiGlyphShapingSupport.GetCheck())
783 {
784 enabed = TRUE;
785 }
786
787 mGenAdjustedThaiString.EnableWindow(enabed);
788 }
789
790 ///////////////////////////////////////////////////////////////////////////////
OnTestMessage(WPARAM wParam,LPARAM lParam)791 afx_msg LRESULT config_languages_dlg::OnTestMessage(WPARAM wParam, LPARAM lParam)
792 {
793 CWnd *pWnd;
794
795 switch (wParam)
796 {
797 case TEST_ADD_LANGUAGE:
798 pWnd = GetDlgItem(IDC_ADD_LANGUAGE);
799 SendMessage(WM_COMMAND, MAKEWPARAM(IDC_ADD_LANGUAGE, BN_CLICKED), (LPARAM)pWnd->GetSafeHwnd());
800 break;
801
802 case TEST_DELETE_LANGEUGE:
803 pWnd = GetDlgItem(IDC_DELETE_LANGUAGE);
804 SendMessage(WM_COMMAND, MAKEWPARAM(IDC_DELETE_LANGUAGE, BN_CLICKED), (LPARAM)pWnd->GetSafeHwnd());
805 break;
806
807 case TEST_SELECT_LANGUAGE_INDEX:
808 {
809 NMUPDOWN NMUpDown;
810 NMHDR hdr;
811
812 hdr.hwndFrom = mSpinLanguageIndex.m_hWnd;
813 hdr.idFrom = IDC_SPIN_LANGUAGE_INDEX;
814 hdr.code = UDN_DELTAPOS;
815
816 NMUpDown.hdr = hdr;
817 NMUpDown.iPos = mSpinLanguageIndex.GetPos();
818 NMUpDown.iDelta = lParam - NMUpDown.iPos;
819
820 mSpinLanguageIndex.SetPos(lParam);
821 SetDlgItemInt(IDC_LANGUAGE_INDEX, lParam);
822
823 SendMessage(WM_NOTIFY, IDC_SPIN_LANGUAGE_INDEX, (LPARAM)&NMUpDown);
824 break;
825 }
826
827 case TEST_SELECT_LANGUAGE_ID:
828 {
829 int language_index = GetLanguageNameIndex(GetTestingParam(0));
830 mLanguageNameCombo.SetCurSel(language_index);
831 SendMessage(WM_COMMAND, MAKEWPARAM(IDC_LANG_NAME_COMBO, CBN_SELCHANGE), (LPARAM)(mLanguageNameCombo.m_hWnd));
832 break;
833 }
834
835 case TEST_CHECK_SUPPORT_BIDI_TEXT:
836 pWnd = (CWnd *)GetDlgItem(IDC_CHECK_SUPPORT_BIDI_TEXT);
837 if (pWnd->IsWindowEnabled())
838 {
839 ((CButton *)pWnd)->SetCheck(lParam);
840 SendMessage(WM_COMMAND, MAKEWPARAM(IDC_CHECK_SUPPORT_BIDI_TEXT, BN_CLICKED), (LPARAM)pWnd->m_hWnd);
841 }
842 break;
843
844 case TEST_CHECK_REORDER_BIDI_TEXT:
845 pWnd = (CWnd *)GetDlgItem(IDC_CHECK_REORDER_BIDI_TEXT);
846 if (pWnd->IsWindowEnabled())
847 {
848 ((CButton *)pWnd)->SetCheck(lParam);
849 SendMessage(WM_COMMAND, MAKEWPARAM(IDC_CHECK_REORDER_BIDI_TEXT, BN_CLICKED), (LPARAM)pWnd->m_hWnd);
850 }
851 break;
852
853 case TEST_CHECK_SUPPORT_THAI_SHAPING:
854 pWnd = (CWnd*)GetDlgItem(IDC_THAI_GLYPH_SHAPING_SUPPORT);
855 if (pWnd->IsWindowEnabled())
856 {
857 ((CButton*)pWnd)->SetCheck(lParam);
858 SendMessage(WM_COMMAND, MAKEWPARAM(IDC_THAI_GLYPH_SHAPING_SUPPORT, BN_CLICKED), (LPARAM)pWnd->m_hWnd);
859 }
860 break;
861
862 case TEST_CHECK_GEN_ADJUSTED_THAI:
863 pWnd = (CWnd*)GetDlgItem(IDC_GEN_ADJUSTED_THAI_STRING);
864 if (pWnd->IsWindowEnabled())
865 {
866 ((CButton*)pWnd)->SetCheck(lParam);
867 SendMessage(WM_COMMAND, MAKEWPARAM(IDC_GEN_ADJUSTED_THAI_STRING, BN_CLICKED), (LPARAM)pWnd->m_hWnd);
868 }
869 break;
870
871 case TEST_SAVE_LANGUAGE_CONFIGURE:
872 OnBnClickedOk();
873 break;
874
875 case TEST_CANCEL_LANGUAGE_CONFIGURE:
876 OnBnClickedCancel();
877 break;
878 }
879
880 return 0;
881 }