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