2015-04-22 16:53:55 +00:00
|
|
|
/*
|
2017-09-09 20:38:06 +00:00
|
|
|
* PROJECT: ReactOS Applications Manager
|
2020-07-31 19:57:35 +00:00
|
|
|
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
2017-09-09 20:38:06 +00:00
|
|
|
* PURPOSE: Settings Dialog
|
2023-02-28 00:00:29 +00:00
|
|
|
* COPYRIGHT: Copyright 2009 Dmitry Chapyshev (dmitry@reactos.org)
|
|
|
|
* Copyright 2017 Alexander Shaposhnikov (sanchaez@reactos.org)
|
2015-04-22 16:53:55 +00:00
|
|
|
*/
|
2017-09-10 23:44:22 +00:00
|
|
|
#include "rapps.h"
|
2015-04-22 16:53:55 +00:00
|
|
|
|
2025-02-23 18:27:02 +00:00
|
|
|
SETTINGS_INFO *g_pNewSettingsInfo;
|
2015-04-22 16:53:55 +00:00
|
|
|
|
2024-11-18 15:42:43 +00:00
|
|
|
static int CALLBACK
|
|
|
|
BrowseFolderCallback(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
|
|
|
|
{
|
|
|
|
switch (uMsg)
|
|
|
|
{
|
|
|
|
case BFFM_INITIALIZED:
|
|
|
|
SendMessageW(hwnd, BFFM_SETSELECTIONW, TRUE, lpData);
|
|
|
|
break;
|
|
|
|
case BFFM_VALIDATEFAILED:
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2025-02-23 18:27:02 +00:00
|
|
|
static BOOL
|
2023-02-20 18:30:02 +00:00
|
|
|
ChooseFolder(HWND hwnd)
|
2015-04-22 16:53:55 +00:00
|
|
|
{
|
|
|
|
BOOL bRet = FALSE;
|
2017-08-08 21:32:11 +00:00
|
|
|
BROWSEINFOW bi;
|
2023-02-20 18:30:02 +00:00
|
|
|
CStringW szChooseFolderText;
|
2015-04-22 16:53:55 +00:00
|
|
|
|
2017-09-09 19:11:04 +00:00
|
|
|
szChooseFolderText.LoadStringW(IDS_CHOOSE_FOLDER_TEXT);
|
2015-04-22 16:53:55 +00:00
|
|
|
|
|
|
|
ZeroMemory(&bi, sizeof(bi));
|
|
|
|
bi.hwndOwner = hwnd;
|
2017-07-10 21:02:24 +00:00
|
|
|
bi.pidlRoot = NULL;
|
2023-02-20 18:30:02 +00:00
|
|
|
bi.lpszTitle = szChooseFolderText;
|
|
|
|
bi.ulFlags =
|
|
|
|
BIF_USENEWUI | BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | /* BIF_BROWSEFILEJUNCTIONS | */ BIF_VALIDATE;
|
2015-04-22 16:53:55 +00:00
|
|
|
|
2024-11-18 15:42:43 +00:00
|
|
|
if (SUCCEEDED(CoInitialize(NULL)))
|
2015-04-22 16:53:55 +00:00
|
|
|
{
|
2024-11-18 15:42:43 +00:00
|
|
|
WCHAR szDir[MAX_PATH];
|
|
|
|
if (GetWindowTextW(GetDlgItem(hwnd, IDC_DOWNLOAD_DIR_EDIT), szDir, _countof(szDir)))
|
|
|
|
{
|
|
|
|
bi.lpfn = BrowseFolderCallback;
|
|
|
|
bi.lParam = (LPARAM)szDir;
|
|
|
|
}
|
2017-09-09 19:11:04 +00:00
|
|
|
|
2017-07-12 22:59:26 +00:00
|
|
|
LPITEMIDLIST lpItemList = SHBrowseForFolderW(&bi);
|
2024-11-18 15:42:43 +00:00
|
|
|
if (lpItemList && SHGetPathFromIDListW(lpItemList, szDir))
|
2015-04-22 16:53:55 +00:00
|
|
|
{
|
2024-11-18 15:42:43 +00:00
|
|
|
if (*szDir)
|
2015-04-22 16:53:55 +00:00
|
|
|
{
|
2024-11-18 15:42:43 +00:00
|
|
|
SetDlgItemTextW(hwnd, IDC_DOWNLOAD_DIR_EDIT, szDir);
|
2015-04-22 16:53:55 +00:00
|
|
|
bRet = TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
CoTaskMemFree(lpItemList);
|
|
|
|
CoUninitialize();
|
|
|
|
}
|
|
|
|
|
|
|
|
return bRet;
|
|
|
|
}
|
|
|
|
|
2025-02-23 18:27:02 +00:00
|
|
|
static BOOL
|
2023-02-20 18:30:02 +00:00
|
|
|
IsUrlValid(const WCHAR *Url)
|
2020-05-19 17:06:10 +00:00
|
|
|
{
|
2023-02-20 18:30:02 +00:00
|
|
|
URL_COMPONENTSW UrlComponmentInfo = {0};
|
2020-05-19 17:06:10 +00:00
|
|
|
UrlComponmentInfo.dwStructSize = sizeof(UrlComponmentInfo);
|
|
|
|
UrlComponmentInfo.dwSchemeLength = 1;
|
2021-09-13 01:33:14 +00:00
|
|
|
|
2020-05-19 17:06:10 +00:00
|
|
|
BOOL bSuccess = InternetCrackUrlW(Url, wcslen(Url), 0, &UrlComponmentInfo);
|
2023-02-20 18:30:02 +00:00
|
|
|
if (!bSuccess)
|
2020-05-19 17:06:10 +00:00
|
|
|
{
|
|
|
|
return FALSE;
|
|
|
|
}
|
2021-09-13 01:33:14 +00:00
|
|
|
|
2023-02-20 18:30:02 +00:00
|
|
|
switch (UrlComponmentInfo.nScheme)
|
2020-05-19 17:06:10 +00:00
|
|
|
{
|
|
|
|
case INTERNET_SCHEME_HTTP:
|
|
|
|
case INTERNET_SCHEME_HTTPS:
|
|
|
|
case INTERNET_SCHEME_FTP:
|
2020-09-06 21:13:21 +00:00
|
|
|
case INTERNET_SCHEME_FILE:
|
2023-02-20 18:30:02 +00:00
|
|
|
// supported
|
2020-05-19 17:06:10 +00:00
|
|
|
return TRUE;
|
2021-09-13 01:33:14 +00:00
|
|
|
|
2020-05-19 17:06:10 +00:00
|
|
|
default:
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-09-09 19:11:04 +00:00
|
|
|
namespace
|
2015-04-22 16:53:55 +00:00
|
|
|
{
|
2025-02-23 18:27:02 +00:00
|
|
|
static inline BOOL
|
2023-02-20 18:30:02 +00:00
|
|
|
IsCheckedDlgItem(HWND hDlg, INT nIDDlgItem)
|
|
|
|
{
|
2025-02-23 18:27:02 +00:00
|
|
|
return SendDlgItemMessageW(hDlg, nIDDlgItem, BM_GETCHECK, 0, 0) == BST_CHECKED;
|
2023-02-20 18:30:02 +00:00
|
|
|
}
|
2015-04-22 16:53:55 +00:00
|
|
|
|
2025-02-23 18:27:02 +00:00
|
|
|
static inline void
|
|
|
|
AdjustListViewHeader(HWND hWndList)
|
|
|
|
{
|
|
|
|
ListView_SetColumnWidth(hWndList, 0, LVSCW_AUTOSIZE_USEHEADER);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
HandleGeneralListItems(HWND hWndList, PSETTINGS_INFO Load, PSETTINGS_INFO Save)
|
|
|
|
{
|
|
|
|
PSETTINGS_INFO Info = Load ? Load : Save;
|
|
|
|
const struct {
|
|
|
|
WORD Id;
|
|
|
|
BOOL *Setting;
|
|
|
|
} Map[] = {
|
|
|
|
{ IDS_CFG_SAVE_WINDOW_POS, &Info->bSaveWndPos },
|
|
|
|
{ IDS_CFG_UPDATE_AVLIST, &Info->bUpdateAtStart },
|
|
|
|
{ IDS_CFG_LOG_ENABLED, &Info->bLogEnabled },
|
|
|
|
{ IDS_CFG_SMALL_ICONS, &Info->bSmallIcons },
|
|
|
|
};
|
|
|
|
|
|
|
|
if (Load)
|
|
|
|
{
|
|
|
|
UINT ExStyle = LVS_EX_CHECKBOXES | LVS_EX_LABELTIP;
|
|
|
|
ListView_SetExtendedListViewStyleEx(hWndList, ExStyle, ExStyle);
|
|
|
|
LVCOLUMN lvc;
|
|
|
|
lvc.mask = LVCF_TEXT | LVCF_SUBITEM;
|
|
|
|
lvc.iSubItem = 0;
|
|
|
|
lvc.pszText = const_cast<PWSTR>(L"");
|
|
|
|
ListView_InsertColumn(hWndList, 0, &lvc);
|
|
|
|
|
|
|
|
CStringW Name;
|
|
|
|
for (SIZE_T i = 0; i < _countof(Map); ++i)
|
|
|
|
{
|
|
|
|
LVITEMW Item;
|
|
|
|
Item.mask = LVIF_TEXT | LVIF_PARAM;
|
|
|
|
Item.iItem = 0x7fff;
|
|
|
|
Item.iSubItem = 0;
|
|
|
|
Item.lParam = Map[i].Id;
|
|
|
|
Name.LoadStringW(Map[i].Id);
|
|
|
|
Item.pszText = const_cast<PWSTR>(Name.GetString());
|
|
|
|
Item.iItem = ListView_InsertItem(hWndList, &Item);
|
|
|
|
ListView_SetCheckState(hWndList, Item.iItem, *Map[i].Setting);
|
|
|
|
}
|
|
|
|
ListView_SetItemState(hWndList, 0, -1, LVIS_FOCUSED | LVIS_SELECTED);
|
|
|
|
AdjustListViewHeader(hWndList);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
for (SIZE_T i = 0; i < _countof(Map); ++i)
|
|
|
|
{
|
|
|
|
LVFINDINFOW FindInfo = { LVFI_PARAM, NULL, Map[i].Id };
|
|
|
|
int Idx = ListView_FindItem(hWndList, -1, &FindInfo);
|
|
|
|
if (Idx >= 0)
|
|
|
|
*Map[i].Setting = ListView_GetCheckState(hWndList, Idx);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static VOID
|
2023-02-20 18:30:02 +00:00
|
|
|
InitSettingsControls(HWND hDlg, PSETTINGS_INFO Info)
|
|
|
|
{
|
2025-02-23 18:27:02 +00:00
|
|
|
HandleGeneralListItems(GetDlgItem(hDlg, IDC_GENERALLIST), Info, NULL);
|
2023-02-20 18:30:02 +00:00
|
|
|
SendDlgItemMessageW(hDlg, IDC_DEL_AFTER_INSTALL, BM_SETCHECK, Info->bDelInstaller, 0);
|
2015-04-22 16:53:55 +00:00
|
|
|
|
2024-11-18 15:42:43 +00:00
|
|
|
HWND hCtl = GetDlgItem(hDlg, IDC_DOWNLOAD_DIR_EDIT);
|
|
|
|
SetWindowTextW(hCtl, Info->szDownloadDir);
|
|
|
|
SendMessageW(hCtl, EM_LIMITTEXT, MAX_PATH - 1, 0);
|
2017-07-10 21:02:24 +00:00
|
|
|
|
2023-02-20 18:30:02 +00:00
|
|
|
CheckRadioButton(hDlg, IDC_PROXY_DEFAULT, IDC_USE_PROXY, IDC_PROXY_DEFAULT + Info->Proxy);
|
2017-07-10 21:02:24 +00:00
|
|
|
|
2023-02-20 18:30:02 +00:00
|
|
|
if (Info->Proxy == 2)
|
|
|
|
{
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_PROXY_SERVER), TRUE);
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_NO_PROXY_FOR), TRUE);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_PROXY_SERVER), FALSE);
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_NO_PROXY_FOR), FALSE);
|
|
|
|
}
|
2021-09-13 01:33:14 +00:00
|
|
|
|
2023-02-20 18:30:02 +00:00
|
|
|
CheckRadioButton(hDlg, IDC_SOURCE_DEFAULT, IDC_USE_SOURCE, Info->bUseSource ? IDC_USE_SOURCE : IDC_SOURCE_DEFAULT);
|
2021-09-13 01:33:14 +00:00
|
|
|
|
2023-02-20 18:30:02 +00:00
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_SOURCE_URL), Info->bUseSource);
|
2017-07-10 21:02:24 +00:00
|
|
|
|
2023-02-20 18:30:02 +00:00
|
|
|
SetWindowTextW(GetDlgItem(hDlg, IDC_SOURCE_URL), Info->szSourceURL);
|
|
|
|
SetWindowTextW(GetDlgItem(hDlg, IDC_PROXY_SERVER), Info->szProxyServer);
|
|
|
|
SetWindowTextW(GetDlgItem(hDlg, IDC_NO_PROXY_FOR), Info->szNoProxyFor);
|
|
|
|
}
|
2017-09-09 19:11:04 +00:00
|
|
|
|
2025-02-23 18:27:02 +00:00
|
|
|
static INT_PTR CALLBACK
|
2023-02-20 18:30:02 +00:00
|
|
|
SettingsDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam)
|
|
|
|
{
|
2025-02-23 18:27:02 +00:00
|
|
|
SETTINGS_INFO &NewSettingsInfo = *g_pNewSettingsInfo;
|
|
|
|
|
2023-02-20 18:30:02 +00:00
|
|
|
switch (Msg)
|
2017-09-09 19:11:04 +00:00
|
|
|
{
|
|
|
|
case WM_INITDIALOG:
|
|
|
|
InitSettingsControls(hDlg, &SettingsInfo);
|
2024-07-09 22:51:19 +00:00
|
|
|
return TRUE;
|
2017-07-10 21:02:24 +00:00
|
|
|
|
2025-02-23 18:27:02 +00:00
|
|
|
case WM_SETTINGCHANGE:
|
|
|
|
case WM_THEMECHANGED:
|
|
|
|
case WM_SYSCOLORCHANGE:
|
|
|
|
SendMessage(GetDlgItem(hDlg, IDC_GENERALLIST), Msg, wParam, lParam);
|
|
|
|
AdjustListViewHeader(GetDlgItem(hDlg, IDC_GENERALLIST));
|
|
|
|
break;
|
|
|
|
|
2017-09-09 19:11:04 +00:00
|
|
|
case WM_COMMAND:
|
2015-04-22 16:53:55 +00:00
|
|
|
{
|
2017-09-09 19:11:04 +00:00
|
|
|
switch (LOWORD(wParam))
|
2015-04-22 16:53:55 +00:00
|
|
|
{
|
2023-02-20 18:30:02 +00:00
|
|
|
case IDC_CHOOSE:
|
|
|
|
ChooseFolder(hDlg);
|
|
|
|
break;
|
2017-09-09 19:11:04 +00:00
|
|
|
|
2023-02-20 18:30:02 +00:00
|
|
|
case IDC_DEL_AFTER_INSTALL:
|
|
|
|
NewSettingsInfo.bDelInstaller = IsCheckedDlgItem(hDlg, IDC_DEL_AFTER_INSTALL);
|
|
|
|
break;
|
2017-09-09 19:11:04 +00:00
|
|
|
|
2023-02-20 18:30:02 +00:00
|
|
|
case IDC_SOURCE_DEFAULT:
|
|
|
|
NewSettingsInfo.bUseSource = FALSE;
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_SOURCE_URL), NewSettingsInfo.bUseSource);
|
|
|
|
break;
|
2021-09-13 01:33:14 +00:00
|
|
|
|
2023-02-20 18:30:02 +00:00
|
|
|
case IDC_USE_SOURCE:
|
|
|
|
NewSettingsInfo.bUseSource = TRUE;
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_SOURCE_URL), NewSettingsInfo.bUseSource);
|
|
|
|
break;
|
2021-09-13 01:33:14 +00:00
|
|
|
|
2023-02-20 18:30:02 +00:00
|
|
|
case IDC_PROXY_DEFAULT:
|
|
|
|
NewSettingsInfo.Proxy = 0;
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_PROXY_SERVER), FALSE);
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_NO_PROXY_FOR), FALSE);
|
|
|
|
break;
|
2017-09-09 19:11:04 +00:00
|
|
|
|
2023-02-20 18:30:02 +00:00
|
|
|
case IDC_NO_PROXY:
|
|
|
|
NewSettingsInfo.Proxy = 1;
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_PROXY_SERVER), FALSE);
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_NO_PROXY_FOR), FALSE);
|
|
|
|
break;
|
2017-09-09 19:11:04 +00:00
|
|
|
|
2023-02-20 18:30:02 +00:00
|
|
|
case IDC_USE_PROXY:
|
|
|
|
NewSettingsInfo.Proxy = 2;
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_PROXY_SERVER), TRUE);
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_NO_PROXY_FOR), TRUE);
|
|
|
|
break;
|
2017-09-09 19:11:04 +00:00
|
|
|
|
2023-02-20 18:30:02 +00:00
|
|
|
case IDC_DEFAULT_SETTINGS:
|
|
|
|
FillDefaultSettings(&NewSettingsInfo);
|
|
|
|
InitSettingsControls(hDlg, &NewSettingsInfo);
|
|
|
|
break;
|
2017-09-09 19:11:04 +00:00
|
|
|
|
2023-02-20 18:30:02 +00:00
|
|
|
case IDOK:
|
2015-04-22 16:53:55 +00:00
|
|
|
{
|
2025-02-23 18:27:02 +00:00
|
|
|
HandleGeneralListItems(GetDlgItem(hDlg, IDC_GENERALLIST), NULL, &NewSettingsInfo);
|
|
|
|
|
2023-02-20 18:30:02 +00:00
|
|
|
CStringW szDir;
|
|
|
|
CStringW szSource;
|
|
|
|
CStringW szProxy;
|
|
|
|
CStringW szNoProxy;
|
|
|
|
DWORD dwAttr;
|
|
|
|
|
|
|
|
GetWindowTextW(GetDlgItem(hDlg, IDC_DOWNLOAD_DIR_EDIT), szDir.GetBuffer(MAX_PATH), MAX_PATH);
|
|
|
|
szDir.ReleaseBuffer();
|
|
|
|
|
|
|
|
GetWindowTextW(
|
|
|
|
GetDlgItem(hDlg, IDC_SOURCE_URL), szSource.GetBuffer(INTERNET_MAX_URL_LENGTH),
|
|
|
|
INTERNET_MAX_URL_LENGTH);
|
|
|
|
szSource.ReleaseBuffer();
|
|
|
|
|
|
|
|
GetWindowTextW(GetDlgItem(hDlg, IDC_PROXY_SERVER), szProxy.GetBuffer(MAX_PATH), MAX_PATH);
|
|
|
|
szProxy.ReleaseBuffer();
|
|
|
|
CStringW::CopyChars(
|
|
|
|
NewSettingsInfo.szProxyServer, _countof(NewSettingsInfo.szProxyServer), szProxy,
|
|
|
|
szProxy.GetLength() + 1);
|
|
|
|
|
|
|
|
GetWindowTextW(GetDlgItem(hDlg, IDC_NO_PROXY_FOR), szNoProxy.GetBuffer(MAX_PATH), MAX_PATH);
|
|
|
|
szNoProxy.ReleaseBuffer();
|
|
|
|
CStringW::CopyChars(
|
|
|
|
NewSettingsInfo.szNoProxyFor, _countof(NewSettingsInfo.szNoProxyFor), szNoProxy,
|
|
|
|
szNoProxy.GetLength() + 1);
|
|
|
|
|
2025-03-19 11:24:52 +00:00
|
|
|
CStringW::CopyChars(
|
|
|
|
NewSettingsInfo.szDownloadDir, _countof(NewSettingsInfo.szDownloadDir), szDir,
|
|
|
|
szDir.GetLength() + 1);
|
2023-02-20 18:30:02 +00:00
|
|
|
dwAttr = GetFileAttributesW(szDir);
|
2025-03-19 11:24:52 +00:00
|
|
|
if (dwAttr == INVALID_FILE_ATTRIBUTES || !(dwAttr & FILE_ATTRIBUTE_DIRECTORY))
|
2017-09-09 19:11:04 +00:00
|
|
|
{
|
2023-02-20 18:30:02 +00:00
|
|
|
CStringW szMsgText;
|
|
|
|
szMsgText.LoadStringW(IDS_CHOOSE_FOLDER_ERROR);
|
|
|
|
|
|
|
|
if (MessageBoxW(hDlg, szMsgText, NULL, MB_YESNO) == IDYES)
|
|
|
|
{
|
2025-03-19 11:24:52 +00:00
|
|
|
if (!CreateDirectoryW(szDir, NULL))
|
2023-02-20 18:30:02 +00:00
|
|
|
{
|
2025-03-19 11:24:52 +00:00
|
|
|
ErrorBox(hDlg);
|
|
|
|
break;
|
2023-02-20 18:30:02 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
SetFocus(GetDlgItem(hDlg, IDC_DOWNLOAD_DIR_EDIT));
|
|
|
|
break;
|
|
|
|
}
|
2017-09-09 19:11:04 +00:00
|
|
|
}
|
2021-09-13 01:33:14 +00:00
|
|
|
|
2023-02-20 18:30:02 +00:00
|
|
|
if (NewSettingsInfo.bUseSource && !IsUrlValid(szSource))
|
|
|
|
{
|
|
|
|
CStringW szMsgText;
|
|
|
|
szMsgText.LoadStringW(IDS_URL_INVALID);
|
2021-09-13 01:33:14 +00:00
|
|
|
|
2021-12-29 00:05:00 +00:00
|
|
|
MessageBoxW(hDlg, szMsgText, NULL, MB_OK);
|
2023-02-20 18:30:02 +00:00
|
|
|
SetFocus(GetDlgItem(hDlg, IDC_SOURCE_URL));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
CStringW::CopyChars(
|
|
|
|
NewSettingsInfo.szSourceURL, _countof(NewSettingsInfo.szSourceURL), szSource,
|
|
|
|
szSource.GetLength() + 1);
|
|
|
|
}
|
2021-09-13 01:33:14 +00:00
|
|
|
|
2025-03-19 11:24:52 +00:00
|
|
|
if (SettingsInfo.bSmallIcons != NewSettingsInfo.bSmallIcons)
|
|
|
|
{
|
|
|
|
SendMessageW(hMainWnd, WM_SETTINGCHANGE, SPI_SETICONMETRICS, 0); // Note: WM_SETTINGCHANGE cannot be posted
|
|
|
|
PostMessageW(hMainWnd, WM_COMMAND, ID_REFRESH, 0);
|
|
|
|
}
|
2023-02-20 18:30:02 +00:00
|
|
|
SettingsInfo = NewSettingsInfo;
|
|
|
|
SaveSettings(GetParent(hDlg), &SettingsInfo);
|
|
|
|
EndDialog(hDlg, LOWORD(wParam));
|
2020-05-19 17:06:10 +00:00
|
|
|
}
|
2017-09-09 19:11:04 +00:00
|
|
|
break;
|
2023-02-20 18:30:02 +00:00
|
|
|
|
|
|
|
case IDCANCEL:
|
|
|
|
EndDialog(hDlg, LOWORD(wParam));
|
|
|
|
break;
|
2017-09-09 19:11:04 +00:00
|
|
|
}
|
2025-02-23 18:27:02 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case WM_NOTIFY:
|
|
|
|
{
|
|
|
|
NMITEMACTIVATE &nmia = *(NMITEMACTIVATE*)lParam;
|
|
|
|
if (wParam == IDC_GENERALLIST && nmia.hdr.code == NM_CLICK)
|
|
|
|
{
|
|
|
|
LVHITTESTINFO lvhti;
|
|
|
|
lvhti.pt = nmia.ptAction;
|
|
|
|
if (nmia.iItem != -1 && ListView_HitTest(nmia.hdr.hwndFrom, &lvhti) != -1)
|
|
|
|
{
|
|
|
|
if (lvhti.flags & (LVHT_ONITEMICON | LVHT_ONITEMLABEL))
|
|
|
|
ListView_SetCheckState(nmia.hdr.hwndFrom, nmia.iItem,
|
|
|
|
!ListView_GetCheckState(nmia.hdr.hwndFrom, nmia.iItem));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
2015-04-22 16:53:55 +00:00
|
|
|
}
|
2017-09-09 19:11:04 +00:00
|
|
|
}
|
2023-02-20 18:30:02 +00:00
|
|
|
|
|
|
|
return FALSE;
|
2015-04-22 16:53:55 +00:00
|
|
|
}
|
2023-02-20 18:30:02 +00:00
|
|
|
} // namespace
|
2015-04-22 16:53:55 +00:00
|
|
|
|
2023-02-20 18:30:02 +00:00
|
|
|
VOID
|
|
|
|
CreateSettingsDlg(HWND hwnd)
|
2015-04-22 16:53:55 +00:00
|
|
|
{
|
2025-02-23 18:27:02 +00:00
|
|
|
SETTINGS_INFO NewSettingsInfo = SettingsInfo;
|
|
|
|
g_pNewSettingsInfo = &NewSettingsInfo;
|
|
|
|
|
2023-02-20 18:30:02 +00:00
|
|
|
DialogBoxW(hInst, MAKEINTRESOURCEW(IDD_SETTINGS_DIALOG), hwnd, SettingsDlgProc);
|
2015-04-22 16:53:55 +00:00
|
|
|
}
|