1
0
mirror of https://github.com/azure-rtos/guix.git synced 2025-02-04 07:13:17 +08:00
guix/guix_studio/config_languages_dlg.cpp

881 lines
27 KiB
C++

// config_languages_dlg.cpp : implementation file
//
#include "studiox_includes.h"
#include "config_languages_dlg.h"
#include "afxdialogex.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// ISO 639-1 three-letter language codes
// http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
// http://www.loc.gov/standards/iso639-2/php/code_list.php
typedef struct {
char *name;
char *symbol;
} language_record;
language_record language_list[] = {
{"Abkhaz", "ab"},
{"Afar", "aa"},
{"Afrikaans", "af"},
{"Akan", "ak"},
{"Albanian", "sq"},
{"Amharic", "am"},
{"Arabic", "ar"},
{"Aragonese", "an"},
{"Armenian", "hy"},
{"Assamese", "as"},
{"Avaric", "av"},
{"Avestan", "ae"},
{"Aymara", "ay"},
{"Azerbaijani", "az"},
{"Bamanankan", "bm"},
{"Bangla", "bn"},
{"Bashkir", "ba"},
{"Basque", "eu"},
{"Belarusian", "be"},
{"Bihari", "bh"},
{"Bislama", "bi"},
{"Bosnian", "bs"},
{"Breton", "br"},
{"Bulgarian", "bg"},
{"Burmese", "my"},
{"Catalan", "ca"},
{"Chamorro", "ch"},
{"Chechen", "ce"},
{"Chichewa", "ny"},
{"Chinese", "zh"},
{"Church Slavic", "cu"},
{"Chuvash", "cv"},
{"Cornish", "kw"},
{"Corsican", "co"},
{"Cree", "cr"},
{"Croatian", "hr"},
{"Czech", "cs"},
{"Danish", "da"},
{"Divehi", "dv"},
{"Dutch", "nl"},
{"Dzongkha", "dz"},
{"English", "en"},
{"Esperanto", "eo"},
{"Estonian", "et"},
{"Ewe", "ee"},
{"Faroese", "fo"},
{"Fijian", "fj"},
{"Finnish", "fi"},
{"French", "fr"},
{"Frisian", "fy"},
{"Fulah", "ff"},
{"Galician", "gl"},
{"Ganda", "lg"},
{"Georgian", "ka"},
{"German", "de"},
{"Greek", "el"},
{"Guarani", "gn"},
{"Gujarati", "gu"},
{"Haitian", "ht"},
{"Hausa", "ha"},
{"Hebrew", "he"},
{"Herero", "hz"},
{"Hindi", "hi"},
{"Hiri Motu", "ho"},
{"Hungarian", "hu"},
{"Icelandic", "is"},
{"Ido", "io"},
{"Igbo", "ig"},
{"Indonesian", "id"},
{"Interlingue", "ie"},
{"Interlingua", "ia"},
{"Inuktitut", "iu"},
{"Inupiaq", "ik"},
{"Irish", "ga"},
{"Italian", "it"},
{"Japanese", "ja"},
{"Javanese", "jv"},
{"Kalaallisut", "kl"},
{"Kannada", "kn"},
{"Kanuri", "kr"},
{"Kashmiri", "ks"},
{"Kazakh", "kk"},
{"Khmer", "km"},
{"Kikuyu", "ki"},
{"Kinyarwanda", "rw"},
{"Kirghiz", "ky"},
{"Komi", "kv"},
{"Kongo", "kg"},
{"Korean", "ko"},
{"Kuanyama", "kj"},
{"Kurdish", "ku"},
{"Lao", "lo"},
{"Latin", "la"},
{"Latvian", "lv"},
{"Limburgan", "li"},
{"Lingala", "ln"},
{"Lithuanian", "lt"},
{"Luba-Katanga", "lu"},
{"Luxembourgish", "lb"},
{"Macedonian", "mk"},
{"Malagasy", "mg"},
{"Malay", "ms"},
{"Malayalam", "ml"},
{"Maltese", "mt"},
{"Manx", "gv"},
{"Maori", "mi"},
{"Marathi", "mr"},
{"Marshallese", "mh"},
{"Mongolian", "mn"},
{"Nauru", "na"},
{"Navajo", "nv"},
{"Ndebele", "nd"},
{"Ndonga", "ng"},
{"Nepali", "ne"},
{"Norwegian", "no"},
{"Occitan", "oc"},
{"Odia", "or"},
{"Ojibwa", "oj"},
{"Oromo", "om"},
{"Ossetian", "os"},
{"Pali", "pi"},
{"Panjabi", "pa"},
{"Persian", "fa"},
{"Polish", "pl"},
{"Portuguese", "pt"},
{"Pushto", "ps"},
{"Quechua", "qu"},
{"Romanian", "ro"},
{"Romansh", "rm"},
{"Rundi", "rn"},
{"Russian", "ru"},
{"Samoan", "sm"},
{"Sango", "sg"},
{"Sanskrit", "sa"},
{"Sardinian", "sc"},
{"Scottish Gaelic", "gd"},
{"Serbian", "sr"},
{"Shona", "sn"},
{"Sindhi", "sd"},
{"Sinhala", "si"},
{"Slovak", "sk"},
{"Slovenian", "sl"},
{"Somali", "so"},
{"Sotho", "st"},
{"Spanish", "es"},
{"Sundanese", "su"},
{"Swahili", "sw"},
{"Swati", "ss"},
{"Swedish", "sv"},
{"Tagalog", "tl"},
{"Tahitian", "ty"},
{"Tajik", "tg"},
{"Tamil", "ta"},
{"Tatar", "tt"},
{"Telugu", "te"},
{"Thai", "th"},
{"Tibetan", "bo"},
{"Tigrinya", "ti"},
{"Tonga", "to"},
{"Tswana", "tn"},
{"Tsonga", "ts"},
{"Turkmen", "tk"},
{"Turkish", "tr"},
{"Twi", "tw"},
{"Uighur", "ug"},
{"Ukrainian", "uk"},
{"Urdu", "ur"},
{"Uzbek", "uz"},
{"Venda", "ve"},
{"Vietnamese", "vi"},
{"Volap?", "vo"},
{"Walloon", "wa"},
{"Welsh", "cy"},
{"Wolof", "wo"},
{"Xhosa", "xh"},
{"Yi", "ii"},
{"Yiddish", "yi"},
{"Yoruba", "yo"},
{"Zhuang", "za"},
{"Zulu", "zu"},
{NULL, NULL}
};
typedef struct name_convert_map_struct {
char *old_name;
char *new_name;
}name_convert_map;
name_convert_map language_name_convert_list[] = {
{"Bambara", "Bamanankan"},
{"Bengali", "Bangla"},
{"Gaelic", "Scottish Gaelic"},
{"Oriya", "Odia"},
{"Sichuan Yi", "Yi"},
{NULL, NULL}
};
enum config_languages_dlg_test_commands{
TEST_ADD_LANGUAGE = 1,
TEST_DELETE_LANGEUGE,
TEST_SELECT_LANGUAGE_INDEX,
TEST_SELECT_LANGUAGE_ID,
TEST_CHECK_SUPPORT_BIDI_TEXT,
TEST_CHECK_REORDER_BIDI_TEXT,
TEST_CHECK_SUPPORT_THAI_SHAPING,
TEST_CHECK_GEN_ADJUSTED_THAI,
TEST_SAVE_LANGUAGE_CONFIGURE,
TEST_CANCEL_LANGUAGE_CONFIGURE
};
// config_languages_dlg dialog
#define LANGUAGE_LIST_SIZE ((sizeof(language_list) / sizeof(language_record)) - 1)
IMPLEMENT_DYNAMIC(config_languages_dlg, express_dialog)
///////////////////////////////////////////////////////////////////////////////
config_languages_dlg::config_languages_dlg(CWnd* pParent /*=NULL*/)
: express_dialog(config_languages_dlg::IDD, pParent)
{
IconId = IDB_CONFIGURE_LANGUAGES;
SetTitleText("Configure Languages");
studiox_project *project = GetOpenProject();
if (project)
{
mNumLanguages = project->mHeader.num_languages;
mStartLanguages = mNumLanguages;
if (mNumLanguages <= 0)
{
mNumLanguages = 1;
}
mLanguages.SetSize(mNumLanguages, 1);
for (int index = 0; index < mNumLanguages; index++)
{
mLanguages[index].name = project->mHeader.languages[index].name;
mLanguages[index].support_bidi_text = project->mHeader.languages[index].support_bidi_text;
mLanguages[index].gen_reordered_bidi_text = project->mHeader.languages[index].gen_reordered_bidi_text;
mLanguages[index].support_thai_glyph_shaping = project->mHeader.languages[index].support_thai_glyph_shaping;
mLanguages[index].gen_adjusted_thai_string = project->mHeader.languages[index].gen_adjusted_thai_string;
mLanguages[index].statically_defined = project->mHeader.languages[index].statically_defined;
}
}
}
///////////////////////////////////////////////////////////////////////////////
config_languages_dlg::~config_languages_dlg()
{
}
///////////////////////////////////////////////////////////////////////////////
CString config_languages_dlg::BuildCombinedLanguageName(char *name, char *symbol)
{
CString combined;
CString tname = CA2T(name);
CString tsymbol = CA2T(symbol);
combined.Format(_T("%s [%s]"), tname, tsymbol);
return combined;
}
///////////////////////////////////////////////////////////////////////////////
CString config_languages_dlg::BuildCombinedLanguageName(int index)
{
if (language_list[index].name)
{
return BuildCombinedLanguageName(language_list[index].name,
language_list[index].symbol);
}
return CString("");
}
///////////////////////////////////////////////////////////////////////////////
int config_languages_dlg::GetLanguageNameIndex(CString &findname)
{
int index = 0;
CString combined;
while(language_list[index].name)
{
if (language_list[index].name == findname)
{
return index;
}
combined = BuildCombinedLanguageName(language_list[index].name, language_list[index].symbol);
if (combined == findname)
{
return index;
}
index++;
}
return 0;
}
///////////////////////////////////////////////////////////////////////////////
int config_languages_dlg::GetLanguageIdIndex(CString &findid)
{
int index = 0;
CString combined;
while(language_list[index].name)
{
if (language_list[index].symbol == findid)
{
return index;
}
index++;
}
return 0;
}
///////////////////////////////////////////////////////////////////////////////
CString config_languages_dlg::GetLanguageId(CString &findname)
{
int index = 0;
while(language_list[index].name)
{
if (language_list[index].name == findname)
{
return CString(language_list[index].symbol);
}
index++;
}
return CString("en");
}
///////////////////////////////////////////////////////////////////////////////
CString config_languages_dlg::GetLanguageId(int index)
{
if (index < LANGUAGE_LIST_SIZE)
{
return CString(language_list[index].symbol);
}
return CString("");
}
///////////////////////////////////////////////////////////////////////////////
CString config_languages_dlg::GetLanguageName(int index)
{
if (index < LANGUAGE_LIST_SIZE)
{
return CString(language_list[index].name);
}
return CString("");
}
///////////////////////////////////////////////////////////////////////////////
int config_languages_dlg::GetStringTableIndexFromLanguageIndex(studiox_project *project, int seek_language)
{
int table_index = 0;
for (table_index = 0; table_index < project->mHeader.num_languages; table_index++)
{
int language_index = GetLanguageNameIndex(project->mHeader.languages[table_index].name);
if (language_index == seek_language)
{
return table_index;
}
}
return -1;
}
///////////////////////////////////////////////////////////////////////////////
CString config_languages_dlg::ConvertOldLanguageName(CString &old_language_name)
{
name_convert_map *list = language_name_convert_list;
while (list->old_name)
{
if (list->old_name == old_language_name)
{
return CString(list->new_name);
}
list++;
}
return old_language_name;
}
///////////////////////////////////////////////////////////////////////////////
void config_languages_dlg::AnnounceLanguageNumberChange()
{
GetDlgItem(IDC_NUM_LANGUAGES)->NotifyWinEvent(
EVENT_OBJECT_LIVEREGIONCHANGED,
OBJID_CLIENT,
CHILDID_SELF);
CMainFrame* pMain = (CMainFrame*)AfxGetApp()->GetMainWnd();
if (pMain && (!mSavedMsg.IsEmpty()))
{
CString msg;
msg.Format(L"Number of Languages %d", mNumLanguages);
pMain->GetStatusMsgControl()->SetWindowText(msg);
pMain->GetStatusMsgControl()->NotifyWinEvent(
EVENT_OBJECT_LIVEREGIONCHANGED,
OBJID_CLIENT,
CHILDID_SELF);
}
}
///////////////////////////////////////////////////////////////////////////////
BOOL config_languages_dlg::OnInitDialog()
{
express_dialog::OnInitDialog();
CSpinButtonCtrl * pb = (CSpinButtonCtrl *) GetDlgItem(IDC_SPIN_LANGUAGE_INDEX);
CEdit *ps = (CEdit *) GetDlgItem(IDC_LANGUAGE_INDEX);
pb->SetBuddy(ps);
pb->SetRange(1, mNumLanguages);
ps->SetWindowText(_T("1"));
int index = 0;
while(language_list[index].name)
{
CString lang_name;
lang_name = BuildCombinedLanguageName(language_list[index].name, language_list[index].symbol);
mLanguageNameCombo.AddString(lang_name);
index++;
}
mLanguageNameCombo.SetCurSel(GetLanguageNameIndex(mLanguages[0].name));
//set bidi text support information
mBidiTextSupportBox.SetCheck(mLanguages[0].support_bidi_text);
mBidiTextGenerateBox.SetCheck(mLanguages[0].gen_reordered_bidi_text);
mStaticallyDefined.SetCheck(mLanguages[0].statically_defined);
OnClickSupportBidiTextBox();
mThaiGlyphShapingSupport.SetCheck(mLanguages[0].support_thai_glyph_shaping);
mGenAdjustedThaiString.SetCheck(mLanguages[0].gen_adjusted_thai_string);
OnClickedThaiGlyphShapingSupport();
AddCancelButton();
AddSaveButton();
return TRUE; // return TRUE unless you set the focus to a control
}
///////////////////////////////////////////////////////////////////////////////
void config_languages_dlg::DoDataExchange(CDataExchange* pDX)
{
express_dialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LANG_NAME_COMBO, mLanguageNameCombo);
DDX_Text(pDX, IDC_NUM_LANGUAGES, mNumLanguages);
SetLiveRegion(GetDlgItem(IDC_NUM_LANGUAGES)->GetSafeHwnd());
CRect size;
// Set the drop-down list size for each of the combo-boxes.
// There doesn't seem to be any way to do it in resource editor.
mLanguageNameCombo.GetWindowRect(&size);
size.bottom = size.top + 200;
ScreenToClient(&size);
mLanguageNameCombo.MoveWindow(&size);
DDX_Control(pDX, IDC_SPIN_LANGUAGE_INDEX, mSpinLanguageIndex);
DDX_Control(pDX, IDC_CHECK_STATICALLY_DEFINED, mStaticallyDefined);
DDX_Control(pDX, IDC_CHECK_SUPPORT_BIDI_TEXT, mBidiTextSupportBox);
DDX_Control(pDX, IDC_CHECK_REORDER_BIDI_TEXT, mBidiTextGenerateBox);
DDX_Control(pDX, IDC_THAI_GLYPH_SHAPING_SUPPORT, mThaiGlyphShapingSupport);
DDX_Control(pDX, IDC_GEN_ADJUSTED_THAI_STRING, mGenAdjustedThaiString);
}
///////////////////////////////////////////////////////////////////////////////
BEGIN_MESSAGE_MAP(config_languages_dlg, express_dialog)
ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN_LANGUAGE_INDEX, &config_languages_dlg::OnDeltaposSpinLanguageIndex)
ON_BN_CLICKED(IDC_ADD_LANGUAGE, &config_languages_dlg::OnBnClickedAddLanguage)
ON_BN_CLICKED(IDC_DELETE_LANGUAGE, &config_languages_dlg::OnBnClickedDeleteLanguage)
ON_BN_CLICKED(IDCANCEL, &config_languages_dlg::OnBnClickedCancel)
ON_BN_CLICKED(IDOK, &config_languages_dlg::OnBnClickedOk)
ON_MESSAGE(STUDIO_TEST, OnTestMessage)
ON_BN_CLICKED(IDC_CHECK_SUPPORT_BIDI_TEXT, &config_languages_dlg::OnClickSupportBidiTextBox)
ON_BN_CLICKED(IDC_THAI_GLYPH_SHAPING_SUPPORT, &config_languages_dlg::OnClickedThaiGlyphShapingSupport)
END_MESSAGE_MAP()
///////////////////////////////////////////////////////////////////////////////
// config_languages_dlg message handlers
void config_languages_dlg::OnDeltaposSpinLanguageIndex(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
// TODO: Add your control notification handler code here
int upper;
int lower;
mSpinLanguageIndex.GetRange(lower, upper);
int oldval = pNMUpDown ->iPos;
int newval = oldval + pNMUpDown->iDelta;
// save the current name, update to new name, if the value is within
// limits
if (oldval <= upper && oldval >= lower &&
newval <= upper && newval >= lower)
{
mLanguages[oldval - 1].name = language_list[mLanguageNameCombo.GetCurSel()].name;
//bidi text
mLanguages[oldval - 1].support_bidi_text = mBidiTextSupportBox.GetCheck();
mLanguages[oldval - 1].gen_reordered_bidi_text = mBidiTextGenerateBox.GetCheck();
//thai string
mLanguages[oldval - 1].support_thai_glyph_shaping = mThaiGlyphShapingSupport.GetCheck();
mLanguages[oldval - 1].gen_adjusted_thai_string = mGenAdjustedThaiString.GetCheck();
mLanguages[oldval - 1].statically_defined = mStaticallyDefined.GetCheck();
mLanguageNameCombo.SetCurSel(GetLanguageNameIndex(mLanguages[newval - 1].name));
mBidiTextSupportBox.SetCheck(mLanguages[newval - 1].support_bidi_text);
mBidiTextGenerateBox.SetCheck(mLanguages[newval - 1].gen_reordered_bidi_text);
mStaticallyDefined.SetCheck(mLanguages[newval - 1].statically_defined);
OnClickSupportBidiTextBox();
mThaiGlyphShapingSupport.SetCheck(mLanguages[newval - 1].support_thai_glyph_shaping);
mGenAdjustedThaiString.SetCheck(mLanguages[newval - 1].gen_adjusted_thai_string);
OnClickedThaiGlyphShapingSupport();
}
*pResult = 0;
}
///////////////////////////////////////////////////////////////////////////////
void config_languages_dlg::OnBnClickedAddLanguage()
{
// TODO: Add your control notification handler code here
if (mNumLanguages + 1 > MAX_LANGUAGES)
{
return;
}
mNumLanguages++;
mSpinLanguageIndex.SetRange(1, mNumLanguages);
language_info info;
info.name = language_list[0].name;
info.statically_defined = TRUE;
info.support_bidi_text = FALSE;
info.gen_reordered_bidi_text = FALSE;
info.support_thai_glyph_shaping = FALSE;
mLanguages.Add(info);
SetDlgItemInt(IDC_NUM_LANGUAGES, mNumLanguages);
AnnounceLanguageNumberChange();
}
///////////////////////////////////////////////////////////////////////////////
void config_languages_dlg::OnBnClickedDeleteLanguage()
{
if (mNumLanguages > 1)
{
int Index = mSpinLanguageIndex.GetPos();
mLanguages.RemoveAt(Index - 1);
mNumLanguages--;
SetDlgItemInt(IDC_NUM_LANGUAGES, mNumLanguages);
AnnounceLanguageNumberChange();
mSpinLanguageIndex.SetRange(1, mNumLanguages);
if (GetDlgItemInt(IDC_LANGUAGE_INDEX) > (UINT) mNumLanguages)
{
SetDlgItemInt(IDC_LANGUAGE_INDEX, mNumLanguages);
}
Index = GetDlgItemInt(IDC_LANGUAGE_INDEX);
mLanguageNameCombo.SetCurSel(GetLanguageNameIndex(mLanguages[Index - 1].name));
mBidiTextSupportBox.SetCheck(mLanguages[Index - 1].support_bidi_text);
mBidiTextGenerateBox.SetCheck(mLanguages[Index - 1].gen_reordered_bidi_text);
mStaticallyDefined.SetCheck(mLanguages[Index - 1].statically_defined);
OnClickSupportBidiTextBox();
mThaiGlyphShapingSupport.SetCheck(mLanguages[Index - 1].support_thai_glyph_shaping);
mGenAdjustedThaiString.SetCheck(mLanguages[Index - 1].gen_adjusted_thai_string);
OnClickedThaiGlyphShapingSupport();
}
else
{
ErrorMsg("Encountered Improper Arguement.", this);
}
}
///////////////////////////////////////////////////////////////////////////////
void config_languages_dlg::OnBnClickedCancel()
{
// just return without doing anything
express_dialog::OnOK();
}
///////////////////////////////////////////////////////////////////////////////
void config_languages_dlg::OnBnClickedOk()
{
int index;
int display;
int old_language;
int new_language;
BOOL copy_language;
studiox_project *project = GetOpenProject();
if (!project)
{
return;
}
// save the last change in case it has not been saved yet
index = GetDlgItemInt(IDC_LANGUAGE_INDEX);
mLanguages[index - 1].name = language_list[mLanguageNameCombo.GetCurSel()].name;
mLanguages[index - 1].support_bidi_text = mBidiTextSupportBox.GetCheck();
mLanguages[index - 1].gen_reordered_bidi_text = mBidiTextGenerateBox.GetCheck();
mLanguages[index - 1].support_thai_glyph_shaping = mThaiGlyphShapingSupport.GetCheck();
mLanguages[index - 1].gen_adjusted_thai_string = mGenAdjustedThaiString.GetCheck();
mLanguages[index - 1].statically_defined = mStaticallyDefined.GetCheck();
// update the project header to hold our new langauge count and names:
int old_num_languages = project->mHeader.num_languages;
project->mHeader.num_languages = mNumLanguages;
for (index = 0; index < mNumLanguages; index++)
{
project->mHeader.languages[index].name = mLanguages[index].name;
project->mHeader.languages[index].support_bidi_text = mLanguages[index].support_bidi_text;
project->mHeader.languages[index].gen_reordered_bidi_text = mLanguages[index].gen_reordered_bidi_text;
project->mHeader.languages[index].support_thai_glyph_shaping = mLanguages[index].support_thai_glyph_shaping;
project->mHeader.languages[index].gen_adjusted_thai_string = mLanguages[index].gen_adjusted_thai_string;
project->mHeader.languages[index].statically_defined = mLanguages[index].statically_defined;
}
for (index = old_num_languages; index < mNumLanguages; index++)
{
//for the new added languages, enabled language generation for all displays
for (int display = 0; display < project->mHeader.num_displays; display++)
{
project->mDisplays[display].gen_string_table[index] = TRUE;
}
}
// make a new string tables for each display holding the new languages.
// Copy what we can from the old tables (matching langauge names)
int active_display = 0;
if (GetProjectView())
{
active_display = GetProjectView()->GetActiveDisplay();
}
for (display = 0; display < project->mHeader.num_displays; display++)
{
string_table *pOldTable = project->mDisplays[display].stable;
if (!pOldTable)
{
ErrorMsg("Internal Error: Source string table invalid", this);
express_dialog::OnOK();
return;
}
int num_strings = pOldTable->CountStrings();
string_table *pNewTable = new string_table;
pNewTable->Initialize(mNumLanguages, pOldTable->CountStrings());
CString id_name;
for (index = 1; index < num_strings; index++)
{
id_name = pOldTable->GetResourceIdName(index);
pNewTable->AddToDictionary(id_name, index);
}
// copy the string_ids, fonts, and notes:
for (index = 0; index < num_strings; index++)
{
string_table_record record = pOldTable->GetRecord(index);
pNewTable->SetDisplayFont(index, record.font_id);
pNewTable->SetStringId(index, record.id_name);
if (!record.notes.IsEmpty())
{
pNewTable->SetNotes(index, record.notes);
}
}
// for each language in the new table, see if we have that
// language in the old table
for (new_language = 0; new_language < mNumLanguages; new_language++)
{
copy_language = FALSE;
for (old_language = 0; old_language < mStartLanguages; old_language++)
{
if (mLanguages[old_language].name == mLanguages[new_language].name)
{
copy_language = TRUE;
break;
}
}
if (copy_language)
{
// we found a match, copy strings from old table to new
for (index = 0; index < num_strings; index++)
{
pNewTable->SetString(index, new_language, pOldTable->GetString(index, old_language));
}
}
}
if (display == active_display)
{
int active_language = pOldTable->GetActiveLanguage();
if (active_language >= mNumLanguages)
{
active_language = 0;
}
pNewTable->SetActiveLanguage(active_language);
}
// swap out the string tables:
project->mDisplays[display].stable = pNewTable;
if (pOldTable)
{
delete pOldTable;
}
pNewTable->UpdateGuixLanguageTable(NULL, FALSE);
}
express_dialog::OnOK();
}
///////////////////////////////////////////////////////////////////////////////
void config_languages_dlg::OnClickSupportBidiTextBox()
{
BOOL enable = FALSE;
if (mBidiTextSupportBox.GetCheck())
{
enable = TRUE;
}
mBidiTextGenerateBox.EnableWindow(enable);
}
///////////////////////////////////////////////////////////////////////////////
void config_languages_dlg::OnClickedThaiGlyphShapingSupport()
{
BOOL enabed = FALSE;
if (mThaiGlyphShapingSupport.GetCheck())
{
enabed = TRUE;
}
mGenAdjustedThaiString.EnableWindow(enabed);
}
///////////////////////////////////////////////////////////////////////////////
afx_msg LRESULT config_languages_dlg::OnTestMessage(WPARAM wParam, LPARAM lParam)
{
CWnd *pWnd;
switch (wParam)
{
case TEST_ADD_LANGUAGE:
pWnd = GetDlgItem(IDC_ADD_LANGUAGE);
SendMessage(WM_COMMAND, MAKEWPARAM(IDC_ADD_LANGUAGE, BN_CLICKED), (LPARAM)pWnd->GetSafeHwnd());
break;
case TEST_DELETE_LANGEUGE:
pWnd = GetDlgItem(IDC_DELETE_LANGUAGE);
SendMessage(WM_COMMAND, MAKEWPARAM(IDC_DELETE_LANGUAGE, BN_CLICKED), (LPARAM)pWnd->GetSafeHwnd());
break;
case TEST_SELECT_LANGUAGE_INDEX:
{
NMUPDOWN NMUpDown;
NMHDR hdr;
hdr.hwndFrom = mSpinLanguageIndex.m_hWnd;
hdr.idFrom = IDC_SPIN_LANGUAGE_INDEX;
hdr.code = UDN_DELTAPOS;
NMUpDown.hdr = hdr;
NMUpDown.iPos = mSpinLanguageIndex.GetPos();
NMUpDown.iDelta = lParam - NMUpDown.iPos;
mSpinLanguageIndex.SetPos(lParam);
SetDlgItemInt(IDC_LANGUAGE_INDEX, lParam);
SendMessage(WM_NOTIFY, IDC_SPIN_LANGUAGE_INDEX, (LPARAM)&NMUpDown);
break;
}
case TEST_SELECT_LANGUAGE_ID:
{
int language_index = GetLanguageNameIndex(GetTestingParam(0));
mLanguageNameCombo.SetCurSel(language_index);
SendMessage(WM_COMMAND, MAKEWPARAM(IDC_LANG_NAME_COMBO, CBN_SELCHANGE), (LPARAM)(mLanguageNameCombo.m_hWnd));
break;
}
case TEST_CHECK_SUPPORT_BIDI_TEXT:
pWnd = (CWnd *)GetDlgItem(IDC_CHECK_SUPPORT_BIDI_TEXT);
if (pWnd->IsWindowEnabled())
{
((CButton *)pWnd)->SetCheck(lParam);
SendMessage(WM_COMMAND, MAKEWPARAM(IDC_CHECK_SUPPORT_BIDI_TEXT, BN_CLICKED), (LPARAM)pWnd->m_hWnd);
}
break;
case TEST_CHECK_REORDER_BIDI_TEXT:
pWnd = (CWnd *)GetDlgItem(IDC_CHECK_REORDER_BIDI_TEXT);
if (pWnd->IsWindowEnabled())
{
((CButton *)pWnd)->SetCheck(lParam);
SendMessage(WM_COMMAND, MAKEWPARAM(IDC_CHECK_REORDER_BIDI_TEXT, BN_CLICKED), (LPARAM)pWnd->m_hWnd);
}
break;
case TEST_CHECK_SUPPORT_THAI_SHAPING:
pWnd = (CWnd*)GetDlgItem(IDC_THAI_GLYPH_SHAPING_SUPPORT);
if (pWnd->IsWindowEnabled())
{
((CButton*)pWnd)->SetCheck(lParam);
SendMessage(WM_COMMAND, MAKEWPARAM(IDC_THAI_GLYPH_SHAPING_SUPPORT, BN_CLICKED), (LPARAM)pWnd->m_hWnd);
}
break;
case TEST_CHECK_GEN_ADJUSTED_THAI:
pWnd = (CWnd*)GetDlgItem(IDC_GEN_ADJUSTED_THAI_STRING);
if (pWnd->IsWindowEnabled())
{
((CButton*)pWnd)->SetCheck(lParam);
SendMessage(WM_COMMAND, MAKEWPARAM(IDC_GEN_ADJUSTED_THAI_STRING, BN_CLICKED), (LPARAM)pWnd->m_hWnd);
}
break;
case TEST_SAVE_LANGUAGE_CONFIGURE:
OnBnClickedOk();
break;
case TEST_CANCEL_LANGUAGE_CONFIGURE:
OnBnClickedCancel();
break;
}
return 0;
}