xref: /reactos/dll/cpl/input/key_sequence_dialog.c (revision 8a978a17)
1 /*
2 * PROJECT:         input.dll
3 * FILE:            dll/cpl/input/key_sequence_dialog.c
4 * PURPOSE:         input.dll
5 * PROGRAMMER:      Dmitry Chapyshev (dmitry@reactos.org)
6 */
7 
8 #include "input.h"
9 
10 
11 INT_PTR CALLBACK
12 ChangeKeySeqDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
13 {
14     UNREFERENCED_PARAMETER(lParam);
15 
16     switch (uMsg)
17     {
18         case WM_INITDIALOG:
19         {
20             KEY_SETTINGS *keySettings = (KEY_SETTINGS*) lParam;
21 
22             if (keySettings != NULL)
23             {
24                 SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (LONG_PTR) keySettings);
25 
26                 if (keySettings->dwLanguage == 3)
27                 {
28                     CheckDlgButton(hwndDlg, IDC_CTRL_LANG, BST_CHECKED);
29                     EnableWindow(GetDlgItem(hwndDlg, IDC_CTRL_LANG), FALSE);
30                     EnableWindow(GetDlgItem(hwndDlg, IDC_LEFT_ALT_LANG), FALSE);
31                 }
32                 else
33                 {
34                     CheckDlgButton(hwndDlg, IDC_SWITCH_INPUT_LANG_CB, BST_CHECKED);
35 
36                     if (keySettings->dwLanguage == 1)
37                     {
38                         CheckDlgButton(hwndDlg, IDC_LEFT_ALT_LANG, BST_CHECKED);
39                     }
40                     else
41                     {
42                         CheckDlgButton(hwndDlg, IDC_CTRL_LANG, BST_CHECKED);
43                     }
44                 }
45 
46                 if (keySettings->dwLayout == 3)
47                 {
48                     CheckDlgButton(hwndDlg, IDC_LEFT_ALT_LAYOUT, BST_CHECKED);
49                     EnableWindow(GetDlgItem(hwndDlg, IDC_CTRL_LAYOUT), FALSE);
50                     EnableWindow(GetDlgItem(hwndDlg, IDC_LEFT_ALT_LAYOUT), FALSE);
51                 }
52                 else
53                 {
54                     CheckDlgButton(hwndDlg, IDC_SWITCH_KBLAYOUTS_CB, BST_CHECKED);
55 
56                     if (keySettings->dwLayout == 1)
57                     {
58                         CheckDlgButton(hwndDlg, IDC_LEFT_ALT_LAYOUT, BST_CHECKED);
59                     }
60                     else
61                     {
62                         CheckDlgButton(hwndDlg, IDC_CTRL_LAYOUT, BST_CHECKED);
63                     }
64                 }
65             }
66         }
67         break;
68 
69         case WM_COMMAND:
70         {
71             switch (LOWORD(wParam))
72             {
73                 case IDC_SWITCH_INPUT_LANG_CB:
74                 {
75                     if (HIWORD(wParam) == BN_CLICKED)
76                     {
77                         if (IsDlgButtonChecked(hwndDlg, IDC_SWITCH_INPUT_LANG_CB) == BST_CHECKED)
78                         {
79                             EnableWindow(GetDlgItem(hwndDlg, IDC_CTRL_LANG), TRUE);
80                             EnableWindow(GetDlgItem(hwndDlg, IDC_LEFT_ALT_LANG), TRUE);
81                         }
82                         else
83                         {
84                             EnableWindow(GetDlgItem(hwndDlg, IDC_CTRL_LANG), FALSE);
85                             EnableWindow(GetDlgItem(hwndDlg, IDC_LEFT_ALT_LANG), FALSE);
86                         }
87                     }
88                 }
89                 break;
90 
91                 case IDC_SWITCH_KBLAYOUTS_CB:
92                 {
93                     if (HIWORD(wParam) == BN_CLICKED)
94                     {
95                         if (IsDlgButtonChecked(hwndDlg, IDC_SWITCH_KBLAYOUTS_CB) == BST_CHECKED)
96                         {
97                             EnableWindow(GetDlgItem(hwndDlg, IDC_CTRL_LAYOUT), TRUE);
98                             EnableWindow(GetDlgItem(hwndDlg, IDC_LEFT_ALT_LAYOUT), TRUE);
99                         }
100                         else
101                         {
102                             EnableWindow(GetDlgItem(hwndDlg, IDC_CTRL_LAYOUT), FALSE);
103                             EnableWindow(GetDlgItem(hwndDlg, IDC_LEFT_ALT_LAYOUT), FALSE);
104                         }
105                     }
106                 }
107                 break;
108 
109                 case IDC_CTRL_LANG:
110                 {
111                     if (HIWORD(wParam) == BN_CLICKED)
112                     {
113                         CheckDlgButton(hwndDlg, IDC_LEFT_ALT_LAYOUT, BST_CHECKED);
114                         CheckDlgButton(hwndDlg, IDC_CTRL_LAYOUT, BST_UNCHECKED);
115                     }
116                 }
117                 break;
118 
119                 case IDC_LEFT_ALT_LANG:
120                 {
121                     if (HIWORD(wParam) == BN_CLICKED)
122                     {
123                         CheckDlgButton(hwndDlg, IDC_CTRL_LAYOUT, BST_CHECKED);
124                         CheckDlgButton(hwndDlg, IDC_LEFT_ALT_LAYOUT, BST_UNCHECKED);
125                     }
126                 }
127                 break;
128 
129                 case IDC_CTRL_LAYOUT:
130                 {
131                     if (HIWORD(wParam) == BN_CLICKED)
132                     {
133                         CheckDlgButton(hwndDlg, IDC_LEFT_ALT_LANG, BST_CHECKED);
134                         CheckDlgButton(hwndDlg, IDC_CTRL_LANG, BST_UNCHECKED);
135                     }
136                 }
137                 break;
138 
139                 case IDC_LEFT_ALT_LAYOUT:
140                 {
141                     if (HIWORD(wParam) == BN_CLICKED)
142                     {
143                         CheckDlgButton(hwndDlg, IDC_CTRL_LANG, BST_CHECKED);
144                         CheckDlgButton(hwndDlg, IDC_LEFT_ALT_LANG, BST_UNCHECKED);
145                     }
146                 }
147                 break;
148 
149                 case IDOK:
150                 {
151                     KEY_SETTINGS *keySettings;
152 
153                     keySettings = (KEY_SETTINGS*)GetWindowLongPtrW(hwndDlg, GWLP_USERDATA);
154 
155                     if (keySettings != NULL)
156                     {
157                         if (IsDlgButtonChecked(hwndDlg, IDC_SWITCH_INPUT_LANG_CB) == BST_CHECKED)
158                         {
159                             if (IsDlgButtonChecked(hwndDlg, IDC_CTRL_LANG) == BST_CHECKED)
160                             {
161                                 keySettings->dwLanguage = 2;
162                             }
163                             else
164                             {
165                                 keySettings->dwLanguage = 1;
166                             }
167                         }
168                         else
169                         {
170                             keySettings->dwLanguage = 3;
171                         }
172 
173                         if (IsDlgButtonChecked(hwndDlg, IDC_SWITCH_KBLAYOUTS_CB) == BST_CHECKED)
174                         {
175                             if (IsDlgButtonChecked(hwndDlg, IDC_CTRL_LAYOUT) == BST_CHECKED)
176                             {
177                                 keySettings->dwLayout = 2;
178                             }
179                             else
180                             {
181                                 keySettings->dwLayout = 1;
182                             }
183                         }
184                         else
185                         {
186                             keySettings->dwLayout = 3;
187                         }
188                     }
189 
190                     EndDialog(hwndDlg, LOWORD(wParam));
191                 }
192                 break;
193 
194                 case IDCANCEL:
195                 {
196                     EndDialog(hwndDlg, LOWORD(wParam));
197                 }
198                 break;
199             }
200         }
201         break;
202     }
203 
204     return FALSE;
205 }
206