Synchronize with trunk r58457.
[reactos.git] / dll / cpl / console / options.c
1 /*
2 * PROJECT: ReactOS Console Configuration DLL
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: dll/win32/console/options.c
5 * PURPOSE: displays options dialog
6 * PROGRAMMERS: Johannes Anderwald (johannes.anderwald@student.tugraz.at)
7 */
8
9 #include "console.h"
10
11 static
12 void
13 UpdateDialogElements(HWND hwndDlg, PCONSOLE_PROPS pConInfo);
14
15 INT_PTR
16 CALLBACK
17 OptionsProc(HWND hwndDlg,
18 UINT uMsg,
19 WPARAM wParam,
20 LPARAM lParam)
21 {
22 PCONSOLE_PROPS pConInfo;
23 LRESULT lResult;
24 HWND hDlgCtrl;
25 LPPSHNOTIFY lppsn;
26
27 pConInfo = (PCONSOLE_PROPS)GetWindowLongPtr(hwndDlg, DWLP_USER);
28
29 switch (uMsg)
30 {
31 case WM_INITDIALOG:
32 {
33 pConInfo = (PCONSOLE_PROPS)((LPPROPSHEETPAGE)lParam)->lParam;
34 SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pConInfo);
35 UpdateDialogElements(hwndDlg, pConInfo);
36 return TRUE;
37 }
38 case WM_NOTIFY:
39 {
40 if (!pConInfo)
41 {
42 break;
43 }
44 lppsn = (LPPSHNOTIFY) lParam;
45 if (lppsn->hdr.code == UDN_DELTAPOS)
46 {
47 hDlgCtrl = GetDlgItem(hwndDlg, IDC_EDIT_BUFFER_SIZE);
48 pConInfo->ci.HistoryBufferSize = LOWORD(SendMessage(hDlgCtrl, UDM_GETPOS, 0, 0));
49
50 hDlgCtrl = GetDlgItem(hwndDlg, IDC_EDIT_NUM_BUFFER);
51 pConInfo->ci.NumberOfHistoryBuffers = LOWORD(SendMessage(hDlgCtrl, UDM_GETPOS, 0, 0));
52 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
53 }
54 else if (lppsn->hdr.code == PSN_APPLY)
55 {
56 if (!pConInfo->AppliedConfig)
57 {
58 return ApplyConsoleInfo(hwndDlg, pConInfo);
59 }
60 else
61 {
62 /* Options have already been applied */
63 SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, PSNRET_NOERROR);
64 return TRUE;
65 }
66 }
67 break;
68 }
69 case WM_COMMAND:
70 {
71 if (!pConInfo)
72 {
73 break;
74 }
75 switch (LOWORD(wParam))
76 {
77 case IDC_RADIO_SMALL_CURSOR:
78 {
79 pConInfo->ci.CursorSize = 0;
80 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
81 break;
82 }
83 case IDC_RADIO_MEDIUM_CURSOR:
84 {
85 pConInfo->ci.CursorSize = 50;
86 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
87 break;
88 }
89 case IDC_RADIO_LARGE_CURSOR:
90 {
91 pConInfo->ci.CursorSize = 100;
92 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
93 break;
94 }
95 case IDC_RADIO_DISPLAY_WINDOW:
96 {
97 pConInfo->ci.FullScreen = FALSE;
98 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
99 break;
100 }
101 case IDC_RADIO_DISPLAY_FULL:
102 {
103 pConInfo->ci.FullScreen = TRUE;
104 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
105 break;
106 }
107 case IDC_CHECK_QUICK_EDIT:
108 {
109 lResult = SendMessage((HWND)lParam, BM_GETCHECK, (WPARAM)0, (LPARAM)0);
110 if (lResult == BST_CHECKED)
111 {
112 pConInfo->ci.QuickEdit = FALSE;
113 SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_UNCHECKED, (LPARAM)0);
114 }
115 else if (lResult == BST_UNCHECKED)
116 {
117 pConInfo->ci.QuickEdit = TRUE;
118 SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
119 }
120 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
121 break;
122 }
123 case IDC_CHECK_INSERT_MODE:
124 {
125 lResult = SendMessage((HWND)lParam, BM_GETCHECK, (WPARAM)0, (LPARAM)0);
126 if (lResult == BST_CHECKED)
127 {
128 pConInfo->ci.InsertMode = FALSE;
129 SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_UNCHECKED, (LPARAM)0);
130 }
131 else if (lResult == BST_UNCHECKED)
132 {
133 pConInfo->ci.InsertMode = TRUE;
134 SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
135 }
136 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
137 break;
138 }
139 case IDC_CHECK_DISCARD_DUPLICATES:
140 {
141 lResult = SendMessage((HWND)lParam, BM_GETCHECK, (WPARAM)0, (LPARAM)0);
142 if (lResult == BST_CHECKED)
143 {
144 pConInfo->ci.HistoryNoDup = FALSE;
145 SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_UNCHECKED, (LPARAM)0);
146 }
147 else if (lResult == BST_UNCHECKED)
148 {
149 pConInfo->ci.HistoryNoDup = TRUE;
150 SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
151 }
152 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
153 break;
154 }
155 default:
156 break;
157 }
158 break;
159 }
160 default:
161 break;
162 }
163
164 return FALSE;
165 }
166
167 static
168 void
169 UpdateDialogElements(HWND hwndDlg, PCONSOLE_PROPS pConInfo)
170 {
171 HWND hDlgCtrl;
172 TCHAR szBuffer[MAX_PATH];
173
174 /* Update cursor size */
175 if (pConInfo->ci.CursorSize == 0)
176 {
177 /* Small cursor */
178 hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_SMALL_CURSOR);
179 SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
180
181 hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_MEDIUM_CURSOR);
182 SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0);
183 hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_LARGE_CURSOR);
184 SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0);
185 }
186 else if (pConInfo->ci.CursorSize == 50)
187 {
188 hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_MEDIUM_CURSOR);
189 SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
190
191 hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_SMALL_CURSOR);
192 SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0);
193 hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_LARGE_CURSOR);
194 SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0);
195 }
196 else if (pConInfo->ci.CursorSize == 100)
197 {
198 hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_LARGE_CURSOR);
199 SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
200
201 hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_SMALL_CURSOR);
202 SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0);
203 hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_MEDIUM_CURSOR);
204 SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0);
205 }
206
207 /* Update num buffers */
208 hDlgCtrl = GetDlgItem(hwndDlg, IDC_UPDOWN_NUM_BUFFER);
209 SendMessage(hDlgCtrl, UDM_SETRANGE, 0, MAKELONG((short)999, (short)1));
210 hDlgCtrl = GetDlgItem(hwndDlg, IDC_EDIT_NUM_BUFFER);
211 _stprintf(szBuffer, _T("%d"), pConInfo->ci.NumberOfHistoryBuffers);
212 SendMessage(hDlgCtrl, WM_SETTEXT, 0, (LPARAM)szBuffer);
213
214 /* Update buffer size */
215 hDlgCtrl = GetDlgItem(hwndDlg, IDC_UPDOWN_BUFFER_SIZE);
216 SendMessage(hDlgCtrl, UDM_SETRANGE, 0, MAKELONG((short)999, (short)1));
217 hDlgCtrl = GetDlgItem(hwndDlg, IDC_EDIT_BUFFER_SIZE);
218 _stprintf(szBuffer, _T("%d"), pConInfo->ci.HistoryBufferSize);
219 SendMessage(hDlgCtrl, WM_SETTEXT, 0, (LPARAM)szBuffer);
220
221 /* Update discard duplicates */
222 hDlgCtrl = GetDlgItem(hwndDlg, IDC_CHECK_DISCARD_DUPLICATES);
223 if (pConInfo->ci.HistoryNoDup)
224 SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
225 else
226 SendMessage(hDlgCtrl, BM_SETCHECK, (LPARAM)BST_UNCHECKED, 0);
227
228 /* Update full/window screen */
229 if (pConInfo->ci.FullScreen)
230 {
231 hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_DISPLAY_FULL);
232 SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
233
234 hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_DISPLAY_WINDOW);
235 SendMessage(hDlgCtrl, BM_SETCHECK, (LPARAM)BST_UNCHECKED, 0);
236 }
237 else
238 {
239 hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_DISPLAY_WINDOW);
240 SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
241
242 hDlgCtrl = GetDlgItem(hwndDlg, IDC_RADIO_DISPLAY_FULL);
243 SendMessage(hDlgCtrl, BM_SETCHECK, (LPARAM)BST_UNCHECKED, 0);
244 }
245
246 /* Update quick edit */
247 hDlgCtrl = GetDlgItem(hwndDlg, IDC_CHECK_QUICK_EDIT);
248 if (pConInfo->ci.QuickEdit)
249 SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
250 else
251 SendMessage(hDlgCtrl, BM_SETCHECK, (LPARAM)BST_UNCHECKED, 0);
252
253 /* Update insert mode */
254 hDlgCtrl = GetDlgItem(hwndDlg, IDC_CHECK_INSERT_MODE);
255 if (pConInfo->ci.InsertMode)
256 SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
257 else
258 SendMessage(hDlgCtrl, BM_SETCHECK, (LPARAM)BST_UNCHECKED, 0);
259 }