+++ /dev/null
-/*
-* PROJECT: input.dll
-* FILE: dll/cpl/input/add_dialog.c
-* PURPOSE: input.dll
-* PROGRAMMER: Dmitry Chapyshev (dmitry@reactos.org)
-*/
-
-#include "input.h"
-#include "locale_list.h"
-#include "layout_list.h"
-#include "input_list.h"
-
-
-static DWORD
-GetDefaultLayoutForLocale(DWORD dwLocaleId)
-{
- DWORD dwResult = 0;
- HINF hIntlInf;
-
- hIntlInf = SetupOpenInfFileW(L"intl.inf", NULL, INF_STYLE_WIN4, NULL);
- if (hIntlInf != INVALID_HANDLE_VALUE)
- {
- WCHAR szLangID[MAX_STR_LEN];
- INFCONTEXT InfContext;
-
- StringCchPrintfW(szLangID, ARRAYSIZE(szLangID), L"%08X", dwLocaleId);
-
- if (SetupFindFirstLineW(hIntlInf, L"Locales", szLangID, &InfContext))
- {
- if (SetupGetFieldCount(&InfContext) >= 5)
- {
- WCHAR szField[MAX_STR_LEN];
-
- if (SetupGetStringFieldW(&InfContext, 5, szField, ARRAYSIZE(szField), NULL))
- {
- if (wcslen(szField) == 13) // like 0409:00000409 (13 chars)
- {
- WCHAR *pszSeparator = L":";
- WCHAR *pszToken;
-
- pszToken = wcstok(szField, pszSeparator);
- if (pszToken != NULL)
- pszToken = wcstok(NULL, pszSeparator);
-
- if (pszToken != NULL)
- {
- dwResult = DWORDfromString(pszToken);
- }
- }
- }
- }
- }
-
- SetupCloseInfFile(hIntlInf);
- }
-
- return dwResult;
-}
-
-
-static VOID
-OnInitAddDialog(HWND hwndDlg)
-{
- HWND hwndLocaleCombo = GetDlgItem(hwndDlg, IDC_INPUT_LANG_COMBO);
- HWND hwndLayoutCombo = GetDlgItem(hwndDlg, IDC_KEYBOARD_LO_COMBO);
- LOCALE_LIST_NODE *pCurrentLocale;
- LAYOUT_LIST_NODE *pCurrentLayout;
- DWORD dwDefaultLocaleId;
- DWORD dwDefaultLayoutId;
- INT iItemIndex;
-
- dwDefaultLocaleId = GetSystemDefaultLCID();
-
- for (pCurrentLocale = LocaleList_GetFirst();
- pCurrentLocale != NULL;
- pCurrentLocale = pCurrentLocale->pNext)
- {
- iItemIndex = ComboBox_AddString(hwndLocaleCombo, pCurrentLocale->pszName);
- ComboBox_SetItemData(hwndLocaleCombo, iItemIndex, pCurrentLocale);
-
- if (pCurrentLocale->dwId == dwDefaultLocaleId)
- {
- ComboBox_SetCurSel(hwndLocaleCombo, iItemIndex);
- }
- }
-
- dwDefaultLayoutId = GetDefaultLayoutForLocale(dwDefaultLocaleId);
-
- for (pCurrentLayout = LayoutList_GetFirst();
- pCurrentLayout != NULL;
- pCurrentLayout = pCurrentLayout->pNext)
- {
- iItemIndex = ComboBox_AddString(hwndLayoutCombo, pCurrentLayout->pszName);
- ComboBox_SetItemData(hwndLayoutCombo, iItemIndex, pCurrentLayout);
-
- if (pCurrentLayout->dwId == dwDefaultLayoutId)
- {
- ComboBox_SetCurSel(hwndLayoutCombo, iItemIndex);
- }
- }
-
- if (dwDefaultLayoutId == 0)
- ComboBox_SetCurSel(hwndLayoutCombo, 0);
-}
-
-
-static VOID
-OnCommandAddDialog(HWND hwndDlg, WPARAM wParam)
-{
- switch (LOWORD(wParam))
- {
- case IDOK:
- {
- HWND hwndLocaleCombo = GetDlgItem(hwndDlg, IDC_INPUT_LANG_COMBO);
- HWND hwndLayoutCombo = GetDlgItem(hwndDlg, IDC_KEYBOARD_LO_COMBO);
- LOCALE_LIST_NODE *pCurrentLocale;
- LAYOUT_LIST_NODE *pCurrentLayout;
-
- pCurrentLocale = (LOCALE_LIST_NODE*)ComboBox_GetItemData(hwndLocaleCombo,
- ComboBox_GetCurSel(hwndLocaleCombo));
- pCurrentLayout = (LAYOUT_LIST_NODE*)ComboBox_GetItemData(hwndLayoutCombo,
- ComboBox_GetCurSel(hwndLayoutCombo));
-
- InputList_Add(pCurrentLocale, pCurrentLayout);
-
- EndDialog(hwndDlg, LOWORD(wParam));
- }
- break;
-
- case IDCANCEL:
- {
- EndDialog(hwndDlg, LOWORD(wParam));
- }
- break;
-
- case IDC_INPUT_LANG_COMBO:
- {
- if (HIWORD(wParam) == CBN_SELCHANGE)
- {
- HWND hwndLocaleCombo = GetDlgItem(hwndDlg, IDC_INPUT_LANG_COMBO);
- HWND hwndLayoutCombo = GetDlgItem(hwndDlg, IDC_KEYBOARD_LO_COMBO);
- LOCALE_LIST_NODE *pCurrentLocale;
-
- pCurrentLocale = (LOCALE_LIST_NODE*)ComboBox_GetItemData(hwndLocaleCombo,
- ComboBox_GetCurSel(hwndLocaleCombo));
- if (pCurrentLocale != NULL)
- {
- DWORD dwLayoutId;
- INT iIndex;
- INT iCount;
-
- dwLayoutId = GetDefaultLayoutForLocale(pCurrentLocale->dwId);
-
- iCount = ComboBox_GetCount(hwndLayoutCombo);
-
- for (iIndex = 0; iIndex < iCount; iIndex++)
- {
- LAYOUT_LIST_NODE *pCurrentLayout;
-
- pCurrentLayout = (LAYOUT_LIST_NODE*)ComboBox_GetItemData(hwndLayoutCombo, iIndex);
-
- if (pCurrentLayout != NULL && pCurrentLayout->dwId == dwLayoutId)
- {
- ComboBox_SetCurSel(hwndLayoutCombo, iIndex);
- break;
- }
- }
- }
- }
- }
- break;
- }
-}
-
-
-INT_PTR CALLBACK
-AddDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
- switch (uMsg)
- {
- case WM_INITDIALOG:
- OnInitAddDialog(hwndDlg);
- break;
-
- case WM_COMMAND:
- OnCommandAddDialog(hwndDlg, wParam);
- break;
-
- case WM_DESTROY:
- break;
- }
-
- return FALSE;
-}