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@reactos.org)
16 UpdateDialogElements(HWND hwndDlg
, PCONSOLE_PROPS pConInfo
);
20 OptionsProc(HWND hwndDlg
,
25 PCONSOLE_PROPS pConInfo
;
26 PGUI_CONSOLE_INFO GuiInfo
;
31 pConInfo
= (PCONSOLE_PROPS
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
37 pConInfo
= (PCONSOLE_PROPS
)((LPPROPSHEETPAGE
)lParam
)->lParam
;
38 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pConInfo
);
39 UpdateDialogElements(hwndDlg
, pConInfo
);
46 lppsn
= (LPPSHNOTIFY
) lParam
;
47 if (lppsn
->hdr
.code
== UDN_DELTAPOS
)
49 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_EDIT_BUFFER_SIZE
);
50 pConInfo
->ci
.HistoryBufferSize
= LOWORD(SendMessage(hDlgCtrl
, UDM_GETPOS
, 0, 0));
52 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_EDIT_NUM_BUFFER
);
53 pConInfo
->ci
.NumberOfHistoryBuffers
= LOWORD(SendMessage(hDlgCtrl
, UDM_GETPOS
, 0, 0));
54 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
56 else if (lppsn
->hdr
.code
== PSN_APPLY
)
58 if (!pConInfo
->AppliedConfig
)
60 return ApplyConsoleInfo(hwndDlg
, pConInfo
);
64 /* Options have already been applied */
65 SetWindowLongPtr(hwndDlg
, DWLP_MSGRESULT
, PSNRET_NOERROR
);
74 GuiInfo
= pConInfo
->TerminalInfo
.TermInfo
;
76 switch (LOWORD(wParam
))
78 case IDC_RADIO_SMALL_CURSOR
:
80 pConInfo
->ci
.CursorSize
= 25;
81 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
84 case IDC_RADIO_MEDIUM_CURSOR
:
86 pConInfo
->ci
.CursorSize
= 50;
87 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
90 case IDC_RADIO_LARGE_CURSOR
:
92 pConInfo
->ci
.CursorSize
= 100;
93 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
96 case IDC_RADIO_DISPLAY_WINDOW
:
98 GuiInfo
->FullScreen
= FALSE
;
99 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
102 case IDC_RADIO_DISPLAY_FULL
:
104 GuiInfo
->FullScreen
= TRUE
;
105 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
108 case IDC_CHECK_QUICK_EDIT
:
110 lResult
= SendMessage((HWND
)lParam
, BM_GETCHECK
, 0, 0);
111 if (lResult
== BST_CHECKED
)
113 pConInfo
->ci
.QuickEdit
= FALSE
;
114 SendMessage((HWND
)lParam
, BM_SETCHECK
, (WPARAM
)BST_UNCHECKED
, 0);
116 else if (lResult
== BST_UNCHECKED
)
118 pConInfo
->ci
.QuickEdit
= TRUE
;
119 SendMessage((HWND
)lParam
, BM_SETCHECK
, (WPARAM
)BST_CHECKED
, 0);
121 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
124 case IDC_CHECK_INSERT_MODE
:
126 lResult
= SendMessage((HWND
)lParam
, BM_GETCHECK
, 0, 0);
127 if (lResult
== BST_CHECKED
)
129 pConInfo
->ci
.InsertMode
= FALSE
;
130 SendMessage((HWND
)lParam
, BM_SETCHECK
, (WPARAM
)BST_UNCHECKED
, 0);
132 else if (lResult
== BST_UNCHECKED
)
134 pConInfo
->ci
.InsertMode
= TRUE
;
135 SendMessage((HWND
)lParam
, BM_SETCHECK
, (WPARAM
)BST_CHECKED
, 0);
137 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
140 case IDC_CHECK_DISCARD_DUPLICATES
:
142 lResult
= SendMessage((HWND
)lParam
, BM_GETCHECK
, 0, 0);
143 if (lResult
== BST_CHECKED
)
145 pConInfo
->ci
.HistoryNoDup
= FALSE
;
146 SendMessage((HWND
)lParam
, BM_SETCHECK
, (WPARAM
)BST_UNCHECKED
, 0);
148 else if (lResult
== BST_UNCHECKED
)
150 pConInfo
->ci
.HistoryNoDup
= TRUE
;
151 SendMessage((HWND
)lParam
, BM_SETCHECK
, (WPARAM
)BST_CHECKED
, 0);
153 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
170 UpdateDialogElements(HWND hwndDlg
, PCONSOLE_PROPS pConInfo
)
172 PGUI_CONSOLE_INFO GuiInfo
= pConInfo
->TerminalInfo
.TermInfo
;
174 TCHAR szBuffer
[MAX_PATH
];
176 /* Update cursor size */
177 if (pConInfo
->ci
.CursorSize
<= 25)
180 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_SMALL_CURSOR
);
181 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_CHECKED
, 0);
183 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_MEDIUM_CURSOR
);
184 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_UNCHECKED
, 0);
185 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_LARGE_CURSOR
);
186 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_UNCHECKED
, 0);
188 else if (pConInfo
->ci
.CursorSize
<= 50)
190 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_MEDIUM_CURSOR
);
191 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_CHECKED
, 0);
193 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_SMALL_CURSOR
);
194 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_UNCHECKED
, 0);
195 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_LARGE_CURSOR
);
196 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_UNCHECKED
, 0);
198 else /* if (pConInfo->ci.CursorSize <= 100) */
200 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_LARGE_CURSOR
);
201 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_CHECKED
, 0);
203 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_SMALL_CURSOR
);
204 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_UNCHECKED
, 0);
205 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_MEDIUM_CURSOR
);
206 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_UNCHECKED
, 0);
209 /* Update num buffers */
210 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_UPDOWN_NUM_BUFFER
);
211 SendMessage(hDlgCtrl
, UDM_SETRANGE
, 0, MAKELONG((short)999, (short)1));
212 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_EDIT_NUM_BUFFER
);
213 _stprintf(szBuffer
, _T("%d"), pConInfo
->ci
.NumberOfHistoryBuffers
);
214 SendMessage(hDlgCtrl
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
216 /* Update buffer size */
217 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_UPDOWN_BUFFER_SIZE
);
218 SendMessage(hDlgCtrl
, UDM_SETRANGE
, 0, MAKELONG((short)999, (short)1));
219 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_EDIT_BUFFER_SIZE
);
220 _stprintf(szBuffer
, _T("%d"), pConInfo
->ci
.HistoryBufferSize
);
221 SendMessage(hDlgCtrl
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
223 /* Update discard duplicates */
224 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_CHECK_DISCARD_DUPLICATES
);
225 if (pConInfo
->ci
.HistoryNoDup
)
226 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_CHECKED
, 0);
228 SendMessage(hDlgCtrl
, BM_SETCHECK
, (LPARAM
)BST_UNCHECKED
, 0);
230 /* Update full/window screen */
231 if (GuiInfo
->FullScreen
)
233 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_DISPLAY_FULL
);
234 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_CHECKED
, 0);
236 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_DISPLAY_WINDOW
);
237 SendMessage(hDlgCtrl
, BM_SETCHECK
, (LPARAM
)BST_UNCHECKED
, 0);
241 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_DISPLAY_WINDOW
);
242 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_CHECKED
, 0);
244 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_DISPLAY_FULL
);
245 SendMessage(hDlgCtrl
, BM_SETCHECK
, (LPARAM
)BST_UNCHECKED
, 0);
248 /* Update quick edit */
249 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_CHECK_QUICK_EDIT
);
250 if (pConInfo
->ci
.QuickEdit
)
251 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_CHECKED
, 0);
253 SendMessage(hDlgCtrl
, BM_SETCHECK
, (LPARAM
)BST_UNCHECKED
, 0);
255 /* Update insert mode */
256 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_CHECK_INSERT_MODE
);
257 if (pConInfo
->ci
.InsertMode
)
258 SendMessage(hDlgCtrl
, BM_SETCHECK
, (WPARAM
)BST_CHECKED
, 0);
260 SendMessage(hDlgCtrl
, BM_SETCHECK
, (LPARAM
)BST_UNCHECKED
, 0);