/* UserinfoEx plugin for Miranda IM Copyright: ฉ 2006-2010 DeathAxe, Yasnovidyashii, Merlin, K. Romanov, Kreol This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. =============================================================================== File name : $HeadURL: https://userinfoex.googlecode.com/svn/trunk/psp_anniversary.cpp $ Revision : $Revision: 187 $ Last change on : $Date: 2010-09-08 16:05:54 +0400 (ะกั€, 08 ัะตะฝ 2010) $ Last change by : $Author: ing.u.horn $ =============================================================================== */ #include "commonheaders.h" #include "ctrl_annivedit.h" #include "ctrl_edit.h" #include "psp_base.h" /** * 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) { switch (uMsg) { case WM_INITDIALOG: { MAnnivDate* pDlgEditAnniv = (MAnnivDate*)lParam; if (!PtrIsValid(pDlgEditAnniv)) break; SetUserData(hDlg, lParam); // set icons if (DB::Setting::GetByte(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)); // 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: { MAnnivDate* pDlgEditAnniv = (MAnnivDate*)GetUserData(hDlg); // 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 (_tcsicmp(pszText, pDlgEditAnniv->Description())) { pDlgEditAnniv->Description(pszText); pDlgEditAnniv->SetFlags(MAnnivDate::MADF_HASCUSTOM|MAnnivDate::MADF_CHANGED); } } } case IDCANCEL: return EndDialog(hDlg, LOWORD(wParam)); } } } return FALSE; } /** * Dialog procedure for the anniversary 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 PSPProcAnniversary(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { 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, SIZEOF(idIcon)); } return FALSE; } } break; /* case 0 */ case EDIT_ANNIVERSARY_DATE: { CAnnivEditCtrl *pDateCtrl = CAnnivEditCtrl::GetObj(hDlg, 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; } /* switch (((LPNMHDR)lParam)->idFrom) */ } break; case WM_COMMAND: { switch (LOWORD(wParam)) { case EDIT_REMIND: { if (!PspIsLocked(hDlg) && HIWORD(wParam) == EN_UPDATE) { CAnnivEditCtrl *pDateCtrl = CAnnivEditCtrl::GetObj(hDlg, EDIT_ANNIVERSARY_DATE); 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) { CAnnivEditCtrl *pDateCtrl = CAnnivEditCtrl::GetObj(hDlg, EDIT_ANNIVERSARY_DATE); if (PtrIsValid(pDateCtrl)) { pDateCtrl->OnMenuPopup(); } } } return FALSE; /** * name: BTN_ADD * desc: creates a new dialog to add a new anniversary **/ case BTN_ADD: { CAnnivEditCtrl *pDateCtrl = CAnnivEditCtrl::GetObj(hDlg, EDIT_ANNIVERSARY_DATE); 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: { CAnnivEditCtrl *pDateCtrl = CAnnivEditCtrl::GetObj(hDlg, EDIT_ANNIVERSARY_DATE); 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: { CAnnivEditCtrl *pDateCtrl = CAnnivEditCtrl::GetObj(hDlg, EDIT_ANNIVERSARY_DATE); if (HIWORD(wParam) == BN_CLICKED && PtrIsValid(pDateCtrl)) { MAnnivDate *pCurrent; 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); }