3 * FILE: dll/cpl/input/add_dialog.c
5 * PROGRAMMER: Dmitry Chapyshev (dmitry@reactos.org)
9 #include "locale_list.h"
10 #include "layout_list.h"
11 #include "input_list.h"
15 GetDefaultLayoutForLocale(DWORD dwLocaleId
)
20 hIntlInf
= SetupOpenInfFileW(L
"intl.inf", NULL
, INF_STYLE_WIN4
, NULL
);
21 if (hIntlInf
!= INVALID_HANDLE_VALUE
)
23 WCHAR szLangID
[MAX_STR_LEN
];
24 INFCONTEXT InfContext
;
26 StringCchPrintfW(szLangID
, ARRAYSIZE(szLangID
), L
"%08X", dwLocaleId
);
28 if (SetupFindFirstLineW(hIntlInf
, L
"Locales", szLangID
, &InfContext
))
30 if (SetupGetFieldCount(&InfContext
) >= 5)
32 WCHAR szField
[MAX_STR_LEN
];
34 if (SetupGetStringFieldW(&InfContext
, 5, szField
, ARRAYSIZE(szField
), NULL
))
36 if (wcslen(szField
) == 13) // like 0409:00000409 (13 chars)
38 WCHAR
*pszSeparator
= L
":";
41 pszToken
= wcstok(szField
, pszSeparator
);
43 pszToken
= wcstok(NULL
, pszSeparator
);
47 dwResult
= DWORDfromString(pszToken
);
54 SetupCloseInfFile(hIntlInf
);
62 OnInitAddDialog(HWND hwndDlg
)
64 HWND hwndLocaleCombo
= GetDlgItem(hwndDlg
, IDC_INPUT_LANG_COMBO
);
65 HWND hwndLayoutCombo
= GetDlgItem(hwndDlg
, IDC_KEYBOARD_LO_COMBO
);
66 LOCALE_LIST_NODE
*pCurrentLocale
;
67 LAYOUT_LIST_NODE
*pCurrentLayout
;
68 DWORD dwDefaultLocaleId
;
69 DWORD dwDefaultLayoutId
;
72 dwDefaultLocaleId
= GetSystemDefaultLCID();
74 for (pCurrentLocale
= LocaleList_GetFirst();
75 pCurrentLocale
!= NULL
;
76 pCurrentLocale
= pCurrentLocale
->pNext
)
78 iItemIndex
= ComboBox_AddString(hwndLocaleCombo
, pCurrentLocale
->pszName
);
79 ComboBox_SetItemData(hwndLocaleCombo
, iItemIndex
, pCurrentLocale
);
81 if (pCurrentLocale
->dwId
== dwDefaultLocaleId
)
83 ComboBox_SetCurSel(hwndLocaleCombo
, iItemIndex
);
87 dwDefaultLayoutId
= GetDefaultLayoutForLocale(dwDefaultLocaleId
);
89 for (pCurrentLayout
= LayoutList_GetFirst();
90 pCurrentLayout
!= NULL
;
91 pCurrentLayout
= pCurrentLayout
->pNext
)
93 iItemIndex
= ComboBox_AddString(hwndLayoutCombo
, pCurrentLayout
->pszName
);
94 ComboBox_SetItemData(hwndLayoutCombo
, iItemIndex
, pCurrentLayout
);
96 if (pCurrentLayout
->dwId
== dwDefaultLayoutId
)
98 ComboBox_SetCurSel(hwndLayoutCombo
, iItemIndex
);
102 if (dwDefaultLayoutId
== 0)
103 ComboBox_SetCurSel(hwndLayoutCombo
, 0);
108 OnCommandAddDialog(HWND hwndDlg
, WPARAM wParam
)
110 switch (LOWORD(wParam
))
114 HWND hwndLocaleCombo
= GetDlgItem(hwndDlg
, IDC_INPUT_LANG_COMBO
);
115 HWND hwndLayoutCombo
= GetDlgItem(hwndDlg
, IDC_KEYBOARD_LO_COMBO
);
116 LOCALE_LIST_NODE
*pCurrentLocale
;
117 LAYOUT_LIST_NODE
*pCurrentLayout
;
119 pCurrentLocale
= (LOCALE_LIST_NODE
*)ComboBox_GetItemData(hwndLocaleCombo
,
120 ComboBox_GetCurSel(hwndLocaleCombo
));
121 pCurrentLayout
= (LAYOUT_LIST_NODE
*)ComboBox_GetItemData(hwndLayoutCombo
,
122 ComboBox_GetCurSel(hwndLayoutCombo
));
124 InputList_Add(pCurrentLocale
, pCurrentLayout
);
126 EndDialog(hwndDlg
, LOWORD(wParam
));
132 EndDialog(hwndDlg
, LOWORD(wParam
));
136 case IDC_INPUT_LANG_COMBO
:
138 if (HIWORD(wParam
) == CBN_SELCHANGE
)
140 HWND hwndLocaleCombo
= GetDlgItem(hwndDlg
, IDC_INPUT_LANG_COMBO
);
141 HWND hwndLayoutCombo
= GetDlgItem(hwndDlg
, IDC_KEYBOARD_LO_COMBO
);
142 LOCALE_LIST_NODE
*pCurrentLocale
;
144 pCurrentLocale
= (LOCALE_LIST_NODE
*)ComboBox_GetItemData(hwndLocaleCombo
,
145 ComboBox_GetCurSel(hwndLocaleCombo
));
146 if (pCurrentLocale
!= NULL
)
152 dwLayoutId
= GetDefaultLayoutForLocale(pCurrentLocale
->dwId
);
154 iCount
= ComboBox_GetCount(hwndLayoutCombo
);
156 for (iIndex
= 0; iIndex
< iCount
; iIndex
++)
158 LAYOUT_LIST_NODE
*pCurrentLayout
;
160 pCurrentLayout
= (LAYOUT_LIST_NODE
*)ComboBox_GetItemData(hwndLayoutCombo
, iIndex
);
162 if (pCurrentLayout
!= NULL
&& pCurrentLayout
->dwId
== dwLayoutId
)
164 ComboBox_SetCurSel(hwndLayoutCombo
, iIndex
);
177 AddDialogProc(HWND hwndDlg
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
182 OnInitAddDialog(hwndDlg
);
186 OnCommandAddDialog(hwndDlg
, wParam
);