/*
- * PROJECT: ReactOS Applications Manager
- * LICENSE: GPL - See COPYING in the top level directory
- * FILE: base/applications/rapps/settingsdlg.cpp
- * PURPOSE: Settings Dialog
- * PROGRAMMERS: Dmitry Chapyshev (dmitry@reactos.org)
+ * PROJECT: ReactOS Applications Manager
+ * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
+ * FILE: base/applications/rapps/settingsdlg.cpp
+ * PURPOSE: Settings Dialog
+ * COPYRIGHT: Copyright 2009 Dmitry Chapyshev (dmitry@reactos.org)
+ * Copyright 2017 Alexander Shaposhnikov (sanchaez@reactos.org)
*/
+#include "defines.h"
-#include "rapps.h"
+#include "dialogs.h"
SETTINGS_INFO NewSettingsInfo;
-#define IS_CHECKED(a, b) \
- a = (SendDlgItemMessage(hDlg, b, BM_GETCHECK, 0, 0) == BST_CHECKED) ? TRUE : FALSE
-
-BOOL
-ChooseFolder(HWND hwnd)
+BOOL ChooseFolder(HWND hwnd)
{
BOOL bRet = FALSE;
- BROWSEINFO bi;
- WCHAR szPath[MAX_PATH], szBuf[MAX_STR_LEN];
+ BROWSEINFOW bi;
+ ATL::CStringW szChooseFolderText;
- LoadStringW(hInst, IDS_CHOOSE_FOLDER_TEXT, szBuf, _countof(szBuf));
+ szChooseFolderText.LoadStringW(IDS_CHOOSE_FOLDER_TEXT);
ZeroMemory(&bi, sizeof(bi));
bi.hwndOwner = hwnd;
- bi.pidlRoot = NULL;
- bi.lpszTitle = szBuf;
- bi.ulFlags = BIF_USENEWUI | BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | /* BIF_BROWSEFILEJUNCTIONS | */ BIF_VALIDATE;
+ bi.pidlRoot = NULL;
+ bi.lpszTitle = szChooseFolderText.GetString();
+ bi.ulFlags = BIF_USENEWUI | BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | /* BIF_BROWSEFILEJUNCTIONS | */ BIF_VALIDATE;
if (SUCCEEDED(CoInitializeEx(NULL, COINIT_APARTMENTTHREADED)))
{
- LPITEMIDLIST lpItemList = SHBrowseForFolder(&bi);
- if (lpItemList && SHGetPathFromIDList(lpItemList, szPath))
+ ATL::CStringW szBuf;
+
+ LPITEMIDLIST lpItemList = SHBrowseForFolderW(&bi);
+ if (lpItemList && SHGetPathFromIDListW(lpItemList, szBuf.GetBuffer(MAX_PATH)))
{
- if (szPath[0] != 0)
+ szBuf.ReleaseBuffer();
+ if (!szBuf.IsEmpty())
{
- SetDlgItemTextW(hwnd, IDC_DOWNLOAD_DIR_EDIT, szPath);
+ SetDlgItemTextW(hwnd, IDC_DOWNLOAD_DIR_EDIT, szBuf.GetString());
bRet = TRUE;
}
}
+ else
+ {
+ szBuf.ReleaseBuffer();
+ }
CoTaskMemFree(lpItemList);
CoUninitialize();
return bRet;
}
-static VOID
-InitSettingsControls(HWND hDlg, PSETTINGS_INFO Info)
+namespace
{
- SendDlgItemMessage(hDlg, IDC_SAVE_WINDOW_POS, BM_SETCHECK, Info->bSaveWndPos, 0);
- SendDlgItemMessage(hDlg, IDC_UPDATE_AVLIST, BM_SETCHECK, Info->bUpdateAtStart, 0);
- SendDlgItemMessage(hDlg, IDC_LOG_ENABLED, BM_SETCHECK, Info->bLogEnabled, 0);
- SendDlgItemMessage(hDlg, IDC_DEL_AFTER_INSTALL, BM_SETCHECK, Info->bDelInstaller, 0);
+ inline BOOL IsCheckedDlgItem(HWND hDlg, INT nIDDlgItem)
+ {
+ return (SendDlgItemMessageW(hDlg, nIDDlgItem, BM_GETCHECK, 0, 0) == BST_CHECKED) ? TRUE : FALSE;
+ }
- SetWindowTextW(GetDlgItem(hDlg, IDC_DOWNLOAD_DIR_EDIT),
- Info->szDownloadDir);
+ VOID InitSettingsControls(HWND hDlg, PSETTINGS_INFO Info)
+ {
+ SendDlgItemMessageW(hDlg, IDC_SAVE_WINDOW_POS, BM_SETCHECK, Info->bSaveWndPos, 0);
+ SendDlgItemMessageW(hDlg, IDC_UPDATE_AVLIST, BM_SETCHECK, Info->bUpdateAtStart, 0);
+ SendDlgItemMessageW(hDlg, IDC_LOG_ENABLED, BM_SETCHECK, Info->bLogEnabled, 0);
+ SendDlgItemMessageW(hDlg, IDC_DEL_AFTER_INSTALL, BM_SETCHECK, Info->bDelInstaller, 0);
- CheckRadioButton(hDlg, IDC_PROXY_DEFAULT, IDC_USE_PROXY, IDC_PROXY_DEFAULT+Info->Proxy);
+ SetWindowTextW(GetDlgItem(hDlg, IDC_DOWNLOAD_DIR_EDIT),
+ Info->szDownloadDir);
- if(IDC_PROXY_DEFAULT + Info->Proxy == IDC_USE_PROXY)
- {
- EnableWindow(GetDlgItem(hDlg, IDC_PROXY_SERVER), TRUE);
- EnableWindow(GetDlgItem(hDlg, IDC_NO_PROXY_FOR), TRUE);
- }
+ CheckRadioButton(hDlg, IDC_PROXY_DEFAULT, IDC_USE_PROXY, IDC_PROXY_DEFAULT + Info->Proxy);
- SetWindowTextW(GetDlgItem(hDlg, IDC_PROXY_SERVER), Info->szProxyServer);
- SetWindowTextW(GetDlgItem(hDlg, IDC_NO_PROXY_FOR), Info->szNoProxyFor);
-}
+ if (IDC_PROXY_DEFAULT + Info->Proxy == IDC_USE_PROXY)
+ {
+ EnableWindow(GetDlgItem(hDlg, IDC_PROXY_SERVER), TRUE);
+ EnableWindow(GetDlgItem(hDlg, IDC_NO_PROXY_FOR), TRUE);
+ }
-static
-INT_PTR CALLBACK
-SettingsDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam)
-{
- switch (Msg)
+ SetWindowTextW(GetDlgItem(hDlg, IDC_PROXY_SERVER), Info->szProxyServer);
+ SetWindowTextW(GetDlgItem(hDlg, IDC_NO_PROXY_FOR), Info->szNoProxyFor);
+ }
+
+ INT_PTR CALLBACK SettingsDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam)
{
+ switch (Msg)
+ {
case WM_INITDIALOG:
{
NewSettingsInfo = SettingsInfo;
{
switch (LOWORD(wParam))
{
- case IDC_CHOOSE:
- ChooseFolder(hDlg);
- break;
-
- case IDC_SAVE_WINDOW_POS:
- IS_CHECKED(NewSettingsInfo.bSaveWndPos, IDC_SAVE_WINDOW_POS);
- break;
-
- case IDC_UPDATE_AVLIST:
- IS_CHECKED(NewSettingsInfo.bUpdateAtStart, IDC_UPDATE_AVLIST);
- break;
-
- case IDC_LOG_ENABLED:
- IS_CHECKED(NewSettingsInfo.bLogEnabled, IDC_LOG_ENABLED);
- break;
-
- case IDC_DEL_AFTER_INSTALL:
- IS_CHECKED(NewSettingsInfo.bDelInstaller, IDC_DEL_AFTER_INSTALL);
- break;
-
- case IDC_PROXY_DEFAULT:
- NewSettingsInfo.Proxy = 0;
- EnableWindow(GetDlgItem(hDlg, IDC_PROXY_SERVER), FALSE);
- EnableWindow(GetDlgItem(hDlg, IDC_NO_PROXY_FOR), FALSE);
- break;
-
- case IDC_NO_PROXY:
- NewSettingsInfo.Proxy = 1;
- EnableWindow(GetDlgItem(hDlg, IDC_PROXY_SERVER), FALSE);
- EnableWindow(GetDlgItem(hDlg, IDC_NO_PROXY_FOR), FALSE);
- break;
-
- case IDC_USE_PROXY:
- NewSettingsInfo.Proxy = 2;
- EnableWindow(GetDlgItem(hDlg, IDC_PROXY_SERVER), TRUE);
- EnableWindow(GetDlgItem(hDlg, IDC_NO_PROXY_FOR), TRUE);
- break;
-
- case IDC_DEFAULT_SETTINGS:
- FillDefaultSettings(&NewSettingsInfo);
- InitSettingsControls(hDlg, &NewSettingsInfo);
- break;
-
- case IDOK:
- {
- WCHAR szDir[MAX_PATH];
- WCHAR szProxy[MAX_PATH];
- WCHAR szNoProxy[MAX_PATH];
- DWORD dwAttr;
+ case IDC_CHOOSE:
+ ChooseFolder(hDlg);
+ break;
- GetWindowTextW(GetDlgItem(hDlg, IDC_DOWNLOAD_DIR_EDIT),
- szDir, MAX_PATH);
+ case IDC_SAVE_WINDOW_POS:
+ NewSettingsInfo.bSaveWndPos = IsCheckedDlgItem(hDlg, IDC_SAVE_WINDOW_POS);
+ break;
- GetWindowTextW(GetDlgItem(hDlg, IDC_PROXY_SERVER),
- szProxy, MAX_PATH);
- StringCbCopyW(NewSettingsInfo.szProxyServer, sizeof(NewSettingsInfo.szProxyServer), szProxy);
+ case IDC_UPDATE_AVLIST:
+ NewSettingsInfo.bUpdateAtStart = IsCheckedDlgItem(hDlg, IDC_UPDATE_AVLIST);
+ break;
- GetWindowTextW(GetDlgItem(hDlg, IDC_NO_PROXY_FOR),
- szNoProxy, MAX_PATH);
- StringCbCopyW(NewSettingsInfo.szNoProxyFor, sizeof(NewSettingsInfo.szNoProxyFor), szNoProxy);
+ case IDC_LOG_ENABLED:
+ NewSettingsInfo.bLogEnabled = IsCheckedDlgItem(hDlg, IDC_LOG_ENABLED);
+ break;
- dwAttr = GetFileAttributesW(szDir);
- if (dwAttr != INVALID_FILE_ATTRIBUTES &&
- (dwAttr & FILE_ATTRIBUTE_DIRECTORY))
- {
- StringCbCopyW(NewSettingsInfo.szDownloadDir,
- sizeof(NewSettingsInfo.szDownloadDir),
- szDir);
- }
- else
- {
- WCHAR szMsgText[MAX_STR_LEN];
+ case IDC_DEL_AFTER_INSTALL:
+ NewSettingsInfo.bDelInstaller = IsCheckedDlgItem(hDlg, IDC_DEL_AFTER_INSTALL);
+ break;
- LoadStringW(hInst,
- IDS_CHOOSE_FOLDER_ERROR,
- szMsgText, _countof(szMsgText));
+ case IDC_PROXY_DEFAULT:
+ NewSettingsInfo.Proxy = 0;
+ EnableWindow(GetDlgItem(hDlg, IDC_PROXY_SERVER), FALSE);
+ EnableWindow(GetDlgItem(hDlg, IDC_NO_PROXY_FOR), FALSE);
+ break;
- if (MessageBoxW(hDlg, szMsgText, NULL, MB_YESNO) == IDYES)
- {
- if (CreateDirectoryW(szDir, NULL))
- {
- EndDialog(hDlg, LOWORD(wParam));
- }
- }
- else
+ case IDC_NO_PROXY:
+ NewSettingsInfo.Proxy = 1;
+ EnableWindow(GetDlgItem(hDlg, IDC_PROXY_SERVER), FALSE);
+ EnableWindow(GetDlgItem(hDlg, IDC_NO_PROXY_FOR), FALSE);
+ break;
+
+ case IDC_USE_PROXY:
+ NewSettingsInfo.Proxy = 2;
+ EnableWindow(GetDlgItem(hDlg, IDC_PROXY_SERVER), TRUE);
+ EnableWindow(GetDlgItem(hDlg, IDC_NO_PROXY_FOR), TRUE);
+ break;
+
+ case IDC_DEFAULT_SETTINGS:
+ FillDefaultSettings(&NewSettingsInfo);
+ InitSettingsControls(hDlg, &NewSettingsInfo);
+ break;
+
+ case IDOK:
+ {
+ ATL::CStringW szDir;
+ ATL::CStringW szProxy;
+ ATL::CStringW szNoProxy;
+ DWORD dwAttr;
+
+ GetWindowTextW(GetDlgItem(hDlg, IDC_DOWNLOAD_DIR_EDIT),
+ szDir.GetBuffer(MAX_PATH), MAX_PATH);
+ szDir.ReleaseBuffer();
+
+ GetWindowTextW(GetDlgItem(hDlg, IDC_PROXY_SERVER),
+ szProxy.GetBuffer(MAX_PATH), MAX_PATH);
+ szProxy.ReleaseBuffer();
+ ATL::CStringW::CopyChars(NewSettingsInfo.szProxyServer,
+ _countof(NewSettingsInfo.szProxyServer),
+ szProxy.GetString(),
+ szProxy.GetLength() + 1);
+
+ GetWindowTextW(GetDlgItem(hDlg, IDC_NO_PROXY_FOR),
+ szNoProxy.GetBuffer(MAX_PATH), MAX_PATH);
+ szNoProxy.ReleaseBuffer();
+ ATL::CStringW::CopyChars(NewSettingsInfo.szNoProxyFor,
+ _countof(NewSettingsInfo.szNoProxyFor),
+ szNoProxy.GetString(),
+ szNoProxy.GetLength() + 1);
+
+ dwAttr = GetFileAttributesW(szDir.GetString());
+ if (dwAttr != INVALID_FILE_ATTRIBUTES &&
+ (dwAttr & FILE_ATTRIBUTE_DIRECTORY))
+ {
+ ATL::CStringW::CopyChars(NewSettingsInfo.szDownloadDir,
+ _countof(NewSettingsInfo.szDownloadDir),
+ szDir.GetString(),
+ szDir.GetLength() + 1);
+ }
+ else
+ {
+ ATL::CStringW szMsgText;
+ szMsgText.LoadStringW(IDS_CHOOSE_FOLDER_ERROR);
+
+ if (MessageBoxW(hDlg, szMsgText.GetString(), NULL, MB_YESNO) == IDYES)
+ {
+ if (CreateDirectoryW(szDir.GetString(), NULL))
{
- SetFocus(GetDlgItem(hDlg, IDC_DOWNLOAD_DIR_EDIT));
- break;
+ EndDialog(hDlg, LOWORD(wParam));
}
}
-
- SettingsInfo = NewSettingsInfo;
- SaveSettings(GetParent(hDlg));
- EndDialog(hDlg, LOWORD(wParam));
+ else
+ {
+ SetFocus(GetDlgItem(hDlg, IDC_DOWNLOAD_DIR_EDIT));
+ break;
+ }
}
- break;
- case IDCANCEL:
- EndDialog(hDlg, LOWORD(wParam));
- break;
+ SettingsInfo = NewSettingsInfo;
+ SaveSettings(GetParent(hDlg));
+ EndDialog(hDlg, LOWORD(wParam));
+ }
+ break;
+
+ case IDCANCEL:
+ EndDialog(hDlg, LOWORD(wParam));
+ break;
}
}
break;
- }
+ }
- return FALSE;
+ return FALSE;
+ }
}
-VOID
-CreateSettingsDlg(HWND hwnd)
+VOID CreateSettingsDlg(HWND hwnd)
{
DialogBoxW(hInst,
MAKEINTRESOURCEW(IDD_SETTINGS_DIALOG),