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: Options dialog
6 * PROGRAMMERS: Johannes Anderwald (johannes.anderwald@reactos.org)
15 UpdateDialogElements(HWND hwndDlg
, PCONSOLE_PROPS pConInfo
)
17 PGUI_CONSOLE_INFO GuiInfo
= pConInfo
->TerminalInfo
.TermInfo
;
20 /* Update cursor size */
21 if (pConInfo
->ci
.CursorSize
<= 25)
24 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_SMALL_CURSOR
);
25 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_CHECKED
, 0);
27 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_MEDIUM_CURSOR
);
28 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_UNCHECKED
, 0);
29 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_LARGE_CURSOR
);
30 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_UNCHECKED
, 0);
32 else if (pConInfo
->ci
.CursorSize
<= 50)
34 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_MEDIUM_CURSOR
);
35 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_CHECKED
, 0);
37 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_SMALL_CURSOR
);
38 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_UNCHECKED
, 0);
39 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_LARGE_CURSOR
);
40 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_UNCHECKED
, 0);
42 else /* if (pConInfo->ci.CursorSize <= 100) */
44 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_LARGE_CURSOR
);
45 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_CHECKED
, 0);
47 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_SMALL_CURSOR
);
48 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_UNCHECKED
, 0);
49 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_MEDIUM_CURSOR
);
50 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_UNCHECKED
, 0);
53 /* Update num buffers */
54 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_UPDOWN_NUM_BUFFER
);
55 SendMessage(hDlgCtrl
, UDM_SETRANGE
, 0, MAKELONG(999, 1));
56 SetDlgItemInt(hwndDlg
, IDC_EDIT_NUM_BUFFER
, pConInfo
->ci
.NumberOfHistoryBuffers
, FALSE
);
58 /* Update buffer size */
59 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_UPDOWN_BUFFER_SIZE
);
60 SendMessage(hDlgCtrl
, UDM_SETRANGE
, 0, MAKELONG(999, 1));
61 SetDlgItemInt(hwndDlg
, IDC_EDIT_BUFFER_SIZE
, pConInfo
->ci
.HistoryBufferSize
, FALSE
);
63 /* Update discard duplicates */
64 CheckDlgButton(hwndDlg
, IDC_CHECK_DISCARD_DUPLICATES
,
65 pConInfo
->ci
.HistoryNoDup
? BST_CHECKED
: BST_UNCHECKED
);
67 /* Update full/window screen */
68 if (GuiInfo
->FullScreen
)
70 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_DISPLAY_FULL
);
71 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_CHECKED
, 0);
73 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_DISPLAY_WINDOW
);
74 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_UNCHECKED
, 0);
78 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_DISPLAY_WINDOW
);
79 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_CHECKED
, 0);
81 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_DISPLAY_FULL
);
82 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_UNCHECKED
, 0);
85 /* Update quick edit */
86 CheckDlgButton(hwndDlg
, IDC_CHECK_QUICK_EDIT
,
87 pConInfo
->ci
.QuickEdit
? BST_CHECKED
: BST_UNCHECKED
);
89 /* Update insert mode */
90 CheckDlgButton(hwndDlg
, IDC_CHECK_INSERT_MODE
,
91 pConInfo
->ci
.InsertMode
? BST_CHECKED
: BST_UNCHECKED
);
96 OptionsProc(HWND hwndDlg
,
101 PCONSOLE_PROPS pConInfo
;
102 PGUI_CONSOLE_INFO GuiInfo
;
104 pConInfo
= (PCONSOLE_PROPS
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
110 pConInfo
= (PCONSOLE_PROPS
)((LPPROPSHEETPAGE
)lParam
)->lParam
;
111 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pConInfo
);
112 UpdateDialogElements(hwndDlg
, pConInfo
);
118 LPNMUPDOWN lpnmud
= (LPNMUPDOWN
)lParam
;
119 LPPSHNOTIFY lppsn
= (LPPSHNOTIFY
)lParam
;
121 // if (!pConInfo) break;
123 if (lppsn
->hdr
.code
== UDN_DELTAPOS
)
125 if (lppsn
->hdr
.idFrom
== IDC_UPDOWN_BUFFER_SIZE
)
127 lpnmud
->iPos
= min(max(lpnmud
->iPos
+ lpnmud
->iDelta
, 1), 999);
128 pConInfo
->ci
.HistoryBufferSize
= lpnmud
->iPos
;
129 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
131 else if (lppsn
->hdr
.idFrom
== IDC_UPDOWN_NUM_BUFFER
)
133 lpnmud
->iPos
= min(max(lpnmud
->iPos
+ lpnmud
->iDelta
, 1), 999);
134 pConInfo
->ci
.NumberOfHistoryBuffers
= lpnmud
->iPos
;
135 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
138 else if (lppsn
->hdr
.code
== PSN_APPLY
)
140 if (!pConInfo
->AppliedConfig
)
142 return ApplyConsoleInfo(hwndDlg
, pConInfo
);
146 /* Options have already been applied */
147 SetWindowLongPtr(hwndDlg
, DWLP_MSGRESULT
, PSNRET_NOERROR
);
158 if (!pConInfo
) break;
159 GuiInfo
= pConInfo
->TerminalInfo
.TermInfo
;
161 switch (LOWORD(wParam
))
163 case IDC_RADIO_SMALL_CURSOR
:
165 pConInfo
->ci
.CursorSize
= 25;
166 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
169 case IDC_RADIO_MEDIUM_CURSOR
:
171 pConInfo
->ci
.CursorSize
= 50;
172 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
175 case IDC_RADIO_LARGE_CURSOR
:
177 pConInfo
->ci
.CursorSize
= 100;
178 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
181 case IDC_RADIO_DISPLAY_WINDOW
:
183 GuiInfo
->FullScreen
= FALSE
;
184 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
187 case IDC_RADIO_DISPLAY_FULL
:
189 GuiInfo
->FullScreen
= TRUE
;
190 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
193 case IDC_CHECK_QUICK_EDIT
:
195 lResult
= SendMessage((HWND
)lParam
, BM_GETCHECK
, 0, 0);
196 if (lResult
== BST_CHECKED
)
198 pConInfo
->ci
.QuickEdit
= FALSE
;
199 SendMessage((HWND
)lParam
, BM_SETCHECK
, (WPARAM
)BST_UNCHECKED
, 0);
201 else if (lResult
== BST_UNCHECKED
)
203 pConInfo
->ci
.QuickEdit
= TRUE
;
204 SendMessage((HWND
)lParam
, BM_SETCHECK
, (WPARAM
)BST_CHECKED
, 0);
206 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
209 case IDC_CHECK_INSERT_MODE
:
211 lResult
= SendMessage((HWND
)lParam
, BM_GETCHECK
, 0, 0);
212 if (lResult
== BST_CHECKED
)
214 pConInfo
->ci
.InsertMode
= FALSE
;
215 SendMessage((HWND
)lParam
, BM_SETCHECK
, (WPARAM
)BST_UNCHECKED
, 0);
217 else if (lResult
== BST_UNCHECKED
)
219 pConInfo
->ci
.InsertMode
= TRUE
;
220 SendMessage((HWND
)lParam
, BM_SETCHECK
, (WPARAM
)BST_CHECKED
, 0);
222 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
225 case IDC_CHECK_DISCARD_DUPLICATES
:
227 lResult
= SendMessage((HWND
)lParam
, BM_GETCHECK
, 0, 0);
228 if (lResult
== BST_CHECKED
)
230 pConInfo
->ci
.HistoryNoDup
= FALSE
;
231 SendMessage((HWND
)lParam
, BM_SETCHECK
, (WPARAM
)BST_UNCHECKED
, 0);
233 else if (lResult
== BST_UNCHECKED
)
235 pConInfo
->ci
.HistoryNoDup
= TRUE
;
236 SendMessage((HWND
)lParam
, BM_SETCHECK
, (WPARAM
)BST_CHECKED
, 0);
238 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
241 case IDC_EDIT_BUFFER_SIZE
:
243 if (HIWORD(wParam
) == EN_KILLFOCUS
)
247 sizeBuff
= GetDlgItemInt(hwndDlg
, IDC_EDIT_BUFFER_SIZE
, NULL
, FALSE
);
248 sizeBuff
= min(max(sizeBuff
, 1), 999);
250 pConInfo
->ci
.HistoryBufferSize
= sizeBuff
;
251 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
255 case IDC_EDIT_NUM_BUFFER
:
257 if (HIWORD(wParam
) == EN_KILLFOCUS
)
261 numBuff
= GetDlgItemInt(hwndDlg
, IDC_EDIT_NUM_BUFFER
, NULL
, FALSE
);
262 numBuff
= min(max(numBuff
, 1), 999);
264 pConInfo
->ci
.NumberOfHistoryBuffers
= numBuff
;
265 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);