From de6eb3e4bc30eff928dc932c03812ede3077926a Mon Sep 17 00:00:00 2001 From: Kirill Volinsky Date: Sat, 13 Oct 2012 08:54:34 +0000 Subject: MRA: folders restructurization git-svn-id: http://svn.miranda-ng.org/main/trunk@1900 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/MRA/src/MraAdvancedSearch.cpp | 361 ++++++++++++++++++++++++++++++++ 1 file changed, 361 insertions(+) create mode 100644 protocols/MRA/src/MraAdvancedSearch.cpp (limited to 'protocols/MRA/src/MraAdvancedSearch.cpp') diff --git a/protocols/MRA/src/MraAdvancedSearch.cpp b/protocols/MRA/src/MraAdvancedSearch.cpp new file mode 100644 index 0000000000..8ffe222cab --- /dev/null +++ b/protocols/MRA/src/MraAdvancedSearch.cpp @@ -0,0 +1,361 @@ +#include "Mra.h" +#include "proto.h" +#include "MraPlaces.h" + + + +struct FieldNames +{ + BYTE dwCode; + LPWSTR lpszText; +}; + + + +static const FieldNames GenderField[] = +{ + {1, L"Male"}, + {2, L"Female"}, + {-1, NULL} +}; + +static const FieldNames MonthField[] = +{ + {1, L"January"}, + {2, L"February"}, + {3, L"March"}, + {4, L"April"}, + {5, L"May"}, + {6, L"June"}, + {7, L"July"}, + {8, L"August"}, + {9, L"September"}, + {10, L"October"}, + {11, L"November"}, + {12, L"December"}, + {-1, NULL} +}; + +static const FieldNames ZodiakField[] = +{ + {1, L"Aries"}, + {2, L"Taurus"}, + {3, L"Gemini"}, + {4, L"Cancer"}, + {5, L"Leo"}, + {6, L"Virgo"}, + {7, L"Libra"}, + {8, L"Scorpio"}, + {9, L"Sagitarius"}, + {10, L"Capricorn"}, + {11, L"Aquarius"}, + {12, L"Pisces"}, + {-1, NULL} +}; + + + + + + +void ResetComboBox(HWND hWndCombo) +{ + DWORD dwItem; + + SendMessage(hWndCombo, CB_RESETCONTENT, 0, 0); + dwItem = SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM)L""); + SendMessage(hWndCombo, CB_SETITEMDATA, dwItem, 0); + SendMessage(hWndCombo, CB_SETCURSEL, dwItem, 0); +} + + +void InitComboBox(HWND hWndCombo, FieldNames *lpNames) +{ + DWORD dwItem; + + ResetComboBox(hWndCombo); + + for (size_t i = 0;lpNames[i].lpszText;i++) + { + dwItem = SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM)TranslateW(lpNames[i].lpszText)); + SendMessage(hWndCombo, CB_SETITEMDATA, dwItem, lpNames[i].dwCode); + } +} + + +void InitComboBoxNumders(HWND hWndCombo, DWORD dwStart, DWORD dwEnd) +{ + DWORD dwItem; + WCHAR szBuff[MAX_PATH]; + + ResetComboBox(hWndCombo); + + for (DWORD i = dwStart;i <= dwEnd;i++) + { + mir_sntprintf(szBuff, SIZEOF(szBuff), L"%lu", i); + dwItem = SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM)szBuff); + SendMessage(hWndCombo, CB_SETITEMDATA, dwItem, i); + } +} + + +INT_PTR CALLBACK AdvancedSearchDlgProc(HWND hWndDlg, UINT message, WPARAM wParam, LPARAM lParam) +{ + CMraProto *ppro = (CMraProto*)GetWindowLongPtr(hWndDlg, GWLP_USERDATA); + + switch (message) { + case WM_INITDIALOG: + { + HWND hWndCombo; + DWORD dwItem; + WCHAR wszBuff[MAX_PATH]; + SYSTEMTIME stTime; + GetLocalTime(&stTime); + + SetWindowLongPtr(hWndDlg, GWLP_USERDATA, lParam); + ppro = (CMraProto*)lParam; + //InitComboBox(GetDlgItem(hWndDlg, IDC_EMAIL_DOMAIN), (FieldNames*)DomainField); + { + hWndCombo = GetDlgItem(hWndDlg, IDC_EMAIL_DOMAIN); + ResetComboBox(hWndCombo); + for (size_t i = 0;lpcszMailRuDomains[i];i++) + { + MultiByteToWideChar(MRA_CODE_PAGE, 0, lpcszMailRuDomains[i], -1, wszBuff, SIZEOF(wszBuff)); + SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM)wszBuff); + } + } + InitComboBox(GetDlgItem(hWndDlg, IDC_GENDER), (FieldNames*)GenderField); + InitComboBoxNumders(GetDlgItem(hWndDlg, IDC_AGERANGE_FROM), 1, 100); + InitComboBoxNumders(GetDlgItem(hWndDlg, IDC_AGERANGE_TO), 1, 100); + InitComboBoxNumders(GetDlgItem(hWndDlg, IDC_BIRTHDAY_DAY), 1, 31); + InitComboBox(GetDlgItem(hWndDlg, IDC_BIRTHDAY_MONTH), (FieldNames*)MonthField); + InitComboBoxNumders(GetDlgItem(hWndDlg, IDC_BIRTHDAY_YEAR), 1900, (DWORD)stTime.wYear); + InitComboBox(GetDlgItem(hWndDlg, IDC_ZODIAK), (FieldNames*)ZodiakField); + + hWndCombo = GetDlgItem(hWndDlg, IDC_COUNTRY); + ResetComboBox(hWndCombo); + for (size_t i = 0;mrapPlaces[i].lpszData;i++) + { + if (mrapPlaces[i].dwCityID == 0 && mrapPlaces[i].dwPlaceID == 0) + { + dwItem = SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM)mrapPlaces[i].lpszData); + SendMessage(hWndCombo, CB_SETITEMDATA, dwItem, mrapPlaces[i].dwCountryID); + } + } + + + ResetComboBox(GetDlgItem(hWndDlg, IDC_CITY)); + + if ( ppro->mraGetByte(NULL, "AdvancedSearchRemember", MRA_DEFAULT_SEARCH_REMEMBER)) { + SEND_DLG_ITEM_MESSAGE(hWndDlg, IDC_GENDER, CB_SETCURSEL, ppro->mraGetWord(NULL, "AdvancedSearchGender", 0), 0); + SEND_DLG_ITEM_MESSAGE(hWndDlg, IDC_AGERANGE_FROM, CB_SETCURSEL, ppro->mraGetWord(NULL, "AdvancedSearchAgeFrom", 0), 0); + SEND_DLG_ITEM_MESSAGE(hWndDlg, IDC_AGERANGE_TO, CB_SETCURSEL, ppro->mraGetWord(NULL, "AdvancedSearchAgeTo", 0), 0); + SEND_DLG_ITEM_MESSAGE(hWndDlg, IDC_BIRTHDAY_MONTH, CB_SETCURSEL, ppro->mraGetWord(NULL, "AdvancedSearchBirthDayMonth", 0), 0); + SEND_DLG_ITEM_MESSAGE(hWndDlg, IDC_BIRTHDAY_DAY, CB_SETCURSEL, ppro->mraGetWord(NULL, "AdvancedSearchBirthDayDay", 0), 0); + + SEND_DLG_ITEM_MESSAGE(hWndDlg, IDC_ZODIAK, CB_SETCURSEL, ppro->mraGetWord(NULL, "AdvancedSearchZodiakID", 0), 0); + + + SEND_DLG_ITEM_MESSAGE(hWndDlg, IDC_COUNTRY, CB_SETCURSEL, ppro->mraGetWord(NULL, "AdvancedSearchCountryID", 0), 0); + SendMessageW(hWndDlg, WM_COMMAND, (WPARAM)MAKELONG(IDC_COUNTRY, CBN_SELCHANGE), (LPARAM)GetDlgItem(hWndDlg, IDC_COUNTRY)); + + SEND_DLG_ITEM_MESSAGE(hWndDlg, IDC_STATE, CB_SETCURSEL, ppro->mraGetWord(NULL, "AdvancedSearchStateID", 0), 0); + SendMessageW(hWndDlg, WM_COMMAND, (WPARAM)MAKELONG(IDC_STATE, CBN_SELCHANGE), (LPARAM)GetDlgItem(hWndDlg, IDC_STATE)); + + SEND_DLG_ITEM_MESSAGE(hWndDlg, IDC_CITY, CB_SETCURSEL, ppro->mraGetWord(NULL, "AdvancedSearchCityID", 0), 0); + + + CHECK_DLG_BUTTON(hWndDlg, IDC_ONLINEONLY, ppro->mraGetByte(NULL, "AdvancedSearchOnlineOnly", FALSE)); + CHECK_DLG_BUTTON(hWndDlg, IDC_CHK_REMEMBER, TRUE); + } + TranslateDialogDefault(hWndDlg); + } + return TRUE; + + case WM_DESTROY: + ppro->mraSetWord(NULL, "AdvancedSearchGender", SEND_DLG_ITEM_MESSAGE(hWndDlg, IDC_GENDER, CB_GETCURSEL, 0, 0)); + ppro->mraSetWord(NULL, "AdvancedSearchAgeFrom", SEND_DLG_ITEM_MESSAGE(hWndDlg, IDC_AGERANGE_FROM, CB_GETCURSEL, 0, 0)); + ppro->mraSetWord(NULL, "AdvancedSearchAgeTo", SEND_DLG_ITEM_MESSAGE(hWndDlg, IDC_AGERANGE_TO, CB_GETCURSEL, 0, 0)); + ppro->mraSetWord(NULL, "AdvancedSearchBirthDayMonth", SEND_DLG_ITEM_MESSAGE(hWndDlg, IDC_BIRTHDAY_MONTH, CB_GETCURSEL, 0, 0)); + ppro->mraSetWord(NULL, "AdvancedSearchBirthDayDay", SEND_DLG_ITEM_MESSAGE(hWndDlg, IDC_BIRTHDAY_DAY, CB_GETCURSEL, 0, 0)); + + ppro->mraSetWord(NULL, "AdvancedSearchZodiakID", SEND_DLG_ITEM_MESSAGE(hWndDlg, IDC_ZODIAK, CB_GETCURSEL, 0, 0)); + + ppro->mraSetWord(NULL, "AdvancedSearchCityID", SEND_DLG_ITEM_MESSAGE(hWndDlg, IDC_CITY, CB_GETCURSEL, 0, 0)); + ppro->mraSetWord(NULL, "AdvancedSearchStateID", SEND_DLG_ITEM_MESSAGE(hWndDlg, IDC_STATE, CB_GETCURSEL, 0, 0)); + ppro->mraSetWord(NULL, "AdvancedSearchCountryID", SEND_DLG_ITEM_MESSAGE(hWndDlg, IDC_COUNTRY, CB_GETCURSEL, 0, 0)); + + ppro->mraSetByte(NULL, "AdvancedSearchOnlineOnly", IS_DLG_BUTTON_CHECKED(hWndDlg, IDC_ONLINEONLY)); + ppro->mraSetByte(NULL, "AdvancedSearchRemember", IS_DLG_BUTTON_CHECKED(hWndDlg, IDC_CHK_REMEMBER)); + break; + + case WM_COMMAND: + switch (LOWORD(wParam)) { + case IDOK: + SendMessage(GetParent(hWndDlg), WM_COMMAND, MAKEWPARAM(IDOK, BN_CLICKED), (LPARAM)GetDlgItem(GetParent(hWndDlg), IDOK)); + break; + case IDC_AGERANGE_FROM: + case IDC_AGERANGE_TO: + if (HIWORD(wParam) == CBN_SELCHANGE) + { + if (LOWORD(wParam) == IDC_AGERANGE_FROM) + { + DWORD dwAgeFrom, dwAgeTo; + + dwAgeFrom = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_AGERANGE_FROM); + dwAgeTo = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_AGERANGE_TO); + if (dwAgeFrom == 0) dwAgeFrom++; + InitComboBoxNumders(GetDlgItem(hWndDlg, IDC_AGERANGE_TO), dwAgeFrom, 100); + SendMessage(GetDlgItem(hWndDlg, IDC_AGERANGE_TO), CB_SETCURSEL, ((dwAgeTo-dwAgeFrom)+1), 0); + } + SendMessage(GetDlgItem(hWndDlg, IDC_BIRTHDAY_YEAR), CB_SETCURSEL, 0, 0); + } + break; + case IDC_BIRTHDAY_DAY: + case IDC_BIRTHDAY_MONTH: + case IDC_BIRTHDAY_YEAR: + if (HIWORD(wParam) == CBN_SELCHANGE) + { + DWORD dwAge; + SYSTEMTIME stTime = {0}; + + stTime.wYear = (WORD)GET_CURRENT_COMBO_DATA(hWndDlg, IDC_BIRTHDAY_YEAR); + stTime.wMonth = (WORD)GET_CURRENT_COMBO_DATA(hWndDlg, IDC_BIRTHDAY_MONTH); + stTime.wDay = (WORD)GET_CURRENT_COMBO_DATA(hWndDlg, IDC_BIRTHDAY_DAY); + + dwAge = GetYears(&stTime); + SendMessage(GetDlgItem(hWndDlg, IDC_AGERANGE_FROM), CB_SETCURSEL, dwAge, 0); + SendMessage(GetDlgItem(hWndDlg, IDC_AGERANGE_TO), CB_SETCURSEL, dwAge, 0); + SendMessage(GetDlgItem(hWndDlg, IDC_ZODIAK), CB_SETCURSEL, 0, 0); + } + break; + case IDC_ZODIAK: + if (HIWORD(wParam) == CBN_SELCHANGE) + { + SendMessage(GetDlgItem(hWndDlg, IDC_BIRTHDAY_DAY), CB_SETCURSEL, 0, 0); + SendMessage(GetDlgItem(hWndDlg, IDC_BIRTHDAY_MONTH), CB_SETCURSEL, 0, 0); + //SendMessage(GetDlgItem(hWndDlg, IDC_BIRTHDAY_YEAR), CB_SETCURSEL, 0, 0); + } + break; + case IDC_COUNTRY: + if (HIWORD(wParam) == CBN_SELCHANGE) + { + HWND hWndCombo; + DWORD dwItem, dwCountryID; + + dwCountryID = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_COUNTRY); + hWndCombo = GetDlgItem(hWndDlg, IDC_STATE); + SendMessage(hWndCombo, CB_RESETCONTENT, 0, 0); + ResetComboBox(GetDlgItem(hWndDlg, IDC_CITY)); + dwItem = SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM)L""); + SendMessage(hWndCombo, CB_SETITEMDATA, dwItem, 0); + SendMessage(hWndCombo, CB_SETCURSEL, dwItem, 0); + + for (size_t i = 0;mrapPlaces[i].lpszData;i++) + { + if (mrapPlaces[i].dwCountryID == dwCountryID && mrapPlaces[i].dwCityID && mrapPlaces[i].dwPlaceID == 0) + { + dwItem = SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM)mrapPlaces[i].lpszData); + SendMessage(hWndCombo, CB_SETITEMDATA, dwItem, mrapPlaces[i].dwCityID); + } + } + } + break; + case IDC_STATE: + if (HIWORD(wParam) == CBN_SELCHANGE) + { + HWND hWndCombo; + DWORD dwItem, dwCountryID, dwStateID; + + dwCountryID = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_COUNTRY); + dwStateID = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_STATE); + hWndCombo = GetDlgItem(hWndDlg, IDC_CITY); + SendMessage(hWndCombo, CB_RESETCONTENT, 0, 0); + dwItem = SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM)L""); + SendMessage(hWndCombo, CB_SETITEMDATA, dwItem, 0); + SendMessage(hWndCombo, CB_SETCURSEL, dwItem, 0); + + for (size_t i = 0;mrapPlaces[i].lpszData;i++) + { + if (mrapPlaces[i].dwCountryID == dwCountryID && mrapPlaces[i].dwCityID == dwStateID && mrapPlaces[i].dwPlaceID) + { + dwItem = SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM)mrapPlaces[i].lpszData); + SendMessage(hWndCombo, CB_SETITEMDATA, dwItem, mrapPlaces[i].dwPlaceID); + } + } + } + break; + default: + break; + } + break; + default: + break; + } +return FALSE; +} + +HWND CMraProto::SearchAdvanced(HWND hWndDlg) +{ + DWORD dwRequestFlags = 0; + CHAR szUser[MAX_PATH], szDomain[MAX_PATH]; + WCHAR wszNickName[MAX_PATH], wszFirstName[MAX_PATH], wszLastName[MAX_PATH]; + size_t dwUserSize, dwDomainSize, dwNickNameSize, dwFirstNameSize, dwLastNameSize; + DWORD dwSex, dwDate1, dwDate2, dwCityID, dwZodiak, dwBirthdayMonth, dwBirthdayDay, dwCountryID, dwOnline; + + dwUserSize = GET_DLG_ITEM_TEXTA(hWndDlg, IDC_EMAIL_USER, szUser, SIZEOF(szUser)); + dwDomainSize = GET_DLG_ITEM_TEXTA(hWndDlg, IDC_EMAIL_DOMAIN, szDomain, SIZEOF(szDomain)); + if (dwUserSize && dwDomainSize) + { + SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_USER); + SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_DOMAIN); + } + + dwNickNameSize = GET_DLG_ITEM_TEXT(hWndDlg, IDC_NICK, wszNickName, SIZEOF(wszNickName)); + if (dwNickNameSize) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_NICKNAME); + + dwFirstNameSize = GET_DLG_ITEM_TEXT(hWndDlg, IDC_FIRSTNAME, wszFirstName, SIZEOF(wszFirstName)); + if (dwFirstNameSize) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_FIRSTNAME); + + dwLastNameSize = GET_DLG_ITEM_TEXT(hWndDlg, IDC_LASTNAME, wszLastName, SIZEOF(wszLastName)); + if (dwLastNameSize) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_LASTNAME); + + dwSex = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_GENDER); + if (dwSex) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_SEX); + + dwDate1 = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_AGERANGE_FROM); + if (dwDate1) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_DATE1); + + dwDate2 = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_AGERANGE_TO); + if (dwDate2) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_DATE2); + + dwCityID = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_CITY); + if (dwCityID == 0) dwCityID = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_STATE); + if (dwCityID) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_CITY_ID); + + dwZodiak = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_ZODIAK); + if (dwZodiak) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_ZODIAC); + + dwBirthdayMonth = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_BIRTHDAY_MONTH); + if (dwBirthdayMonth) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_MONTH); + + dwBirthdayDay = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_BIRTHDAY_DAY); + if (dwBirthdayMonth) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_DAY); + + dwCountryID = GET_CURRENT_COMBO_DATA(hWndDlg, IDC_COUNTRY); + if (dwCountryID) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_COUNTRY_ID); + + + dwOnline = IS_DLG_BUTTON_CHECKED(hWndDlg, IDC_ONLINEONLY); + if (dwOnline) SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_ONLINE); + + return (HWND)MraWPRequestW(NULL, ACKTYPE_SEARCH, dwRequestFlags, szUser, dwUserSize, szDomain, dwDomainSize, wszNickName, dwNickNameSize, wszFirstName, dwFirstNameSize, wszLastName, dwLastNameSize, dwSex, dwDate1, dwDate2, dwCityID, dwZodiak, dwBirthdayMonth, dwBirthdayDay, dwCountryID, dwOnline); +} + +HWND CMraProto::CreateExtendedSearchUI(HWND owner) +{ + if (masMraSettings.hInstance && owner) + return CreateDialogParam(masMraSettings.hInstance, MAKEINTRESOURCE(IDD_MRAADVANCEDSEARCH), owner, AdvancedSearchDlgProc, (LPARAM)this); + + return NULL; +} -- cgit v1.2.3