[RAPPS] Settings Dialog changes

- replaced `static` with unnamed namespace (static in this context was deprecated in C++03)
- fixed `Choose Folder` dialog text not loading the first time (trivial)

svn path=/branches/GSoC_2017/rapps/; revision=75810
This commit is contained in:
Alexander Shaposhnikov 2017-09-09 19:11:04 +00:00
parent 94e82f5f37
commit 840044411f

View file

@ -12,39 +12,38 @@
SETTINGS_INFO NewSettingsInfo; SETTINGS_INFO NewSettingsInfo;
#define IS_CHECKED(a, b) \ BOOL ChooseFolder(HWND hwnd)
a = (SendDlgItemMessageW(hDlg, b, BM_GETCHECK, 0, 0) == BST_CHECKED) ? TRUE : FALSE
BOOL
ChooseFolder(HWND hwnd)
{ {
BOOL bRet = FALSE; BOOL bRet = FALSE;
BROWSEINFOW bi; BROWSEINFOW bi;
ATL::CStringW szBuf; ATL::CStringW szChooseFolderText;
szBuf.LoadStringW(IDS_CHOOSE_FOLDER_TEXT); szChooseFolderText.LoadStringW(IDS_CHOOSE_FOLDER_TEXT);
ZeroMemory(&bi, sizeof(bi)); ZeroMemory(&bi, sizeof(bi));
bi.hwndOwner = hwnd; bi.hwndOwner = hwnd;
bi.pidlRoot = NULL; bi.pidlRoot = NULL;
bi.lpszTitle = szBuf.GetString(); bi.lpszTitle = szChooseFolderText.GetString();
bi.ulFlags = BIF_USENEWUI | BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | /* BIF_BROWSEFILEJUNCTIONS | */ BIF_VALIDATE; bi.ulFlags = BIF_USENEWUI | BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | /* BIF_BROWSEFILEJUNCTIONS | */ BIF_VALIDATE;
szBuf.Empty();
if (SUCCEEDED(CoInitializeEx(NULL, COINIT_APARTMENTTHREADED))) if (SUCCEEDED(CoInitializeEx(NULL, COINIT_APARTMENTTHREADED)))
{ {
ATL::CStringW szBuf;
LPITEMIDLIST lpItemList = SHBrowseForFolderW(&bi); LPITEMIDLIST lpItemList = SHBrowseForFolderW(&bi);
if (lpItemList && SHGetPathFromIDListW(lpItemList, szBuf.GetBuffer(MAX_PATH))) if (lpItemList && SHGetPathFromIDListW(lpItemList, szBuf.GetBuffer(MAX_PATH)))
{ {
szBuf.ReleaseBuffer(); szBuf.ReleaseBuffer();
if (!szBuf.IsEmpty()) if (!szBuf.IsEmpty())
{ {
SetDlgItemTextW(hwnd, IDC_DOWNLOAD_DIR_EDIT, szBuf); SetDlgItemTextW(hwnd, IDC_DOWNLOAD_DIR_EDIT, szBuf.GetString());
bRet = TRUE; bRet = TRUE;
} }
} }
else else
{
szBuf.ReleaseBuffer(); szBuf.ReleaseBuffer();
}
CoTaskMemFree(lpItemList); CoTaskMemFree(lpItemList);
CoUninitialize(); CoUninitialize();
@ -53,156 +52,164 @@ ChooseFolder(HWND hwnd)
return bRet; return bRet;
} }
static VOID InitSettingsControls(HWND hDlg, PSETTINGS_INFO Info) namespace
{ {
SendDlgItemMessageW(hDlg, IDC_SAVE_WINDOW_POS, BM_SETCHECK, Info->bSaveWndPos, 0); inline BOOL IsCheckedDlgItem(HWND hDlg, INT nIDDlgItem)
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);
SetWindowTextW(GetDlgItem(hDlg, IDC_DOWNLOAD_DIR_EDIT),
Info->szDownloadDir);
CheckRadioButton(hDlg, IDC_PROXY_DEFAULT, IDC_USE_PROXY, IDC_PROXY_DEFAULT + Info->Proxy);
if (IDC_PROXY_DEFAULT + Info->Proxy == IDC_USE_PROXY)
{ {
EnableWindow(GetDlgItem(hDlg, IDC_PROXY_SERVER), TRUE); return (SendDlgItemMessageW(hDlg, nIDDlgItem, BM_GETCHECK, 0, 0) == BST_CHECKED) ? TRUE : FALSE;
EnableWindow(GetDlgItem(hDlg, IDC_NO_PROXY_FOR), TRUE);
} }
SetWindowTextW(GetDlgItem(hDlg, IDC_PROXY_SERVER), Info->szProxyServer); VOID InitSettingsControls(HWND hDlg, PSETTINGS_INFO Info)
SetWindowTextW(GetDlgItem(hDlg, IDC_NO_PROXY_FOR), Info->szNoProxyFor); {
} 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);
static INT_PTR CALLBACK SettingsDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam) SetWindowTextW(GetDlgItem(hDlg, IDC_DOWNLOAD_DIR_EDIT),
{ Info->szDownloadDir);
switch (Msg)
{
case WM_INITDIALOG:
{
NewSettingsInfo = SettingsInfo;
InitSettingsControls(hDlg, &SettingsInfo);
}
break;
case WM_COMMAND: CheckRadioButton(hDlg, IDC_PROXY_DEFAULT, IDC_USE_PROXY, IDC_PROXY_DEFAULT + Info->Proxy);
{
switch (LOWORD(wParam)) if (IDC_PROXY_DEFAULT + Info->Proxy == IDC_USE_PROXY)
{ {
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_PROXY_SERVER), TRUE);
EnableWindow(GetDlgItem(hDlg, IDC_NO_PROXY_FOR), TRUE); EnableWindow(GetDlgItem(hDlg, IDC_NO_PROXY_FOR), TRUE);
break; }
case IDC_DEFAULT_SETTINGS: SetWindowTextW(GetDlgItem(hDlg, IDC_PROXY_SERVER), Info->szProxyServer);
FillDefaultSettings(&NewSettingsInfo); SetWindowTextW(GetDlgItem(hDlg, IDC_NO_PROXY_FOR), Info->szNoProxyFor);
InitSettingsControls(hDlg, &NewSettingsInfo); }
break;
case IDOK: INT_PTR CALLBACK SettingsDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch (Msg)
{ {
ATL::CStringW szDir; case WM_INITDIALOG:
ATL::CStringW szProxy; {
ATL::CStringW szNoProxy; NewSettingsInfo = SettingsInfo;
DWORD dwAttr; InitSettingsControls(hDlg, &SettingsInfo);
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))
{
EndDialog(hDlg, LOWORD(wParam));
}
}
else
{
SetFocus(GetDlgItem(hDlg, IDC_DOWNLOAD_DIR_EDIT));
break;
}
}
SettingsInfo = NewSettingsInfo;
SaveSettings(GetParent(hDlg));
EndDialog(hDlg, LOWORD(wParam));
} }
break; break;
case IDCANCEL: case WM_COMMAND:
EndDialog(hDlg, LOWORD(wParam)); {
break; switch (LOWORD(wParam))
} {
} case IDC_CHOOSE:
break; ChooseFolder(hDlg);
} break;
return FALSE; case IDC_SAVE_WINDOW_POS:
NewSettingsInfo.bSaveWndPos = IsCheckedDlgItem(hDlg, IDC_SAVE_WINDOW_POS);
break;
case IDC_UPDATE_AVLIST:
NewSettingsInfo.bUpdateAtStart = IsCheckedDlgItem(hDlg, IDC_UPDATE_AVLIST);
break;
case IDC_LOG_ENABLED:
NewSettingsInfo.bLogEnabled = IsCheckedDlgItem(hDlg, IDC_LOG_ENABLED);
break;
case IDC_DEL_AFTER_INSTALL:
NewSettingsInfo.bDelInstaller = IsCheckedDlgItem(hDlg, 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:
{
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))
{
EndDialog(hDlg, LOWORD(wParam));
}
}
else
{
SetFocus(GetDlgItem(hDlg, IDC_DOWNLOAD_DIR_EDIT));
break;
}
}
SettingsInfo = NewSettingsInfo;
SaveSettings(GetParent(hDlg));
EndDialog(hDlg, LOWORD(wParam));
}
break;
case IDCANCEL:
EndDialog(hDlg, LOWORD(wParam));
break;
}
}
break;
}
return FALSE;
}
} }
VOID CreateSettingsDlg(HWND hwnd) VOID CreateSettingsDlg(HWND hwnd)