// Default dialog procedure, which handles common functions INT_PTR CALLBACK PSPBaseProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { CCtrlList *pCtrlList; pCtrlList = CCtrlList::GetObj(hDlg); if (PtrIsValid(pCtrlList)) { switch (uMsg) { case WM_INITDIALOG: return TRUE; // set propertysheet page's background white in aero mode case WM_CTLCOLORSTATIC: case WM_CTLCOLORDLG: if (IsAeroMode()) return (INT_PTR)GetStockBrush(WHITE_BRUSH); break; // Set text color of edit boxes according to the source of information they display. case WM_CTLCOLOREDIT: return pCtrlList->OnSetTextColour((HWND)lParam, (HDC)wParam); case WM_NOTIFY: switch (((LPNMHDR)lParam)->idFrom) { case 0: MCONTACT hContact = (MCONTACT)((LPPSHNOTIFY)lParam)->lParam; LPSTR pszProto; switch (((LPNMHDR)lParam)->code) { case PSN_RESET: pCtrlList->OnReset(); break; case PSN_INFOCHANGED: if (PSGetBaseProto(hDlg, pszProto) && *pszProto) { BOOL bChanged = (GetWindowLongPtr(hDlg, DWLP_MSGRESULT)&PSP_CHANGED) | pCtrlList->OnInfoChanged(hContact, pszProto); SetWindowLongPtr(hDlg, DWLP_MSGRESULT, bChanged ? PSP_CHANGED : 0); } break; case PSN_APPLY: if (PSGetBaseProto(hDlg, pszProto) && *pszProto) pCtrlList->OnApply(hContact, pszProto); break; } break; } break; case WM_COMMAND: if (!PspIsLocked(hDlg)) pCtrlList->OnChangedByUser(LOWORD(wParam), HIWORD(wParam)); break; case WM_DESTROY: // destroy all control objects and the list pCtrlList->Release(); } } return 0; }
INT_PTR CALLBACK PSPProcAnniversary(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { CAnnivEditCtrl *pDateCtrl = CAnnivEditCtrl::GetObj(hDlg, EDIT_ANNIVERSARY_DATE); switch (uMsg) { case WM_INITDIALOG: { CCtrlList *pCtrlList = CCtrlList::CreateObj(hDlg); if (pCtrlList) { HFONT hBoldFont; PSGetBoldFont(hDlg, hBoldFont); SendDlgItemMessage(hDlg, IDC_PAGETITLE, WM_SETFONT, (WPARAM)hBoldFont, 0); TranslateDialogDefault(hDlg); pCtrlList->insert(CEditCtrl::CreateObj(hDlg, EDIT_AGE, SET_CONTACT_AGE, DBVT_BYTE)); pCtrlList->insert(CAnnivEditCtrl::CreateObj(hDlg, EDIT_ANNIVERSARY_DATE, NULL)); // hContact == NULL or reminder disabled CAnnivEditCtrl::GetObj(hDlg, EDIT_ANNIVERSARY_DATE)->EnableReminderCtrl(lParam != NULL); SendDlgItemMessage(hDlg, EDIT_AGE, EM_LIMITTEXT, 3, 0); SendDlgItemMessage(hDlg, SPIN_AGE, UDM_SETRANGE32, 0, 200); } } break; case WM_NOTIFY: switch (((LPNMHDR)lParam)->idFrom) { case 0: switch (((LPNMHDR)lParam)->code) { case PSN_ICONCHANGED: { const ICONCTRL idIcon[] = { { ICO_COMMON_BIRTHDAY, STM_SETIMAGE, ICO_BIRTHDAY }, { ICO_BTN_ADD, BM_SETIMAGE, BTN_ADD }, { ICO_BTN_DELETE, BM_SETIMAGE, BTN_DELETE } }; IcoLib_SetCtrlIcons(hDlg, idIcon, _countof(idIcon)); } return FALSE; } break; /* case 0 */ case EDIT_ANNIVERSARY_DATE: if (!PspIsLocked(hDlg) && PtrIsValid(pDateCtrl)) { LPNMHDR lpNmhdr = (LPNMHDR)lParam; switch (lpNmhdr->code) { case DTN_DATETIMECHANGE: pDateCtrl->OnDateChanged((LPNMDATETIMECHANGE)lParam); break; case DTN_DROPDOWN: HWND hMonthCal = DateTime_GetMonthCal(lpNmhdr->hwndFrom); SetWindowLongPtr(hMonthCal, GWL_STYLE, GetWindowLongPtr(hMonthCal, GWL_STYLE) | MCS_WEEKNUMBERS); InvalidateRect(hMonthCal, NULL, TRUE); } } return FALSE; } break; case WM_COMMAND: switch (LOWORD(wParam)) { case EDIT_REMIND: if (!PspIsLocked(hDlg) && HIWORD(wParam) == EN_UPDATE) if (PtrIsValid(pDateCtrl)) pDateCtrl->OnRemindEditChanged(); return FALSE; /** * name: BTN_MENU * desc: the button to dropdown the list to show all items is pressed **/ case BTN_MENU: if (HIWORD(wParam) == BN_CLICKED) { if (PtrIsValid(pDateCtrl)) pDateCtrl->OnMenuPopup(); } return FALSE; /** * name: BTN_ADD * desc: creates a new dialog to add a new anniversary **/ case BTN_ADD: if (HIWORD(wParam) == BN_CLICKED && PtrIsValid(pDateCtrl)) { MAnnivDate Date; if (IDOK == DialogBoxParam(ghInst, MAKEINTRESOURCE(IDD_ANNIVERSARY_EDITOR), hDlg, DlgProc_AnniversaryEditor, (LPARAM)&Date)) { SendMessage(GetParent(hDlg), PSM_CHANGED, NULL, NULL); if (!pDateCtrl->AddDate(Date)) pDateCtrl->SetCurSel(pDateCtrl->NumDates() - 1); } } return FALSE; /** * name: BTN_EDIT * desc: edit the currently selected anniversary **/ case BTN_EDIT: if (HIWORD(wParam) == BN_CLICKED && PtrIsValid(pDateCtrl)) { MAnnivDate *pDate = pDateCtrl->Current(); if (!pDate) MsgErr(hDlg, LPGENT("No valid date selected for editing!")); else if ( IDOK == DialogBoxParam(ghInst, MAKEINTRESOURCE(IDD_ANNIVERSARY_EDITOR), hDlg, DlgProc_AnniversaryEditor, (LPARAM)pDate) && (pDate->Flags() & (MAnnivDate::MADF_CHANGED | MAnnivDate::MADF_REMINDER_CHANGED))) { SendMessage(GetParent(hDlg), PSM_CHANGED, NULL, NULL); pDateCtrl->SetCurSel(pDateCtrl->CurrentIndex()); } } return FALSE; /** * name: BTN_DELETE * desc: user wants to delete an anniversary **/ case BTN_DELETE: if (HIWORD(wParam) == BN_CLICKED && PtrIsValid(pDateCtrl)) { MAnnivDate *pCurrent = pDateCtrl->Current(); if (pCurrent) { int rc = MsgBox(hDlg, MB_YESNO | MB_ICON_QUESTION | MB_NOPOPUP, LPGENT("Delete"), NULL, LPGENT("Do you really want to delete the %s?"), pCurrent->Description()); if (rc == IDYES) pDateCtrl->DeleteDate(pDateCtrl->CurrentIndex()); } } return FALSE; /** * name: CHECK_REMIND * desc: state of reminder checkbox is changed **/ case RADIO_REMIND1: case RADIO_REMIND2: case RADIO_REMIND3: CAnnivEditCtrl *pDateCtrl = CAnnivEditCtrl::GetObj(hDlg, EDIT_ANNIVERSARY_DATE); if (PtrIsValid(pDateCtrl) && HIWORD(wParam) == BN_CLICKED) pDateCtrl->OnReminderChecked(); return FALSE; } /* switch (LOWORD(wParam)) */ break; } return PSPBaseProc(hDlg, uMsg, wParam, lParam); }
/** * Dialog procedure for the about/nodes information propertysheetpage * * @param hDlg - handle to the dialog window * @param uMsg - the message to handle * @param wParam - parameter * @param lParam - parameter * * @return different values **/ INT_PTR CALLBACK PSPProcEdit(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam, const CHAR *pszSetting) { switch (uMsg) { case WM_INITDIALOG: { CCtrlList *pCtrlList = CCtrlList::CreateObj(hDlg); if (pCtrlList) { HFONT hBoldFont; PSGetBoldFont(hDlg, hBoldFont); SendDlgItemMessage(hDlg, IDC_PAGETITLE, WM_SETFONT, (WPARAM)hBoldFont, 0); if (!mir_strcmp(pszSetting, SET_CONTACT_MYNOTES)) SetDlgItemText(hDlg, IDC_PAGETITLE, LPGENT("My notes:")); else SetDlgItemText(hDlg, IDC_PAGETITLE, LPGENT("About:")); TranslateDialogDefault(hDlg); pCtrlList->insert(CEditCtrl::CreateObj(hDlg, EDIT_ABOUT, pszSetting, DBVT_TCHAR)); // remove static edge in aero mode if (IsAeroMode()) SetWindowLongPtr(GetDlgItem(hDlg, EDIT_ABOUT), GWL_EXSTYLE, GetWindowLongPtr(GetDlgItem(hDlg, EDIT_ABOUT), GWL_EXSTYLE) & ~WS_EX_STATICEDGE); SendDlgItemMessage(hDlg, EDIT_ABOUT, EM_SETEVENTMASK, 0, /*ENM_KEYEVENTS | */ENM_LINK | ENM_CHANGE); SendDlgItemMessage(hDlg, EDIT_ABOUT, EM_AUTOURLDETECT, TRUE, NULL); if (!lParam) SendDlgItemMessage(hDlg, EDIT_ABOUT, EM_LIMITTEXT, 1024, NULL); } } break; case WM_NOTIFY: { switch (((LPNMHDR)lParam)->idFrom) { // notification handler for richedit control case EDIT_ABOUT: { switch (((LPNMHDR)lParam)->code) { // notification handler for a link within the richedit control case EN_LINK: return CEditCtrl::GetObj(((LPNMHDR)lParam)->hwndFrom)->LinkNotificationHandler((ENLINK *)lParam); } } return FALSE; } } break; case WM_COMMAND: { switch (LOWORD(wParam)) { case EDIT_ABOUT: { if (HIWORD(wParam) == EN_CHANGE) { CBaseCtrl *pResult; pResult = CBaseCtrl::GetObj((HWND)lParam); if (PtrIsValid(pResult) && (pResult->_cbSize == sizeof(CBaseCtrl))) pResult->OnChangedByUser(HIWORD(wParam)); } } } } return FALSE; } return PSPBaseProc(hDlg, uMsg, wParam, lParam); }
/** * This is the dialog procedure for the advanced contact information propertysheetpage. * * @param hDlg - handle to the dialog window * @param uMsg - the message to handle * @param wParam - parameter * @param lParam - parameter * * @return different values **/ INT_PTR CALLBACK PSPProcOrigin(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: { CCtrlList *pCtrlList = CCtrlList::CreateObj(hDlg); if (pCtrlList) { LPIDSTRLIST pList; UINT nList; HFONT hBoldFont; PSGetBoldFont(hDlg, hBoldFont); SendDlgItemMessage(hDlg, IDC_PAGETITLE, WM_SETFONT, (WPARAM)hBoldFont, 0); TranslateDialogDefault(hDlg); SetTimer(hDlg, 1, 5000, NULL); pCtrlList->insert(CEditCtrl::CreateObj(hDlg, EDIT_STREET, SET_CONTACT_ORIGIN_STREET, DBVT_TCHAR)); pCtrlList->insert(CEditCtrl::CreateObj(hDlg, EDIT_ZIP, SET_CONTACT_ORIGIN_ZIP, DBVT_TCHAR)); pCtrlList->insert(CEditCtrl::CreateObj(hDlg, EDIT_CITY, SET_CONTACT_ORIGIN_CITY, DBVT_TCHAR)); pCtrlList->insert(CEditCtrl::CreateObj(hDlg, EDIT_STATE, SET_CONTACT_ORIGIN_STATE, DBVT_TCHAR)); GetCountryList(&nList, &pList); pCtrlList->insert(CCombo::CreateObj(hDlg, EDIT_COUNTRY, SET_CONTACT_ORIGIN_COUNTRY, DBVT_WORD, pList, nList)); pCtrlList->insert(CTzCombo::CreateObj(hDlg, EDIT_TIMEZONE, NULL)); } } break; case WM_NOTIFY: { switch (((LPNMHDR) lParam)->idFrom) { case 0: { MCONTACT hContact = (MCONTACT)((LPPSHNOTIFY)lParam)->lParam; LPCSTR pszProto; switch (((LPNMHDR) lParam)->code) { case PSN_INFOCHANGED: { if (!PSGetBaseProto(hDlg, pszProto) || *pszProto == 0) break; if (hContact) { MTime mt; if (mt.DBGetStamp(hContact, USERINFO, SET_CONTACT_ADDEDTIME) && strstr(pszProto, "ICQ")) { DWORD dwStamp; dwStamp = DB::Contact::WhenAdded(db_get_dw(hContact, pszProto, "UIN", 0), pszProto); if (dwStamp > 0) mt.FromStampAsUTC(dwStamp); } if (mt.IsValid()) { TCHAR szTime[MAX_PATH]; LPTSTR ptr; mt.UTCToLocal(); mt.DateFormatLong(szTime, _countof(szTime)); mir_tstrcat(szTime, _T(" - ")); ptr = szTime + mir_tstrlen(szTime); mt.TimeFormat(ptr, _countof(szTime) - (ptr - szTime)); SetDlgItemText(hDlg, TXT_DATEADDED, szTime); } } SetWindowLongPtr(hDlg, DWLP_MSGRESULT, 0); } break; case PSN_ICONCHANGED: { const ICONCTRL idIcon[] = { { ICO_COMMON_ADDRESS, STM_SETIMAGE, ICO_ADDRESS }, { ICO_COMMON_CLOCK, STM_SETIMAGE, ICO_CLOCK }, }; IcoLib_SetCtrlIcons(hDlg, idIcon, _countof(idIcon)); } } } } /* switch (((LPNMHDR)lParam)->idFrom) */ } break; case WM_COMMAND: { switch (LOWORD(wParam)) { case EDIT_COUNTRY: if (HIWORD(wParam) == CBN_SELCHANGE) { LPIDSTRLIST pd = (LPIDSTRLIST)ComboBox_GetItemData((HWND)lParam, ComboBox_GetCurSel((HWND)lParam)); UpDate_CountryIcon(GetDlgItem(hDlg, ICO_COUNTRY), pd->nID); } break; } } break; case WM_TIMER: { TCHAR szTime[32]; CTzCombo::GetObj(hDlg, EDIT_TIMEZONE)->GetTime(szTime, _countof(szTime)); SetDlgItemText(hDlg, TXT_TIME, szTime); break; } case WM_DESTROY: KillTimer(hDlg, 1); } return PSPBaseProc(hDlg, uMsg, wParam, lParam); }
/** * Dialog procedure for the contact information propertysheetpage * * @param hDlg - handle to the dialog window * @param uMsg - the message to handle * @param wParam - parameter * @param lParam - parameter * * @return different values **/ INT_PTR CALLBACK PSPProcGeneral(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: { CCtrlList *pCtrlList = CCtrlList::CreateObj(hDlg); if (pCtrlList) { LPIDSTRLIST pList; UINT nList; HFONT hBoldFont; PSGetBoldFont(hDlg, hBoldFont); SendDlgItemMessage(hDlg, IDC_PAGETITLE, WM_SETFONT, (WPARAM)hBoldFont, 0); TranslateDialogDefault(hDlg); pCtrlList->insert(CEditCtrl::CreateObj(hDlg, EDIT_TITLE, SET_CONTACT_TITLE, DBVT_TCHAR)); pCtrlList->insert(CEditCtrl::CreateObj(hDlg, EDIT_FIRSTNAME, SET_CONTACT_FIRSTNAME, DBVT_TCHAR)); pCtrlList->insert(CEditCtrl::CreateObj(hDlg, EDIT_SECONDNAME, SET_CONTACT_SECONDNAME, DBVT_TCHAR)); pCtrlList->insert(CEditCtrl::CreateObj(hDlg, EDIT_LASTNAME, SET_CONTACT_LASTNAME, DBVT_TCHAR)); pCtrlList->insert(CEditCtrl::CreateObj(hDlg, EDIT_NICK, SET_CONTACT_NICK, DBVT_TCHAR)); pCtrlList->insert(CEditCtrl::CreateObj(hDlg, EDIT_DISPLAYNAME, "CList", SET_CONTACT_MYHANDLE, DBVT_TCHAR)); pCtrlList->insert(CEditCtrl::CreateObj(hDlg, EDIT_PARTNER, SET_CONTACT_PARTNER, DBVT_TCHAR)); GetNamePrefixList(&nList, &pList); pCtrlList->insert(CCombo::CreateObj(hDlg, EDIT_PREFIX, SET_CONTACT_PREFIX, DBVT_BYTE, pList, nList)); // marital groupbox GetMaritalList(&nList, &pList); pCtrlList->insert(CCombo::CreateObj(hDlg, EDIT_MARITAL, SET_CONTACT_MARITAL, DBVT_BYTE, pList, nList)); GetLanguageList(&nList, &pList); pCtrlList->insert(CCombo::CreateObj(hDlg, EDIT_LANG1, SET_CONTACT_LANG1, DBVT_TCHAR, pList, nList)); pCtrlList->insert(CCombo::CreateObj(hDlg, EDIT_LANG2, SET_CONTACT_LANG2, DBVT_TCHAR, pList, nList)); pCtrlList->insert(CCombo::CreateObj(hDlg, EDIT_LANG3, SET_CONTACT_LANG3, DBVT_TCHAR, pList, nList)); } } break; case WM_NOTIFY: { switch (((LPNMHDR)lParam)->idFrom) { case 0: { MCONTACT hContact = (MCONTACT)((LPPSHNOTIFY)lParam)->lParam; char* pszProto; switch (((LPNMHDR)lParam)->code) { case PSN_INFOCHANGED: { BYTE bEnable; DBVARIANT dbv; CCtrlFlags Flags; if (PSGetBaseProto(hDlg, pszProto) && *pszProto) { Flags.W = DB::Setting::GetTStringCtrl(hContact, USERINFO, USERINFO, pszProto, SET_CONTACT_GENDER, &dbv); if (Flags.B.hasCustom || Flags.B.hasProto || Flags.B.hasMeta) { if (dbv.type == DBVT_BYTE) { CheckDlgButton(hDlg, RADIO_FEMALE, (dbv.bVal == 'F')); CheckDlgButton(hDlg, RADIO_MALE, (dbv.bVal == 'M')); bEnable = !hContact || Flags.B.hasCustom || !db_get_b(NULL, MODNAME, SET_PROPSHEET_PCBIREADONLY, 0); EnableWindow(GetDlgItem(hDlg, RADIO_FEMALE), bEnable); EnableWindow(GetDlgItem(hDlg, RADIO_MALE), bEnable); } else db_free(&dbv); } } } break; case PSN_APPLY: { if (!PSGetBaseProto(hDlg, pszProto) || *pszProto == 0) break; // gender { BYTE gender = SendDlgItemMessage(hDlg, RADIO_FEMALE, BM_GETCHECK, NULL, NULL) ? 'F' : SendDlgItemMessage(hDlg, RADIO_MALE, BM_GETCHECK, NULL, NULL) ? 'M' : 0; if (gender) db_set_b(hContact, hContact ? USERINFO : pszProto, SET_CONTACT_GENDER, gender); else db_unset(hContact, hContact ? USERINFO : pszProto, SET_CONTACT_GENDER); } } break; case PSN_ICONCHANGED: { const ICONCTRL idIcon[] = { { ICO_COMMON_FEMALE, STM_SETIMAGE, ICO_FEMALE }, { ICO_COMMON_MALE, STM_SETIMAGE, ICO_MALE }, { ICO_COMMON_MARITAL, STM_SETIMAGE, ICO_MARITAL }, }; IcoLib_SetCtrlIcons(hDlg, idIcon, SIZEOF(idIcon)); } } } } } break; case WM_COMMAND: { MCONTACT hContact; LPCSTR pszProto; switch (LOWORD(wParam)) { case RADIO_FEMALE: { if (!PspIsLocked(hDlg) && HIWORD(wParam) == BN_CLICKED) { DBVARIANT dbv; PSGetContact(hDlg, hContact); PSGetBaseProto(hDlg, pszProto); if (!DB::Setting::GetAsIsCtrl(hContact, USERINFO, USERINFO, pszProto, SET_CONTACT_GENDER, &dbv) || dbv.type != DBVT_BYTE || (dbv.bVal != 'F' && SendMessage((HWND)lParam, BM_GETCHECK, NULL, NULL))) SendMessage(GetParent(hDlg), PSM_CHANGED, NULL, NULL); } } break; case RADIO_MALE: { if (!PspIsLocked(hDlg) && HIWORD(wParam) == BN_CLICKED) { DBVARIANT dbv; PSGetContact(hDlg, hContact); PSGetBaseProto(hDlg, pszProto); if (!DB::Setting::GetAsIsCtrl(hContact, USERINFO, USERINFO, pszProto, SET_CONTACT_GENDER, &dbv) || dbv.type != DBVT_BYTE || (dbv.bVal != 'M' && SendMessage((HWND)lParam, BM_GETCHECK, NULL, NULL))) SendMessage(GetParent(hDlg), PSM_CHANGED, NULL, NULL); } } } } } return PSPBaseProc(hDlg, uMsg, wParam, lParam); }