2 * PROJECT: ReactOS Applications Manager
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: Settings Dialog
5 * COPYRIGHT: Copyright 2009 Dmitry Chapyshev (dmitry@reactos.org)
6 * Copyright 2017 Alexander Shaposhnikov (sanchaez@reactos.org)
10 SETTINGS_INFO NewSettingsInfo
;
12 BOOL
ChooseFolder(HWND hwnd
)
16 ATL::CStringW szChooseFolderText
;
18 szChooseFolderText
.LoadStringW(IDS_CHOOSE_FOLDER_TEXT
);
20 ZeroMemory(&bi
, sizeof(bi
));
23 bi
.lpszTitle
= szChooseFolderText
.GetString();
24 bi
.ulFlags
= BIF_USENEWUI
| BIF_DONTGOBELOWDOMAIN
| BIF_RETURNONLYFSDIRS
| /* BIF_BROWSEFILEJUNCTIONS | */ BIF_VALIDATE
;
26 if (SUCCEEDED(CoInitializeEx(NULL
, COINIT_APARTMENTTHREADED
)))
30 LPITEMIDLIST lpItemList
= SHBrowseForFolderW(&bi
);
31 if (lpItemList
&& SHGetPathFromIDListW(lpItemList
, szBuf
.GetBuffer(MAX_PATH
)))
33 szBuf
.ReleaseBuffer();
36 SetDlgItemTextW(hwnd
, IDC_DOWNLOAD_DIR_EDIT
, szBuf
.GetString());
42 szBuf
.ReleaseBuffer();
45 CoTaskMemFree(lpItemList
);
52 BOOL
IsUrlValid(const WCHAR
* Url
)
54 URL_COMPONENTSW UrlComponmentInfo
= { 0 };
55 UrlComponmentInfo
.dwStructSize
= sizeof(UrlComponmentInfo
);
56 UrlComponmentInfo
.dwSchemeLength
= 1;
58 BOOL bSuccess
= InternetCrackUrlW(Url
, wcslen(Url
), 0, &UrlComponmentInfo
);
64 switch(UrlComponmentInfo
.nScheme
)
66 case INTERNET_SCHEME_HTTP
:
67 case INTERNET_SCHEME_HTTPS
:
68 case INTERNET_SCHEME_FTP
:
69 case INTERNET_SCHEME_FILE
:
80 inline BOOL
IsCheckedDlgItem(HWND hDlg
, INT nIDDlgItem
)
82 return (SendDlgItemMessageW(hDlg
, nIDDlgItem
, BM_GETCHECK
, 0, 0) == BST_CHECKED
) ? TRUE
: FALSE
;
85 VOID
InitSettingsControls(HWND hDlg
, PSETTINGS_INFO Info
)
87 SendDlgItemMessageW(hDlg
, IDC_SAVE_WINDOW_POS
, BM_SETCHECK
, Info
->bSaveWndPos
, 0);
88 SendDlgItemMessageW(hDlg
, IDC_UPDATE_AVLIST
, BM_SETCHECK
, Info
->bUpdateAtStart
, 0);
89 SendDlgItemMessageW(hDlg
, IDC_LOG_ENABLED
, BM_SETCHECK
, Info
->bLogEnabled
, 0);
90 SendDlgItemMessageW(hDlg
, IDC_DEL_AFTER_INSTALL
, BM_SETCHECK
, Info
->bDelInstaller
, 0);
92 SetWindowTextW(GetDlgItem(hDlg
, IDC_DOWNLOAD_DIR_EDIT
),
95 CheckRadioButton(hDlg
, IDC_PROXY_DEFAULT
, IDC_USE_PROXY
, IDC_PROXY_DEFAULT
+ Info
->Proxy
);
99 EnableWindow(GetDlgItem(hDlg
, IDC_PROXY_SERVER
), TRUE
);
100 EnableWindow(GetDlgItem(hDlg
, IDC_NO_PROXY_FOR
), TRUE
);
104 EnableWindow(GetDlgItem(hDlg
, IDC_PROXY_SERVER
), FALSE
);
105 EnableWindow(GetDlgItem(hDlg
, IDC_NO_PROXY_FOR
), FALSE
);
108 CheckRadioButton(hDlg
, IDC_SOURCE_DEFAULT
, IDC_USE_SOURCE
, Info
->bUseSource
? IDC_USE_SOURCE
: IDC_SOURCE_DEFAULT
);
110 EnableWindow(GetDlgItem(hDlg
, IDC_SOURCE_URL
), Info
->bUseSource
);
112 SetWindowTextW(GetDlgItem(hDlg
, IDC_SOURCE_URL
), Info
->szSourceURL
);
113 SetWindowTextW(GetDlgItem(hDlg
, IDC_PROXY_SERVER
), Info
->szProxyServer
);
114 SetWindowTextW(GetDlgItem(hDlg
, IDC_NO_PROXY_FOR
), Info
->szNoProxyFor
);
117 INT_PTR CALLBACK
SettingsDlgProc(HWND hDlg
, UINT Msg
, WPARAM wParam
, LPARAM lParam
)
123 NewSettingsInfo
= SettingsInfo
;
124 InitSettingsControls(hDlg
, &SettingsInfo
);
130 switch (LOWORD(wParam
))
136 case IDC_SAVE_WINDOW_POS
:
137 NewSettingsInfo
.bSaveWndPos
= IsCheckedDlgItem(hDlg
, IDC_SAVE_WINDOW_POS
);
140 case IDC_UPDATE_AVLIST
:
141 NewSettingsInfo
.bUpdateAtStart
= IsCheckedDlgItem(hDlg
, IDC_UPDATE_AVLIST
);
144 case IDC_LOG_ENABLED
:
145 NewSettingsInfo
.bLogEnabled
= IsCheckedDlgItem(hDlg
, IDC_LOG_ENABLED
);
148 case IDC_DEL_AFTER_INSTALL
:
149 NewSettingsInfo
.bDelInstaller
= IsCheckedDlgItem(hDlg
, IDC_DEL_AFTER_INSTALL
);
152 case IDC_SOURCE_DEFAULT
:
153 NewSettingsInfo
.bUseSource
= FALSE
;
154 EnableWindow(GetDlgItem(hDlg
, IDC_SOURCE_URL
), NewSettingsInfo
.bUseSource
);
158 NewSettingsInfo
.bUseSource
= TRUE
;
159 EnableWindow(GetDlgItem(hDlg
, IDC_SOURCE_URL
), NewSettingsInfo
.bUseSource
);
162 case IDC_PROXY_DEFAULT
:
163 NewSettingsInfo
.Proxy
= 0;
164 EnableWindow(GetDlgItem(hDlg
, IDC_PROXY_SERVER
), FALSE
);
165 EnableWindow(GetDlgItem(hDlg
, IDC_NO_PROXY_FOR
), FALSE
);
169 NewSettingsInfo
.Proxy
= 1;
170 EnableWindow(GetDlgItem(hDlg
, IDC_PROXY_SERVER
), FALSE
);
171 EnableWindow(GetDlgItem(hDlg
, IDC_NO_PROXY_FOR
), FALSE
);
175 NewSettingsInfo
.Proxy
= 2;
176 EnableWindow(GetDlgItem(hDlg
, IDC_PROXY_SERVER
), TRUE
);
177 EnableWindow(GetDlgItem(hDlg
, IDC_NO_PROXY_FOR
), TRUE
);
180 case IDC_DEFAULT_SETTINGS
:
181 FillDefaultSettings(&NewSettingsInfo
);
182 InitSettingsControls(hDlg
, &NewSettingsInfo
);
188 ATL::CStringW szSource
;
189 ATL::CStringW szProxy
;
190 ATL::CStringW szNoProxy
;
193 GetWindowTextW(GetDlgItem(hDlg
, IDC_DOWNLOAD_DIR_EDIT
),
194 szDir
.GetBuffer(MAX_PATH
), MAX_PATH
);
195 szDir
.ReleaseBuffer();
197 GetWindowTextW(GetDlgItem(hDlg
, IDC_SOURCE_URL
),
198 szSource
.GetBuffer(INTERNET_MAX_URL_LENGTH
), INTERNET_MAX_URL_LENGTH
);
199 szSource
.ReleaseBuffer();
201 GetWindowTextW(GetDlgItem(hDlg
, IDC_PROXY_SERVER
),
202 szProxy
.GetBuffer(MAX_PATH
), MAX_PATH
);
203 szProxy
.ReleaseBuffer();
204 ATL::CStringW::CopyChars(NewSettingsInfo
.szProxyServer
,
205 _countof(NewSettingsInfo
.szProxyServer
),
207 szProxy
.GetLength() + 1);
209 GetWindowTextW(GetDlgItem(hDlg
, IDC_NO_PROXY_FOR
),
210 szNoProxy
.GetBuffer(MAX_PATH
), MAX_PATH
);
211 szNoProxy
.ReleaseBuffer();
212 ATL::CStringW::CopyChars(NewSettingsInfo
.szNoProxyFor
,
213 _countof(NewSettingsInfo
.szNoProxyFor
),
214 szNoProxy
.GetString(),
215 szNoProxy
.GetLength() + 1);
217 dwAttr
= GetFileAttributesW(szDir
.GetString());
218 if (dwAttr
!= INVALID_FILE_ATTRIBUTES
&&
219 (dwAttr
& FILE_ATTRIBUTE_DIRECTORY
))
221 ATL::CStringW::CopyChars(NewSettingsInfo
.szDownloadDir
,
222 _countof(NewSettingsInfo
.szDownloadDir
),
224 szDir
.GetLength() + 1);
228 ATL::CStringW szMsgText
;
229 szMsgText
.LoadStringW(IDS_CHOOSE_FOLDER_ERROR
);
231 if (MessageBoxW(hDlg
, szMsgText
.GetString(), NULL
, MB_YESNO
) == IDYES
)
233 if (CreateDirectoryW(szDir
.GetString(), NULL
))
235 EndDialog(hDlg
, LOWORD(wParam
));
240 SetFocus(GetDlgItem(hDlg
, IDC_DOWNLOAD_DIR_EDIT
));
246 if(NewSettingsInfo
.bUseSource
&& !IsUrlValid(szSource
.GetString()))
248 ATL::CStringW szMsgText
;
249 szMsgText
.LoadStringW(IDS_URL_INVALID
);
251 MessageBoxW(hDlg
, szMsgText
.GetString(), NULL
, 0);
252 SetFocus(GetDlgItem(hDlg
, IDC_SOURCE_URL
));
257 ATL::CStringW::CopyChars(NewSettingsInfo
.szSourceURL
,
258 _countof(NewSettingsInfo
.szSourceURL
),
259 szSource
.GetString(),
260 szSource
.GetLength() + 1);
263 SettingsInfo
= NewSettingsInfo
;
264 SaveSettings(GetParent(hDlg
), &SettingsInfo
);
265 EndDialog(hDlg
, LOWORD(wParam
));
270 EndDialog(hDlg
, LOWORD(wParam
));
281 VOID
CreateSettingsDlg(HWND hwnd
)
284 MAKEINTRESOURCEW(IDD_SETTINGS_DIALOG
),