2 * PROJECT: ReactOS Applications Manager
3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4 * FILE: base/applications/rapps/settingsdlg.cpp
5 * PURPOSE: Settings Dialog
6 * COPYRIGHT: Copyright 2009 Dmitry Chapyshev (dmitry@reactos.org)
7 * Copyright 2017 Alexander Shaposhnikov (chaez.san@gmail.com)
13 SETTINGS_INFO NewSettingsInfo
;
15 BOOL
ChooseFolder(HWND hwnd
)
19 ATL::CStringW szChooseFolderText
;
21 szChooseFolderText
.LoadStringW(IDS_CHOOSE_FOLDER_TEXT
);
23 ZeroMemory(&bi
, sizeof(bi
));
26 bi
.lpszTitle
= szChooseFolderText
.GetString();
27 bi
.ulFlags
= BIF_USENEWUI
| BIF_DONTGOBELOWDOMAIN
| BIF_RETURNONLYFSDIRS
| /* BIF_BROWSEFILEJUNCTIONS | */ BIF_VALIDATE
;
29 if (SUCCEEDED(CoInitializeEx(NULL
, COINIT_APARTMENTTHREADED
)))
33 LPITEMIDLIST lpItemList
= SHBrowseForFolderW(&bi
);
34 if (lpItemList
&& SHGetPathFromIDListW(lpItemList
, szBuf
.GetBuffer(MAX_PATH
)))
36 szBuf
.ReleaseBuffer();
39 SetDlgItemTextW(hwnd
, IDC_DOWNLOAD_DIR_EDIT
, szBuf
.GetString());
45 szBuf
.ReleaseBuffer();
48 CoTaskMemFree(lpItemList
);
57 inline BOOL
IsCheckedDlgItem(HWND hDlg
, INT nIDDlgItem
)
59 return (SendDlgItemMessageW(hDlg
, nIDDlgItem
, BM_GETCHECK
, 0, 0) == BST_CHECKED
) ? TRUE
: FALSE
;
62 VOID
InitSettingsControls(HWND hDlg
, PSETTINGS_INFO Info
)
64 SendDlgItemMessageW(hDlg
, IDC_SAVE_WINDOW_POS
, BM_SETCHECK
, Info
->bSaveWndPos
, 0);
65 SendDlgItemMessageW(hDlg
, IDC_UPDATE_AVLIST
, BM_SETCHECK
, Info
->bUpdateAtStart
, 0);
66 SendDlgItemMessageW(hDlg
, IDC_LOG_ENABLED
, BM_SETCHECK
, Info
->bLogEnabled
, 0);
67 SendDlgItemMessageW(hDlg
, IDC_DEL_AFTER_INSTALL
, BM_SETCHECK
, Info
->bDelInstaller
, 0);
69 SetWindowTextW(GetDlgItem(hDlg
, IDC_DOWNLOAD_DIR_EDIT
),
72 CheckRadioButton(hDlg
, IDC_PROXY_DEFAULT
, IDC_USE_PROXY
, IDC_PROXY_DEFAULT
+ Info
->Proxy
);
74 if (IDC_PROXY_DEFAULT
+ Info
->Proxy
== IDC_USE_PROXY
)
76 EnableWindow(GetDlgItem(hDlg
, IDC_PROXY_SERVER
), TRUE
);
77 EnableWindow(GetDlgItem(hDlg
, IDC_NO_PROXY_FOR
), TRUE
);
80 SetWindowTextW(GetDlgItem(hDlg
, IDC_PROXY_SERVER
), Info
->szProxyServer
);
81 SetWindowTextW(GetDlgItem(hDlg
, IDC_NO_PROXY_FOR
), Info
->szNoProxyFor
);
84 INT_PTR CALLBACK
SettingsDlgProc(HWND hDlg
, UINT Msg
, WPARAM wParam
, LPARAM lParam
)
90 NewSettingsInfo
= SettingsInfo
;
91 InitSettingsControls(hDlg
, &SettingsInfo
);
97 switch (LOWORD(wParam
))
103 case IDC_SAVE_WINDOW_POS
:
104 NewSettingsInfo
.bSaveWndPos
= IsCheckedDlgItem(hDlg
, IDC_SAVE_WINDOW_POS
);
107 case IDC_UPDATE_AVLIST
:
108 NewSettingsInfo
.bUpdateAtStart
= IsCheckedDlgItem(hDlg
, IDC_UPDATE_AVLIST
);
111 case IDC_LOG_ENABLED
:
112 NewSettingsInfo
.bLogEnabled
= IsCheckedDlgItem(hDlg
, IDC_LOG_ENABLED
);
115 case IDC_DEL_AFTER_INSTALL
:
116 NewSettingsInfo
.bDelInstaller
= IsCheckedDlgItem(hDlg
, IDC_DEL_AFTER_INSTALL
);
119 case IDC_PROXY_DEFAULT
:
120 NewSettingsInfo
.Proxy
= 0;
121 EnableWindow(GetDlgItem(hDlg
, IDC_PROXY_SERVER
), FALSE
);
122 EnableWindow(GetDlgItem(hDlg
, IDC_NO_PROXY_FOR
), FALSE
);
126 NewSettingsInfo
.Proxy
= 1;
127 EnableWindow(GetDlgItem(hDlg
, IDC_PROXY_SERVER
), FALSE
);
128 EnableWindow(GetDlgItem(hDlg
, IDC_NO_PROXY_FOR
), FALSE
);
132 NewSettingsInfo
.Proxy
= 2;
133 EnableWindow(GetDlgItem(hDlg
, IDC_PROXY_SERVER
), TRUE
);
134 EnableWindow(GetDlgItem(hDlg
, IDC_NO_PROXY_FOR
), TRUE
);
137 case IDC_DEFAULT_SETTINGS
:
138 FillDefaultSettings(&NewSettingsInfo
);
139 InitSettingsControls(hDlg
, &NewSettingsInfo
);
145 ATL::CStringW szProxy
;
146 ATL::CStringW szNoProxy
;
149 GetWindowTextW(GetDlgItem(hDlg
, IDC_DOWNLOAD_DIR_EDIT
),
150 szDir
.GetBuffer(MAX_PATH
), MAX_PATH
);
151 szDir
.ReleaseBuffer();
153 GetWindowTextW(GetDlgItem(hDlg
, IDC_PROXY_SERVER
),
154 szProxy
.GetBuffer(MAX_PATH
), MAX_PATH
);
155 szProxy
.ReleaseBuffer();
156 ATL::CStringW::CopyChars(NewSettingsInfo
.szProxyServer
,
157 _countof(NewSettingsInfo
.szProxyServer
),
159 szProxy
.GetLength() + 1);
161 GetWindowTextW(GetDlgItem(hDlg
, IDC_NO_PROXY_FOR
),
162 szNoProxy
.GetBuffer(MAX_PATH
), MAX_PATH
);
163 szNoProxy
.ReleaseBuffer();
164 ATL::CStringW::CopyChars(NewSettingsInfo
.szNoProxyFor
,
165 _countof(NewSettingsInfo
.szNoProxyFor
),
166 szNoProxy
.GetString(),
167 szNoProxy
.GetLength() + 1);
169 dwAttr
= GetFileAttributesW(szDir
.GetString());
170 if (dwAttr
!= INVALID_FILE_ATTRIBUTES
&&
171 (dwAttr
& FILE_ATTRIBUTE_DIRECTORY
))
173 ATL::CStringW::CopyChars(NewSettingsInfo
.szDownloadDir
,
174 _countof(NewSettingsInfo
.szDownloadDir
),
176 szDir
.GetLength() + 1);
180 ATL::CStringW szMsgText
;
181 szMsgText
.LoadStringW(IDS_CHOOSE_FOLDER_ERROR
);
183 if (MessageBoxW(hDlg
, szMsgText
.GetString(), NULL
, MB_YESNO
) == IDYES
)
185 if (CreateDirectoryW(szDir
.GetString(), NULL
))
187 EndDialog(hDlg
, LOWORD(wParam
));
192 SetFocus(GetDlgItem(hDlg
, IDC_DOWNLOAD_DIR_EDIT
));
197 SettingsInfo
= NewSettingsInfo
;
198 SaveSettings(GetParent(hDlg
));
199 EndDialog(hDlg
, LOWORD(wParam
));
204 EndDialog(hDlg
, LOWORD(wParam
));
215 VOID
CreateSettingsDlg(HWND hwnd
)
218 MAKEINTRESOURCEW(IDD_SETTINGS_DIALOG
),