/** * name: AddDate * class: CAnnivEditCtrl * desc: Add a new item to the array of dates * param: mda - the date to add * return: 0 on success, -1 on failure, 1 if the item to change was edited before and the new item was not set **/ INT_PTR CAnnivEditCtrl::AddDate(MAnnivDate &mda) { MAnnivDate *pmda, **pmd; // if a date with wID exists, replace it if ((pmda = FindDateById(mda.Id())) != NULL) { BYTE bChanged = pmda->IsChanged(), bRemindChanged = pmda->IsReminderChanged(); if (!bChanged) { pmda->Set(mda); pmda->Module(mda.Module()); pmda->Description(mda.Description()); pmda->Flags(mda.Flags()); } if (!bRemindChanged) { pmda->RemindOption(mda.RemindOption()); pmda->RemindOffset(mda.RemindOffset()); } return bChanged || bRemindChanged; } if (mda.Id() == ANID_NONE) mda.Id(_numDates - 1); if (pmd = (MAnnivDate **)mir_realloc(_pDates, (_numDates + 1) * sizeof(pmda))) { _pDates = pmd; if (_pDates[_numDates] = new MAnnivDate(mda)) { _numDates++; return 0; } } return 1; }
CAnnivEditCtrl::CAnnivEditCtrl(HWND hDlg, WORD idCtrl, LPCSTR pszSetting) : CBaseCtrl(hDlg, idCtrl, pszSetting) { _hwndDlg = hDlg; _hBtnAdd = GetDlgItem(hDlg, BTN_ADD); _hBtnDel = GetDlgItem(hDlg, BTN_DELETE); _hBtnEdit = GetDlgItem(hDlg, BTN_EDIT); _hBtnMenu = GetDlgItem(hDlg, BTN_MENU); _hwndDate = GetDlgItem(hDlg, EDIT_ANNIVERSARY_DATE); _ReminderEnabled = db_get_b(NULL, MODNAME, SET_REMIND_ENABLED, DEFVAL_REMIND_ENABLED); _pDates = NULL; _curDate = 0; _numDates = 0; // set button tooltips SendMessage(_hBtnAdd, BUTTONADDTOOLTIP, (WPARAM)TranslateT("Add a new anniversary"), MBBF_TCHAR); SendMessage(_hBtnDel, BUTTONADDTOOLTIP, (WPARAM)TranslateT("Delete an existing anniversary"), MBBF_TCHAR); // limit textinput SendDlgItemMessage(_hwndDlg, EDIT_REMIND, EM_LIMITTEXT, 2, 0); SendDlgItemMessage(_hwndDlg, SPIN_REMIND, UDM_SETRANGE32, 0, 50); // birthday is shown as an item in any case { MAnnivDate mdb; mdb.Id(ANID_BIRTHDAY); mdb.Description(TranslateT("Birthday")); AddDate(mdb); } }
/** * name: Set * class: MAnnivDate * desc: duplicates the given anniversary date class * param: none * return: nothing **/ VOID MAnnivDate::SetDate(MAnnivDate &mda) { SetDate(mda.SystemTime()); _wID = mda.Id(); _strDesc = mda.Description(); _strModule = mda.Module(); _wFlags = mda.Flags(); _bRemind = mda.RemindOption(); _wDaysEarlier = mda.RemindOffset(); }
/** * name: OnMenuPopup * class: CAnnivEditCtrl * desc: is called to show a popup menu for all anniversaries of a contact * param: none * return: nothing **/ void CAnnivEditCtrl::OnDateChanged(LPNMDATETIMECHANGE lpChange) { MAnnivDate *pCurrent = Current(); if (pCurrent && !pCurrent->IsEqual(lpChange->st)) { HWND hPs = GetParent(_hwndDlg); // save the new date to the structure DateTime_SetFormat(_hwndDate, NULL); pCurrent->Set(lpChange->st, TRUE); pCurrent->SetFlags(MAnnivDate::MADF_CHANGED|MAnnivDate::MADF_HASCUSTOM); // notify parent of the change SendMessage(hPs, PSM_CHANGED, NULL, NULL); EnableWindow(_hBtnDel, TRUE); // update the age and zodiac controls on the general propertysheetpage if (pCurrent->Id() == ANID_BIRTHDAY) { SetZodiacAndAge(pCurrent); } } }
/** * Dialog procedure for the anniversary add/edit dialog * * @param hDlg - handle to the dialog window * @param uMsg - the message to handle * @param wParam - parameter * @param lParam - parameter * * @return different values **/ static INT_PTR CALLBACK DlgProc_AnniversaryEditor(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { MAnnivDate *pDlgEditAnniv = (MAnnivDate *)GetUserData(hDlg); switch (uMsg) { case WM_INITDIALOG: pDlgEditAnniv = (MAnnivDate *)lParam; if (!PtrIsValid(pDlgEditAnniv)) break; SetUserData(hDlg, lParam); // set icons if (db_get_b(NULL, MODNAME, SET_ICONS_BUTTONS, 1)) { SendDlgItemMessage(hDlg, IDOK, BM_SETIMAGE, IMAGE_ICON, (LPARAM)IcoLib_GetIcon(ICO_BTN_OK)); SendDlgItemMessage(hDlg, IDCANCEL, BM_SETIMAGE, IMAGE_ICON, (LPARAM)IcoLib_GetIcon(ICO_BTN_CANCEL)); } SendDlgItemMessage(hDlg, IDC_HEADERBAR, WM_SETICON, 0, (LPARAM)IcoLib_GetIcon(ICO_DLG_ANNIVERSARY, TRUE)); // translate controls SendDlgItemMessage(hDlg, IDOK, BUTTONTRANSLATE, NULL, NULL); SendDlgItemMessage(hDlg, IDCANCEL, BUTTONTRANSLATE, NULL, NULL); TranslateDialogDefault(hDlg); // init controls EnableWindow(GetDlgItem(hDlg, EDIT_CATEGORY), pDlgEditAnniv->Id() != ANID_BIRTHDAY); SetDlgItemText(hDlg, EDIT_CATEGORY, pDlgEditAnniv->Description()); return TRUE; case WM_CTLCOLORSTATIC: SetBkColor((HDC)wParam, RGB(255, 255, 255)); return (INT_PTR)GetStockObject(WHITE_BRUSH); case WM_COMMAND: switch (LOWORD(wParam)) { case EDIT_CATEGORY: if (HIWORD(wParam) == EN_UPDATE) EnableWindow(GetDlgItem(hDlg, IDOK), GetWindowTextLength((HWND)lParam) > 0); break; case IDOK: { // read new description HWND hEdit = GetDlgItem(hDlg, EDIT_CATEGORY); int len = Edit_GetTextLength(hEdit); LPTSTR pszText; if (len == 0 || (pszText = (LPTSTR)_alloca((len + 1) * sizeof(TCHAR))) == NULL || !Edit_GetText(hEdit, pszText, len + 1)) { MsgErr(hDlg, LPGENT("Please enter a valid description first!")); break; } if (mir_tstrcmpi(pszText, pDlgEditAnniv->Description())) { pDlgEditAnniv->Description(pszText); pDlgEditAnniv->SetFlags(MAnnivDate::MADF_HASCUSTOM | MAnnivDate::MADF_CHANGED); } } // fall through case IDCANCEL: return EndDialog(hDlg, LOWORD(wParam)); } } return FALSE; }