Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
392
Src/Winamp/setup/spage_feedback.cpp
Normal file
392
Src/Winamp/setup/spage_feedback.cpp
Normal file
|
@ -0,0 +1,392 @@
|
|||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
#include "main.h"
|
||||
#include "./spage_feedback.h"
|
||||
#include "./setup_resource.h"
|
||||
#include "../nu/ns_wc.h"
|
||||
#include "../nu/AutoChar.h"
|
||||
#include "../nu/AutoWide.h"
|
||||
#include "./langutil.h"
|
||||
|
||||
|
||||
#define FF_ALLOWFEEDBACK 0x0001
|
||||
#define FF_ANNOUNCEMENTS 0x0010
|
||||
#define FF_STATISTICS 0x0020
|
||||
|
||||
#define GENDER_UNKNOWN 0
|
||||
#define GENDER_MALE 1
|
||||
#define GENDER_FEMALE 2
|
||||
|
||||
setup_page_feedback::setup_page_feedback() : ref(1), hwnd(NULL)
|
||||
{
|
||||
szEmail[0] = 0x00;
|
||||
szCountry[0] = 0x00;
|
||||
gender = GENDER_UNKNOWN;
|
||||
flags = FF_ALLOWFEEDBACK | FF_ANNOUNCEMENTS | FF_STATISTICS;
|
||||
}
|
||||
|
||||
setup_page_feedback::~setup_page_feedback()
|
||||
{
|
||||
}
|
||||
|
||||
size_t setup_page_feedback::AddRef()
|
||||
{
|
||||
return ++ref;
|
||||
}
|
||||
|
||||
size_t setup_page_feedback::Release()
|
||||
{
|
||||
if (1 == ref)
|
||||
{
|
||||
delete(this);
|
||||
return 0;
|
||||
}
|
||||
return --ref;
|
||||
}
|
||||
|
||||
HRESULT setup_page_feedback::GetName(bool bShort, const wchar_t **pszName)
|
||||
{
|
||||
if (bShort)
|
||||
{
|
||||
static wchar_t szShortName[32] = {0};
|
||||
*pszName = (*szShortName) ? szShortName : getStringW(IDS_PAGE_FEEDBACK, szShortName, sizeof(szShortName)/sizeof(wchar_t));
|
||||
}
|
||||
else
|
||||
{
|
||||
static wchar_t szLongName[64] = {0};
|
||||
*pszName = (*szLongName) ? szLongName : getStringW(IDS_PAGE_FEEDBACK_LONG, szLongName, sizeof(szLongName)/sizeof(wchar_t));
|
||||
}
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT setup_page_feedback::Save(HWND hwndText)
|
||||
{
|
||||
HRESULT hr(S_OK);
|
||||
|
||||
int r, s;
|
||||
char data[8192] = {0};
|
||||
char str[32] = {0};
|
||||
|
||||
if (FF_ALLOWFEEDBACK & flags)
|
||||
{
|
||||
s = GetPrivateProfileIntW(L"WinampReg", L"RegDataLen", 0, INI_FILE);
|
||||
if (s > 0) GetPrivateProfileStructA("WinampReg", "RegData2", data, s, INI_FILEA);
|
||||
if (!SetMetricsValueW(data, MAKEINTRESOURCEA(METRICS_EMAIL), szEmail, -1)) hr = E_UNEXPECTED;
|
||||
if (!SetMetricsValueW(data, MAKEINTRESOURCEA(METRICS_COUNTRY), szCountry, lstrlenW(szCountry)*sizeof(wchar_t))) hr = E_UNEXPECTED;
|
||||
if (!SetMetricsValueW(data, MAKEINTRESOURCEA(METRICS_GENDER), &gender, sizeof(gender))) hr = E_UNEXPECTED;
|
||||
r = (FF_ANNOUNCEMENTS == (FF_ANNOUNCEMENTS & flags));
|
||||
if (!SetMetricsValueW(data, MAKEINTRESOURCEA(METRICS_ANNOUNCEMENTS), &r, sizeof(r))) hr = E_UNEXPECTED;
|
||||
config_newverchk2 = (FF_STATISTICS == (FF_STATISTICS & flags));
|
||||
}
|
||||
else config_newverchk2 = 0;
|
||||
|
||||
WritePrivateProfileStringW(AutoWide(app_name), L"newverchk2", (config_newverchk2) ? L"1" : L"0", INI_FILE);
|
||||
|
||||
s = GetMetricsSize(data);
|
||||
|
||||
StringCchPrintfA(str, 32, "%d", s);
|
||||
WritePrivateProfileStringA("WinampReg", "RegDataLen", (s) ? str : NULL, INI_FILEA);
|
||||
WritePrivateProfileStructA("WinampReg", "RegData2", (s) ? data : NULL, s, INI_FILEA);
|
||||
|
||||
if (hwnd) UpdateUI();
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT setup_page_feedback::Revert(void)
|
||||
{
|
||||
HRESULT hr(S_OK);
|
||||
char data[8192] = {0, };
|
||||
DWORD sendinfo;
|
||||
|
||||
flags = FF_ALLOWFEEDBACK;
|
||||
|
||||
if (config_newverchk2) flags |= FF_STATISTICS;
|
||||
|
||||
int s = GetPrivateProfileIntW(L"WinampReg", L"RegDataLen", 0, INI_FILE);
|
||||
if (s > 0) GetPrivateProfileStructA("WinampReg", "RegData2", data, s, INI_FILEA);
|
||||
|
||||
GetMetricsValueW(data, MAKEINTRESOURCEA(METRICS_EMAIL), szEmail, sizeof(szEmail));
|
||||
GetMetricsValueW(data, MAKEINTRESOURCEA(METRICS_COUNTRY), szCountry, sizeof(szCountry));
|
||||
GetMetricsValueW(data, MAKEINTRESOURCEA(METRICS_GENDER), &gender, sizeof(gender));
|
||||
GetMetricsValueW(data, MAKEINTRESOURCEA(METRICS_ANNOUNCEMENTS), &sendinfo, sizeof(sendinfo));
|
||||
if (sendinfo) flags |= FF_ANNOUNCEMENTS;
|
||||
if (hwnd) UpdateUI();
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT setup_page_feedback::IsDirty(void)
|
||||
{
|
||||
char data[8192] = {0};
|
||||
wchar_t szTest[256] = {0};
|
||||
int r;
|
||||
DWORD lcid;
|
||||
|
||||
lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT);
|
||||
if (0 != (FF_STATISTICS & flags) != !!config_newverchk2) return S_OK;
|
||||
|
||||
int s = GetPrivateProfileIntW(L"WinampReg", L"RegDataLen", 0, INI_FILE);
|
||||
if (s > 0) GetPrivateProfileStructA("WinampReg", "RegData2", data, s, INI_FILEA);
|
||||
|
||||
if (!GetMetricsValueW(data, MAKEINTRESOURCEA(METRICS_EMAIL), szTest, sizeof(szTest))) return E_UNEXPECTED;
|
||||
r = CompareStringW(lcid, NORM_IGNORECASE, szTest, -1, szEmail, -1);
|
||||
if (0 == r) return E_UNEXPECTED;
|
||||
if (CSTR_EQUAL != r) return S_OK;
|
||||
|
||||
if (!GetMetricsValueW(data, MAKEINTRESOURCEA(METRICS_COUNTRY), szTest, sizeof(szTest))) return E_UNEXPECTED;
|
||||
r = CompareStringW(lcid, NORM_IGNORECASE, szTest, -1, szCountry, -1);
|
||||
if (0 == r) return E_UNEXPECTED;
|
||||
if (CSTR_EQUAL != r) return S_OK;
|
||||
r = 0;
|
||||
if (!GetMetricsValueW(data, MAKEINTRESOURCEA(METRICS_GENDER), &r, sizeof(r))) return E_UNEXPECTED;
|
||||
if (r != gender) return S_OK;
|
||||
r = 0;
|
||||
if (!GetMetricsValueW(data, MAKEINTRESOURCEA(METRICS_ANNOUNCEMENTS), &r, sizeof(r))) return E_UNEXPECTED;
|
||||
if (r != (FF_ANNOUNCEMENTS == (FF_ANNOUNCEMENTS & flags))) return S_OK;
|
||||
|
||||
return S_FALSE;
|
||||
}
|
||||
|
||||
HRESULT setup_page_feedback::Validate(void)
|
||||
{
|
||||
wchar_t *p;
|
||||
|
||||
if (0 == (FF_ALLOWFEEDBACK & flags) || !*szEmail) return S_OK;
|
||||
for (p = szEmail; *p != 0x00 && *p != L'@'; p = CharNextW(p));
|
||||
|
||||
if (L'@' != *p || 0x00 == *CharNextW(p))
|
||||
{
|
||||
WCHAR szTitle[128] = {0};
|
||||
HWND hwndTop, hwndTest;
|
||||
hwndTop = hwnd;
|
||||
while(NULL != (hwndTest = GetParent(hwndTop))) hwndTop = hwndTest;
|
||||
GetWindowTextW(hwndTop, szTitle, sizeof(szTitle)/sizeof(WCHAR));
|
||||
if (hwndTop)
|
||||
{
|
||||
MessageBoxW(hwndTop, getStringW(IDS_PAGE_INCORRECT_EMAIL_ADDRESS, NULL, 0),
|
||||
szTitle, MB_OK | MB_ICONERROR);
|
||||
return S_FALSE;
|
||||
}
|
||||
}
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT setup_page_feedback::CreateView(HWND hwndParent, HWND *phwnd)
|
||||
{
|
||||
*phwnd = WACreateDialogParam(MAKEINTRESOURCEW(IDD_SETUP_PAGE_FEEDBACK), hwndParent, ::DialogProc, (LPARAM)this);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
void setup_page_feedback::UpdateUI(void)
|
||||
{
|
||||
|
||||
HWND hwndCB;
|
||||
if (!hwnd || !IsWindow(hwnd)) return;
|
||||
|
||||
CheckDlgButton(hwnd, IDC_CHK_ANNOUNCEMENTS, (FF_ANNOUNCEMENTS & flags) ? BST_CHECKED : BST_UNCHECKED);
|
||||
CheckDlgButton(hwnd, IDC_CHK_STATISTICS, (FF_STATISTICS & flags) ? BST_CHECKED : BST_UNCHECKED);
|
||||
|
||||
SetDlgItemTextW(hwnd, IDC_EDT_EMAIL, szEmail);
|
||||
SetDlgItemTextW(hwnd, IDC_EDT_COUNTRY, szCountry);
|
||||
|
||||
hwndCB = GetDlgItem(hwnd, IDC_CB_GENDER);
|
||||
if (hwndCB)
|
||||
{
|
||||
INT count = (INT)SendMessageW(hwndCB, CB_GETCOUNT, 0, 0L);
|
||||
if (count > 0)
|
||||
{
|
||||
INT i;
|
||||
for (i = 0; i < count && gender != (INT)SendMessageW(hwndCB, CB_GETITEMDATA, i, 0L); i++);
|
||||
if (i != count) SendMessageW(hwndCB, CB_SETCURSEL, i, 0L);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void setup_page_feedback::ComboBox_OnSelChange(HWND hwndCtrl)
|
||||
{
|
||||
INT index;
|
||||
index = (INT)SendMessageW(hwndCtrl, CB_GETCURSEL, 0, 0L);
|
||||
if (CB_ERR == index) return;
|
||||
gender = (INT)SendMessageW(hwndCtrl, CB_GETITEMDATA, index, 0L);
|
||||
}
|
||||
|
||||
INT_PTR setup_page_feedback::OnInitDialog(HWND hwndFocus, LPARAM lParam)
|
||||
{
|
||||
HWND hwndCB;
|
||||
|
||||
SendDlgItemMessageW(hwnd, IDC_EDT_EMAIL, EM_LIMITTEXT, sizeof(szEmail)/sizeof(wchar_t), 0);
|
||||
SendDlgItemMessageW(hwnd, IDC_EDT_COUNTRY, EM_LIMITTEXT, sizeof(szCountry)/sizeof(wchar_t), 0);
|
||||
|
||||
hwndCB = GetDlgItem(hwnd, IDC_CB_GENDER);
|
||||
if (hwndCB)
|
||||
{
|
||||
UINT genderStrID[] = {IDS_GENDER_UNKNOWN, IDS_GENDER_FEMALE, IDS_GENDER_MALE, };
|
||||
INT genderVal[] = {GENDER_UNKNOWN, GENDER_FEMALE, GENDER_MALE, };
|
||||
for(int i = 0; i < sizeof(genderStrID)/sizeof(UINT); i++)
|
||||
{
|
||||
INT index = (INT)SendMessageW(hwndCB, CB_ADDSTRING,0, (LPARAM)getStringW(genderStrID[i], NULL, 0));
|
||||
if (CB_ERR != index) SendMessageW(hwndCB, CB_SETITEMDATA, index, (LPARAM)genderVal[i]);
|
||||
}
|
||||
}
|
||||
|
||||
UpdateUI();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void setup_page_feedback::OnSize(UINT nType, INT cx, INT cy)
|
||||
{
|
||||
INT ctrlList[] = { IDC_LBL_HEADER, IDC_CHK_ANNOUNCEMENTS, IDC_CHK_STATISTICS,
|
||||
IDC_EDT_EMAIL, IDC_EDT_COUNTRY, IDC_CB_GENDER, };
|
||||
HWND hwndCtrl;
|
||||
HDWP hdwp;
|
||||
RECT rw;
|
||||
INT width, ox;
|
||||
|
||||
hwndCtrl = GetDlgItem(hwnd, IDC_LBL_EMAIL);
|
||||
GetWindowRect(hwndCtrl, &rw);
|
||||
MapWindowPoints(HWND_DESKTOP, hwnd, (POINT*)&rw, 2);
|
||||
ox = rw.left;
|
||||
|
||||
hdwp = BeginDeferWindowPos(sizeof(ctrlList)/sizeof(INT));
|
||||
if (!hdwp) return;
|
||||
|
||||
for (int i = 0; i < sizeof(ctrlList)/sizeof(INT); i++)
|
||||
{
|
||||
hwndCtrl = GetDlgItem(hwnd, ctrlList[i]);
|
||||
if (hwndCtrl)
|
||||
{
|
||||
GetWindowRect(hwndCtrl, &rw);
|
||||
MapWindowPoints(HWND_DESKTOP, hwnd, (POINT*)&rw, 2);
|
||||
switch(ctrlList[i])
|
||||
{
|
||||
case IDC_EDT_EMAIL:
|
||||
case IDC_EDT_COUNTRY:
|
||||
case IDC_CB_GENDER:
|
||||
width = cx - rw.left - ox;
|
||||
break;
|
||||
default:
|
||||
width = cx - rw.left*2;
|
||||
break;
|
||||
}
|
||||
hdwp = DeferWindowPos(hdwp, hwndCtrl, NULL, 0, 0, width, rw.bottom - rw.top,
|
||||
SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOMOVE);
|
||||
}
|
||||
}
|
||||
if (hdwp) EndDeferWindowPos(hdwp);
|
||||
}
|
||||
|
||||
|
||||
void setup_page_feedback::OnCommand(INT nCtrlID, INT nEvntID, HWND hwndCtrl)
|
||||
{
|
||||
switch(nCtrlID)
|
||||
{
|
||||
case IDC_EDT_EMAIL:
|
||||
switch(nEvntID)
|
||||
{
|
||||
case EN_CHANGE:
|
||||
{
|
||||
GetWindowTextW(hwndCtrl, szEmail, sizeof(szEmail)/sizeof(wchar_t));
|
||||
HWND hwndChk = GetDlgItem(hwnd, IDC_CHK_ANNOUNCEMENTS);
|
||||
if (IsWindow(hwndChk))
|
||||
{
|
||||
BOOL bEnabled = IsWindowEnabled(hwndChk);
|
||||
if (bEnabled != (0x00 != *szEmail))
|
||||
{
|
||||
CheckDlgButton(hwnd, IDC_CHK_ANNOUNCEMENTS, (0x00 != *szEmail) ? BST_CHECKED : BST_UNCHECKED);
|
||||
EnableWindow(GetDlgItem(hwnd, IDC_CHK_ANNOUNCEMENTS), 0x00 != *szEmail);
|
||||
PostMessageW(hwnd, WM_COMMAND, MAKEWPARAM(IDC_CHK_ANNOUNCEMENTS, BN_CLICKED), (LPARAM)GetDlgItem(hwnd, IDC_CHK_ANNOUNCEMENTS));
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case IDC_EDT_COUNTRY:
|
||||
switch(nEvntID)
|
||||
{
|
||||
case EN_CHANGE:
|
||||
GetWindowTextW(hwndCtrl, szCountry, sizeof(szCountry)/sizeof(wchar_t));
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case IDC_CHK_ANNOUNCEMENTS:
|
||||
switch(nEvntID)
|
||||
{
|
||||
case BN_CLICKED:
|
||||
if (BST_CHECKED & (INT)SendMessageW(hwndCtrl, BM_GETSTATE, 0, 0L)) flags |= FF_ANNOUNCEMENTS;
|
||||
else flags &= ~FF_ANNOUNCEMENTS;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case IDC_CHK_STATISTICS:
|
||||
switch(nEvntID)
|
||||
{
|
||||
case BN_CLICKED:
|
||||
if (BST_CHECKED & (INT)SendMessageW(hwndCtrl, BM_GETSTATE, 0, 0L)) flags |= FF_STATISTICS;
|
||||
else flags &= ~FF_STATISTICS;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case IDC_CB_GENDER:
|
||||
switch(nEvntID)
|
||||
{
|
||||
case CBN_SELCHANGE: ComboBox_OnSelChange(hwndCtrl); break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
INT_PTR setup_page_feedback::PageDlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch(uMsg)
|
||||
{
|
||||
case WM_INITDIALOG: return OnInitDialog((HWND)wParam, lParam);
|
||||
case WM_DESTROY: break;
|
||||
case WM_SIZE: OnSize((UINT)wParam, LOWORD(lParam), HIWORD(lParam)); break;
|
||||
case WM_COMMAND: OnCommand(LOWORD(wParam), HIWORD(wParam), (HWND)lParam); break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static INT_PTR WINAPI DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
setup_page_feedback *pInst = (setup_page_feedback*)GetPropW(hwnd, L"SETUPPAGE");
|
||||
|
||||
switch(uMsg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
pInst = (setup_page_feedback*)lParam;
|
||||
if (pInst)
|
||||
{
|
||||
pInst->hwnd = hwnd;
|
||||
SetPropW(hwnd, L"SETUPPAGE", pInst);
|
||||
}
|
||||
break;
|
||||
case WM_DESTROY:
|
||||
if (pInst)
|
||||
{
|
||||
pInst->PageDlgProc(uMsg, wParam, lParam);
|
||||
RemovePropW(hwnd, L"SETUPPAGE");
|
||||
pInst = NULL;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return (pInst) ? pInst->PageDlgProc(uMsg, wParam, lParam) : 0;
|
||||
}
|
||||
|
||||
#ifdef CBCLASS
|
||||
#undef CBCLASS
|
||||
#endif
|
||||
|
||||
#define CBCLASS setup_page_feedback
|
||||
START_DISPATCH
|
||||
CB(ADDREF, AddRef)
|
||||
CB(RELEASE, Release)
|
||||
CB(API_SETUPPAGE_GET_NAME, GetName)
|
||||
CB(API_SETUPPAGE_CREATEVIEW, CreateView)
|
||||
CB(API_SETUPPAGE_SAVE, Save)
|
||||
CB(API_SETUPPAGE_REVERT, Revert)
|
||||
CB(API_SETUPPAGE_ISDIRTY, IsDirty)
|
||||
CB(API_SETUPPAGE_VALIDATE, Validate)
|
||||
END_DISPATCH
|
||||
#undef CBCLASS
|
Loading…
Add table
Add a link
Reference in a new issue