123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284 |
- #include "./setupDetails.h"
- #include "../common.h"
- #include "../resource.h"
- #include "../api__ml_online.h"
- #include "../../winamp/commandLink.h"
- #include "./setupGroup.h"
- #include <commctrl.h>
- #include <strsafe.h>
- #ifndef IDC_HELPLINK
- #define IDC_HELPLINK 10000
- #endif
- struct GROUPDETAILSCREATEPARAM
- {
- GROUPDETAILSCREATEPARAM() : group(NULL), name(NULL) {}
- SetupGroup *group;
- LPCWSTR name;
- };
- struct GROUPDETAILS
- {
- GROUPDETAILS() : group(NULL), name(NULL), fontTitle(NULL) {}
- SetupGroup *group;
- LPWSTR name;
- HFONT fontTitle;
- };
- #define GetDetails(__hwnd) ((GROUPDETAILS*)GetPropW((__hwnd), MAKEINTATOM(DETAILS_PROP)))
- static INT_PTR WINAPI GroupDetails_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- HWND SetupDetails_CreateGroupView(HWND hParent, LPCWSTR pszName, SetupGroup *group)
- {
- GROUPDETAILSCREATEPARAM param;
- param.group = group;
- param.name = pszName;
- return WASABI_API_CREATEDIALOGPARAMW(IDD_SETUP_GROUPDETAILS, hParent, GroupDetails_DialogProc, (LPARAM)¶m);
- }
- static void GroupDetails_SetTitle(HWND hwnd, SetupGroup *group)
- {
- HWND hTitle = GetDlgItem(hwnd, IDC_TITLE);
- if (NULL == hTitle) return;
- WCHAR szBuffer[128] = {0};
- if (NULL == group ||
- FAILED(group->GetLongName(szBuffer, ARRAYSIZE(szBuffer))))
- {
- szBuffer[0] = L'\0';
- }
-
- GROUPDETAILS *details = GetDetails(hwnd);
- if (NULL != details && NULL == details->fontTitle)
- {
- HFONT dialogFont = (HFONT)SendMessage(hwnd, WM_GETFONT, 0, 0L);
- LOGFONT lf;
- if (0 != GetObject(dialogFont, sizeof(LOGFONT), &lf))
- {
- StringCchCopy(lf.lfFaceName, ARRAYSIZE(lf.lfFaceName), L"Arial Bold");
- lf.lfWidth = 0;
- lf.lfWeight = FW_DONTCARE;
- lf.lfHeight += (lf.lfHeight < 0) ? -2 : +2;
- lf.lfQuality = 5/*ANTIALIASED_QUALITY*/;
- details->fontTitle = CreateFontIndirect(&lf);
- }
- if (NULL != details->fontTitle)
- {
- SendMessage(hTitle, WM_SETFONT, (WPARAM)details->fontTitle, 0L);
- }
- }
- SetWindowText(hTitle, szBuffer);
- InvalidateRect(hTitle, NULL, TRUE);
- }
- static void GroupDetails_SetDescription(HWND hwnd, SetupGroup *group)
- {
- HWND hDescription = GetDlgItem(hwnd, IDC_DESCRIPTION);
- if (NULL == hDescription) return;
- WCHAR szBuffer[4096] = {0};
- if (NULL == group ||
- FAILED(group->GetDescription(szBuffer, ARRAYSIZE(szBuffer))))
- {
- szBuffer[0] = L'\0';
- }
-
- SetupDetails_SetDescription(hDescription, szBuffer);
- }
- static BOOL GroupDetails_ShowHelp(HWND hwnd)
- {
- INT result = (INT)(INT_PTR)ShellExecuteW(hwnd, L"open",
- L"https://help.winamp.com/hc/articles/8112753225364-Online-Services-Security",
- NULL, NULL, SW_SHOWNORMAL);
- return (result > 32);
- }
- static void GroupDetails_UpdateLayout(HWND hwnd, BOOL fRedraw)
- {
- RECT clientRect, rect;
- if(FALSE == GetClientRect(hwnd, &clientRect))
- return;
- UINT commonFlags = SWP_NOACTIVATE | SWP_NOZORDER;
- if (FALSE != fRedraw) commonFlags |= SWP_NOREDRAW;
- LONG bottomLine = clientRect.bottom;
- HWND hControl;
- SIZE linkSize;
- RECT linkMargins;
- if (NULL != (hControl = GetDlgItem(hwnd, IDC_HELPLINK)) &&
- CommandLink_GetIdealSize(hControl, &linkSize))
- {
- if (!CommandLink_GetMargins(hControl, &linkMargins))
- SetRectEmpty(&linkMargins);
-
- if (linkSize.cy > 0)
- bottomLine -= linkSize.cy;
- SetWindowPos(hControl, NULL, clientRect.left + 4, bottomLine, linkSize.cx, linkSize.cy, commonFlags);
- }
- else
- {
- ZeroMemory(&linkSize, sizeof(linkSize));
- SetRectEmpty(&linkMargins);
- }
- if (NULL != (hControl = GetDlgItem(hwnd, IDC_HELPTEXT)))
- {
- LONG x = clientRect.left + 4 + linkSize.cx/* - linkMargins.right*/;
- LONG y = 0;
- HDC hdc = GetDCEx(hControl, NULL, DCX_CACHE | DCX_WINDOW | DCX_NORESETATTRS);
- if (NULL != hdc)
- {
- HFONT font = (HFONT)SendMessage(hControl, WM_GETFONT, 0, 0L);
- HFONT originalFont = (HFONT)SelectObject(hdc, font);
- TEXTMETRICW tm;
- if (GetTextMetricsW(hdc, &tm))
- y = tm.tmHeight;
- SelectObject(hdc, originalFont);
- ReleaseDC(hControl, hdc);
- }
-
- SetWindowPos(hControl, NULL, x, clientRect.bottom - linkMargins.bottom - y, clientRect.right - x, y, commonFlags);
- }
-
- if (NULL != (hControl = GetDlgItem(hwnd, IDC_DESCRIPTION)) &&
- FALSE != GetWindowRect(hControl, &rect))
- {
- MapWindowPoints(HWND_DESKTOP, hwnd, (POINT*)&rect, 2);
- SetWindowPos(hControl, NULL, rect.left, rect.right, rect.right - rect.left, bottomLine - rect.top,
- commonFlags | SWP_NOMOVE);
- }
- }
- static INT_PTR GroupDetails_OnInitDialog(HWND hwnd, HWND hFocus, LPARAM lParam)
- {
- GROUPDETAILSCREATEPARAM *param = (GROUPDETAILSCREATEPARAM*)lParam;
- GROUPDETAILS *details = (GROUPDETAILS*)calloc(1, sizeof(GROUPDETAILS));
- if (NULL == details) return FALSE;
- if (!SetProp(hwnd, MAKEINTATOM(DETAILS_PROP), details))
- return FALSE;
- if (NULL != param)
- {
- if (NULL != param->group)
- {
- details->group = param->group;
- details->group->AddRef();
- }
- details->name = Plugin_CopyString(param->name);
- }
- HINSTANCE winampInstance = (NULL != WASABI_API_APP) ? WASABI_API_APP->main_gethInstance() : NULL;
- if (NULL != winampInstance)
- {
- WCHAR szBuffer[256] = {0};
- WASABI_API_LNGSTRINGW_BUF(IDS_CLICKHERE, szBuffer, ARRAYSIZE(szBuffer));
- HWND hLink = CreateWindowExW(WS_EX_NOPARENTNOTIFY | WS_EX_TRANSPARENT, NWC_COMMANDLINKW, szBuffer,
- WS_VISIBLE | WS_CHILD | WS_TABSTOP | CLS_ALWAYSUNDERLINE | CLS_DEFAULTCOLORS /* | CLS_HOTTRACK */,
- 0, 0, 0, 0, hwnd, (HMENU)IDC_HELPLINK, winampInstance, NULL);
- if (NULL != hLink)
- {
- SendMessageW(hLink, WM_SETFONT, (WPARAM)SendMessageW(hwnd, WM_GETFONT, 0, 0L), 0L);
- }
- }
- GroupDetails_UpdateLayout(hwnd, FALSE);
- if (NULL != param)
- {
- GroupDetails_SetTitle(hwnd, param->group);
- GroupDetails_SetDescription(hwnd, param->group);
- }
-
- return FALSE;
- }
- static void GroupDetails_OnDestroy(HWND hwnd)
- {
- GROUPDETAILS *details = GetDetails(hwnd);
- RemoveProp(hwnd, MAKEINTATOM(DETAILS_PROP));
-
- if (NULL != details)
- {
- if (NULL != details->group)
- details->group->Release();
- if (NULL != details->fontTitle)
- DeleteObject(details->fontTitle);
- Plugin_FreeString(details->name);
- }
- }
- static INT_PTR GroupDetails_OnDialogColor(HWND hwnd, HDC hdc, HWND hControl)
- {
- HWND hParent = GetAncestor(hwnd, GA_PARENT);
- if (NULL != hParent && hParent != hwnd)
- return (INT_PTR)SendMessage(hParent, WM_CTLCOLORDLG, (WPARAM)hdc, (LPARAM)hControl);
- return 0;
- }
- static INT_PTR GroupDetails_OnStaticColor(HWND hwnd, HDC hdc, HWND hControl)
- {
- HWND hParent = GetAncestor(hwnd, GA_PARENT);
- if (NULL != hParent && hParent != hwnd)
- return (INT_PTR)SendMessage(hParent, WM_CTLCOLORSTATIC, (WPARAM)hdc, (LPARAM)hControl);
- return 0;
- }
- static LRESULT GroupDetails_OnNotify(HWND hwnd, INT controlId, NMHDR *pnmh)
- {
- switch(controlId)
- {
- case IDC_HELPLINK:
- if (NM_CLICK == pnmh->code)
- GroupDetails_ShowHelp(hwnd);
- return TRUE;
- }
- return 0;
- }
- static BOOL GroupDetails_OnGetUniqueName(HWND hwnd, LPWSTR pszBuffer, UINT cchBufferMax)
- {
- if (NULL == pszBuffer)
- return FALSE;
- GROUPDETAILS *details = GetDetails(hwnd);
- return SUCCEEDED(StringCchCopy(pszBuffer, cchBufferMax,
- (NULL != details && NULL != details->name) ? details->name : L""));
- }
- static INT_PTR WINAPI GroupDetails_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- switch(uMsg)
- {
- case WM_INITDIALOG: return GroupDetails_OnInitDialog(hwnd, (HWND)wParam, lParam);
- case WM_DESTROY: GroupDetails_OnDestroy(hwnd); break;
- case WM_CTLCOLORDLG: return GroupDetails_OnDialogColor(hwnd, (HDC)wParam, (HWND)lParam);
- case WM_CTLCOLORSTATIC: return GroupDetails_OnStaticColor(hwnd, (HDC)wParam, (HWND)lParam);
- case WM_NOTIFY: MSGRESULT(hwnd, GroupDetails_OnNotify(hwnd, (INT)wParam, (NMHDR*)lParam));
- case NSDM_GETUNIQUENAME: MSGRESULT(hwnd, GroupDetails_OnGetUniqueName(hwnd, (LPWSTR)lParam, (UINT)wParam));
- }
- return 0;
- }
|