diff --git a/reactos/dll/cpl/intl/advanced.c b/reactos/dll/cpl/intl/advanced.c index c455e0a3ae3..135d3f7d500 100644 --- a/reactos/dll/cpl/intl/advanced.c +++ b/reactos/dll/cpl/intl/advanced.c @@ -1,10 +1,173 @@ #include #include +#include +#include +#include +#include #include #include "intl.h" #include "resource.h" +typedef struct CPStruct +{ + WORD Status; + UINT CPage; + HANDLE hCPage; + TCHAR Name[MAX_PATH]; + struct CPStruct *NextItem; +} CPAGE, *LPCPAGE; + +static LPCPAGE PCPage = NULL; +static HINF hIntlInf; + +static BOOL +GetSupportedCP(VOID) +{ + UINT uiCPage, Count, Number; + INFCONTEXT infCont; + LPCPAGE lpCPage; + HANDLE hCPage; + + Count = (UINT) SetupGetLineCount(hIntlInf, _T("CodePages")); + if (Count <= 0) return FALSE; + + for (Number = 0; Number < Count; Number++) + { + if (SetupGetLineByIndex(hIntlInf, _T("CodePages"), Number, &infCont) && + SetupGetIntField(&infCont, 0, (PINT)&uiCPage)) + { + if (!(hCPage = GlobalAlloc(GHND, sizeof(CPAGE)))) return FALSE; + + lpCPage = GlobalLock(hCPage); + lpCPage->CPage = uiCPage; + lpCPage->hCPage = hCPage; + lpCPage->Status = 0; + (lpCPage->Name)[0] = 0; + + CPINFOEX cpInfEx; + if (GetCPInfoEx(uiCPage, 0, &cpInfEx)) + { + _tcscpy(lpCPage->Name, cpInfEx.CodePageName); + } + else if (!SetupGetStringField(&infCont, 1, lpCPage->Name, MAX_PATH, NULL)) + { + GlobalUnlock(hCPage); + GlobalFree(hCPage); + continue; + } + + TCHAR Section[MAX_PATH]; + _stprintf(Section, TEXT("%s%d"), _T("CODEPAGE_REMOVE_"), uiCPage); + if ((uiCPage == GetACP()) || (uiCPage == GetOEMCP()) || + (!SetupFindFirstLine(hIntlInf, Section, _T("AddReg"), &infCont))) + { + lpCPage->Status |= (0x0001 | 0x0002); + } + + lpCPage->NextItem = PCPage; + PCPage = lpCPage; + } + } + + return TRUE; +} + +static BOOL CALLBACK +InstalledCPProc(LPTSTR lpStr) +{ + LPCPAGE lpCP; + UINT uiCP; + + lpCP = PCPage; + uiCP = _ttol(lpStr); + for (;;) + { + if (!lpCP) break; + if (lpCP->CPage == uiCP) + { + lpCP->Status |= 0x0001; + break; + } + lpCP = lpCP->NextItem; + } + + return TRUE; +} + +static VOID +InitLangList(HWND hwndDlg) +{ + LPCPAGE lpCPage; + INT ItemIndex; + HWND hList; + + hList = GetDlgItem(hwndDlg, IDC_CONV_TABLES); + + hIntlInf = SetupOpenInfFile(_T("intl.inf"), NULL, INF_STYLE_WIN4, NULL); + + if (hIntlInf == INVALID_HANDLE_VALUE) return; + + if (!SetupOpenAppendInfFile(NULL, hIntlInf, NULL)) + { + SetupCloseInfFile(hIntlInf); + hIntlInf = NULL; + return; + } + + if (!GetSupportedCP()) return; + + SetupCloseInfFile(hIntlInf); + + if (!EnumSystemCodePages(InstalledCPProc, CP_INSTALLED)) return; + + LV_COLUMN column; + LV_ITEM item; + RECT ListRect; + + ZeroMemory(&column, sizeof(LV_COLUMN)); + column.mask = LVCF_FMT|LVCF_TEXT|LVCF_WIDTH; + column.fmt = LVCFMT_LEFT; + GetClientRect(hList, &ListRect); + column.cx = ListRect.right - GetSystemMetrics(SM_CYHSCROLL); + (VOID) ListView_InsertColumn(hList, 0, &column); + + (VOID) ListView_SetExtendedListViewStyle(hList, LVS_EX_CHECKBOXES|LVS_EX_FULLROWSELECT); + + lpCPage = PCPage; + + for (;;) + { + if (!lpCPage) break; + ZeroMemory(&item, sizeof(LV_ITEM)); + item.mask = LVIF_TEXT|LVIF_PARAM|LVIF_STATE; + item.state = 0; + item.stateMask = LVIS_STATEIMAGEMASK; + item.pszText = lpCPage->Name; + item.lParam = (LPARAM)lpCPage; + + ItemIndex = ListView_InsertItem(hList, &item); + + if (ItemIndex >= 0) + { + if (lpCPage->Status & 0x0001) + { + ListView_SetItemState(hList, ItemIndex, + INDEXTOSTATEIMAGEMASK(LVIS_SELECTED), + LVIS_STATEIMAGEMASK); + } + else + { + ListView_SetItemState(hList, ItemIndex, + INDEXTOSTATEIMAGEMASK(LVIS_FOCUSED), + LVIS_STATEIMAGEMASK); + } + } + + lpCPage = lpCPage->NextItem; + } +} + /* Property page dialog callback */ INT_PTR CALLBACK AdvancedPageProc(HWND hwndDlg, @@ -15,7 +178,10 @@ AdvancedPageProc(HWND hwndDlg, switch(uMsg) { case WM_INITDIALOG: - break; + { + InitLangList(hwndDlg); + } + break; } return FALSE; diff --git a/reactos/dll/cpl/intl/lang/bg-BG.rc b/reactos/dll/cpl/intl/lang/bg-BG.rc index f080213f213..f8e129ff518 100644 --- a/reactos/dll/cpl/intl/lang/bg-BG.rc +++ b/reactos/dll/cpl/intl/lang/bg-BG.rc @@ -50,7 +50,7 @@ BEGIN LTEXT "Тази настройка позволява на неуникод приложенията да показват правилно изборниците и прозорците на присъщия им език. Тя не засяга уникод приложенията, но засяга всички потребители на компютъра.", -1, 14, 18, 216, 33 LTEXT "Изберете подходящ език за неуникод приложенията:", -1, 14, 55, 216, 10 GROUPBOX "Знаков набор", -1, 6, 92, 233, 88 - LISTBOX IDC_CONV_TABLES, 14, 105, 218, 70, LBS_STANDARD + CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70 GROUPBOX "Подразбрани потребителски настройки", -1, 6, 183, 233, 33 CHECKBOX "Прилагане на всички настройки за текущия потребител и по подразбиране", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 192, 223, 22, BS_MULTILINE END diff --git a/reactos/dll/cpl/intl/lang/de-DE.rc b/reactos/dll/cpl/intl/lang/de-DE.rc index 80d6c8aec2b..07b1df8450f 100644 --- a/reactos/dll/cpl/intl/lang/de-DE.rc +++ b/reactos/dll/cpl/intl/lang/de-DE.rc @@ -50,7 +50,7 @@ BEGIN LTEXT "Diese Einstellung ermцglicht es Unicode-Inkompatiblen Programmen, Menьs und Dialoge in der цrtlichen Sprache darzustellen. Dies beeinflusst Unicode-Kompatible Programme nicht, wird aber fьr alle Nutzer des Computers angewendet.", -1, 14, 18, 223, 33 LTEXT "Wдhlen Sie eine Sprache aus, die der Sprachversion des Programmes entspricht, dass Sie nutzen wollen:", -1, 14, 55, 223, 18 GROUPBOX "Codepage Konvertierungstabellen", -1, 5, 101, 234, 88 - LISTBOX IDC_CONV_TABLES, 14, 114, 217, 77, LBS_STANDARD + CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70 GROUPBOX "Standardeinstellungen fьr Benutzerkonten", -1, 5, 193, 234, 30 CHECKBOX "Einstellungen &auf das aktive und Standardkonto anwenden.", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE END diff --git a/reactos/dll/cpl/intl/lang/en-US.rc b/reactos/dll/cpl/intl/lang/en-US.rc index ceab3994dda..cbebf5a91b2 100644 --- a/reactos/dll/cpl/intl/lang/en-US.rc +++ b/reactos/dll/cpl/intl/lang/en-US.rc @@ -50,7 +50,7 @@ BEGIN LTEXT "This system setting enables non-Unicode programs to display menus and dialogs in their native language. It does not affect Unicode programs, but it does apply to all users of this computer.", -1, 14, 18, 223, 33 LTEXT "Select a language to match the language version of the non-Unicode programs you want to use:", -1, 14, 55, 223, 18 GROUPBOX "Code page conversion tables", -1, 5, 101, 234, 88 - LISTBOX IDC_CONV_TABLES, 14, 114, 217, 77, LBS_STANDARD + CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70 GROUPBOX "Default user account settings", -1, 5, 193, 234, 30 CHECKBOX "Apply all settings to the current user account and to the default", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE END diff --git a/reactos/dll/cpl/intl/lang/es-ES.rc b/reactos/dll/cpl/intl/lang/es-ES.rc index 362ae8967c3..2116081fb2c 100644 --- a/reactos/dll/cpl/intl/lang/es-ES.rc +++ b/reactos/dll/cpl/intl/lang/es-ES.rc @@ -56,7 +56,7 @@ BEGIN LTEXT "Esta configuraciуn de sistema permite que algunos programas no Unicode muestren menъs y diбlogos en sus idiomas originales. No afecta a los programas Unicode pero afecta a todos los usuarios de este equipo.", -1, 14, 18, 223, 33 LTEXT "Seleccione un idioma que coincida con la versiуn de idioma de los programas no Unicode que desea utilizar:", -1, 14, 55, 223, 18 GROUPBOX "Tablas de conversiуn de pбginas de cуdigo", -1, 5, 101, 234, 88 - LISTBOX IDC_CONV_TABLES, 14, 114, 217, 77, LBS_STANDARD + CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70 GROUPBOX "Configuraciуn de la cuenta de usuario predeterminada", -1, 5, 193, 234, 30 CHECKBOX "Aplicar toda la configuraciуn a la cuenta de usuario actual y al perfil de usuario predeterminado", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE END diff --git a/reactos/dll/cpl/intl/lang/fr-FR.rc b/reactos/dll/cpl/intl/lang/fr-FR.rc index b27690e32a9..d7a986fe1e1 100644 --- a/reactos/dll/cpl/intl/lang/fr-FR.rc +++ b/reactos/dll/cpl/intl/lang/fr-FR.rc @@ -53,7 +53,7 @@ BEGIN LTEXT "Ce paramиtre systиme permet aux programmes non-Unicode d'afficher les menus et les dialogues dans leur langue native. Cela n'affecte pas es programmes Unicode, mais s'applique а tous les utilisateurs de cet ordinateur.", -1, 14, 18, 223, 33 LTEXT "Sйlectionnez une langue qui corresponde а la version de la langue des programmes que vous voulez utiliser :", -1, 14, 55, 223, 18 GROUPBOX "Tables de conversion des pages de code", -1, 5, 101, 234, 88 - LISTBOX IDC_CONV_TABLES, 14, 114, 217, 77, LBS_STANDARD + CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70 GROUPBOX "Paramиtres du compte de l'utilisateur par dйfaut ", -1, 5, 193, 234, 30 CHECKBOX "Appliquer tous ces paramиtres au compte utilisateur actuel et а celui par dйfaut", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE END diff --git a/reactos/dll/cpl/intl/lang/it-IT.rc b/reactos/dll/cpl/intl/lang/it-IT.rc index 963effa0e95..f93efa2a98d 100644 --- a/reactos/dll/cpl/intl/lang/it-IT.rc +++ b/reactos/dll/cpl/intl/lang/it-IT.rc @@ -52,7 +52,7 @@ BEGIN LTEXT "In base a questa impostazione di sistema и possibile visualizzare menщ e finestre di dialogo di programmi non Unicode nella lingua di origine. I programmi Unicode resteranno invariati, ma l'impostazione verrа applicata per tutti gli utenti che utilizzano il computer.", -1, 14, 18, 223, 33 LTEXT "Selezionare una lingua per i programmi non Unicode da utilizzare:", -1, 14, 55, 223, 18 GROUPBOX "Tabella di conversione di tabelle codici", -1, 5, 101, 234, 88 - LISTBOX IDC_CONV_TABLES, 14, 114, 217, 77, LBS_STANDARD + CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70 GROUPBOX "Impostazioni account utente predefinito", -1, 5, 193, 234, 30 CHECKBOX "Appli&ca tutte le impostazioni all'account utente corrente e al profilo utente predefinito", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE END diff --git a/reactos/dll/cpl/intl/lang/pl-PL.rc b/reactos/dll/cpl/intl/lang/pl-PL.rc index 0db5d23f0a3..f9a882b4e77 100644 --- a/reactos/dll/cpl/intl/lang/pl-PL.rc +++ b/reactos/dll/cpl/intl/lang/pl-PL.rc @@ -57,7 +57,7 @@ BEGIN LTEXT "Te ustawienia umoїliwiaj№ programom bez standardu Unicode wyњwietlaж menu i dialogi w odpowiednich jкzykach. Nie ma to wpіywu na programy Unicode ale dotyczy profili domyњlnych.", -1, 14, 18, 223, 33 LTEXT "Wybierz taki jкzyk, ktуry ma byж uїywany przez programy bez Unicode:", -1, 14, 55, 223, 18 GROUPBOX "Tablice konwersji stron kodowych", -1, 5, 101, 234, 88 - LISTBOX IDC_CONV_TABLES, 14, 114, 217, 77, LBS_STANDARD + CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70 GROUPBOX "Ustawienia domyњlne uїytkownika", -1, 5, 193, 234, 30 CHECKBOX "Zastosuj ustawienia dla obecnego konta jak i dla profilu domyњlnego.", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE END diff --git a/reactos/dll/cpl/intl/lang/ru-RU.rc b/reactos/dll/cpl/intl/lang/ru-RU.rc index 978278a54ea..187c9662e03 100644 --- a/reactos/dll/cpl/intl/lang/ru-RU.rc +++ b/reactos/dll/cpl/intl/lang/ru-RU.rc @@ -51,7 +51,7 @@ BEGIN LTEXT "Этот параметр позволяет программам, не поддерживающим Юникод, отображать меню и диалоги на своем языке. Он не влияет на Юникод-совместимые программы, но применяется для всех пользователей этого компьютера.", -1, 14, 18, 223, 33 LTEXT "Выберите язык, соответствующий языку используемых программ, которые не поддерживают Юникод:", -1, 14, 55, 223, 18 GROUPBOX "Кодовые страницы таблиц преобразования", -1, 5, 101, 234, 88 - LISTBOX IDC_CONV_TABLES, 14, 114, 217, 70, LBS_STANDARD + CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70 GROUPBOX "Параметры для стандартной учетной записи", -1, 5, 193, 234, 30 CHECKBOX "Применить эти параметры для текущей учетной записи и для стандартного профиля", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE END diff --git a/reactos/dll/cpl/intl/lang/uk-UA.rc b/reactos/dll/cpl/intl/lang/uk-UA.rc index 6be907a796a..cd3dd44f1c9 100644 --- a/reactos/dll/cpl/intl/lang/uk-UA.rc +++ b/reactos/dll/cpl/intl/lang/uk-UA.rc @@ -59,7 +59,7 @@ BEGIN LTEXT "Цей системний параметр дає змогу програмам, які не підтримують Юнікод, показувати меню та діалоги рідною мовою. Він не впливає на програми з підтримкою Юнікоду, але застосовується до всіх користувачів цього комп'ютера.", -1, 14, 18, 223, 33 LTEXT "Виберіть мову, яка відповідає мовній версії бажаних програм без підтримки Юнікоду.", -1, 14, 55, 223, 18 GROUPBOX "Таблиці перетворення кодових сторінок", -1, 5, 101, 234, 88 - LISTBOX IDC_CONV_TABLES, 14, 114, 217, 77, LBS_STANDARD + CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70 GROUPBOX "Параметри стандартного облікового запису", -1, 5, 193, 234, 30 CHECKBOX "Застосувати всі параметри до поточного облікового запису та до стандартного профілю користувача", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE END