123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392 |
- #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
|