/** * Displays a popup * * @param hContact - contact to display popup for * @param eventType - indicates which popup settings to apply * @param DaysToAnniv - days left until anniversary occures * @param pszDesc - this is the headline * @param szMsg - message to display * * @return return value of the popup service **/ static INT NotifyWithPopup(HANDLE hContact, CEvent::EType eventType, INT DaysToAnniv, LPCTSTR pszDesc, LPCTSTR pszMsg) { if (gRemindOpts.bPopups) { POPUPDATAT_V2 ppd; ZeroMemory(&ppd, sizeof(POPUPDATAT_V2)); ppd.PluginWindowProc = (WNDPROC)PopupWindowProc; ppd.iSeconds = (INT)DB::Setting::GetByte(SET_POPUP_DELAY, 0); if (hContact) { ppd.lchContact = hContact; mir_sntprintf(ppd.lptzContactName, SIZEOF(ppd.lptzContactName), _T("%s - %s"), TranslateTS(pszDesc), DB::Contact::DisplayName(hContact)); } else { mir_tcsncpy(ppd.lptzContactName, TranslateT("Reminder"), SIZEOF(ppd.lptzContactName)); } mir_tcsncpy(ppd.lptzText, pszMsg, MAX_SECONDLINE); ppd.lchIcon = GetAnnivIcon(CEvent(eventType, DaysToAnniv)); switch (eventType) { case CEvent::BIRTHDAY: switch (DB::Setting::GetByte(SET_POPUP_BIRTHDAY_COLORTYPE, POPUP_COLOR_CUSTOM)) { case POPUP_COLOR_WINDOWS: ppd.colorBack = GetSysColor(COLOR_BTNFACE); ppd.colorText = GetSysColor(COLOR_WINDOWTEXT); break; case POPUP_COLOR_CUSTOM: ppd.colorBack = DB::Setting::GetDWord(SET_POPUP_BIRTHDAY_COLOR_BACK, RGB(192,180,30)); ppd.colorText = DB::Setting::GetDWord(SET_POPUP_BIRTHDAY_COLOR_TEXT, 0); break; } break; case CEvent::ANNIVERSARY: switch (DB::Setting::GetByte(SET_POPUP_ANNIVERSARY_COLORTYPE, POPUP_COLOR_CUSTOM)) { case POPUP_COLOR_WINDOWS: ppd.colorBack = GetSysColor(COLOR_BTNFACE); ppd.colorText = GetSysColor(COLOR_WINDOWTEXT); break; case POPUP_COLOR_CUSTOM: ppd.colorBack = DB::Setting::GetDWord(SET_POPUP_ANNIVERSARY_COLOR_BACK, RGB(90, 190, 130)); ppd.colorText = DB::Setting::GetDWord(SET_POPUP_ANNIVERSARY_COLOR_TEXT, 0); break; } } return PUAddPopUpT(&ppd); } return 1; }
void ShowPopup(const TCHAR* line1, const TCHAR* line2, int timeout, const HANDLE hContact) { if(CallService(MS_SYSTEM_TERMINATED, 0, 0)) return; if ( !options.bHavePopups) { TCHAR title[256]; _stprintf(title, _T("%s Message"), _T(MODULENAME)); if(line1 && line2) { TCHAR *message = new TCHAR[_tcslen(line1) + _tcslen(line2) + 3]; // newline and null terminator _stprintf(message, _T("%s\r\n%s"), line1, line2); MessageBox( NULL, message, title, MB_OK | MB_ICONINFORMATION ); delete message; } else if(line1) { MessageBox( NULL, line1, title, MB_OK | MB_ICONINFORMATION ); } else if(line2) { MessageBox( NULL, line2, title, MB_OK | MB_ICONINFORMATION ); } return; } POPUPDATAT ppd = {0}; //memset((void *)&ppd, 0, sizeof(POPUPDATAT)); ppd.lchContact = hContact; ppd.lchIcon = NULL; if(line1 && line2) { _tcsncpy( ppd.lptzContactName, line1, MAX_CONTACTNAME-1 ); _tcsncpy( ppd.lptzText, line2, MAX_SECONDLINE-1 ); } else if(line1) { if (PUIsSecondLineShown()) _tcsncpy( ppd.lptzText, line1, MAX_SECONDLINE-1 ); else _tcsncpy( ppd.lptzContactName, line1, MAX_CONTACTNAME-1 ); } else if(line2) { if (PUIsSecondLineShown()) _tcsncpy( ppd.lptzText, line2, MAX_SECONDLINE-1 ); else _tcsncpy( ppd.lptzContactName, line2, MAX_CONTACTNAME-1 ); } ppd.iSeconds = timeout; ppd.PluginWindowProc = NULL; ppd.PluginData = NULL; PUAddPopUpT(&ppd); }
void ShowPopup(XSTATUSCHANGE *xsc) { DBVARIANT dbv; char szSetting[64]; POPUPDATAT ppd = {0}; ppd.lchContact = xsc->hContact; switch(xsc->type) { case TYPE_JABBER_MOOD: case TYPE_JABBER_ACTIVITY: { mir_snprintf(szSetting, SIZEOF(szSetting), "%s/%s/%s", xsc->szProto, (xsc->type == TYPE_JABBER_MOOD) ? "mood" : "activity", "icon"); if (!DBGetContactSettingString(xsc->hContact, "AdvStatus", szSetting, &dbv)) { ppd.lchIcon = (HICON)CallService(MS_SKIN2_GETICON, 0, (LPARAM)dbv.pszVal); DBFreeVariant(&dbv); } break; } case TYPE_ICQ_XSTATUS: { int statusId = DBGetContactSettingByte(xsc->hContact, xsc->szProto, "XStatusId", 0); ppd.lchIcon = (HICON)CallProtoService(xsc->szProto, PS_ICQ_GETCUSTOMSTATUSICON, statusId, LR_SHARED); } } if (ppd.lchIcon == NULL) ppd.lchIcon = LoadSkinnedProtoIcon(xsc->szProto, DBGetContactSettingWord(xsc->hContact, xsc->szProto, "Status", ID_STATUS_ONLINE)); switch (opt.Colors) { case POPUP_COLOR_OWN: ppd.colorBack = DBGetContactSettingDword(0, MODULE, "40081bg", COLOR_BG_AVAILDEFAULT); ppd.colorText = DBGetContactSettingDword(0, MODULE, "40081tx", COLOR_TX_DEFAULT); break; case POPUP_COLOR_WINDOWS: ppd.colorBack = GetSysColor(COLOR_BTNFACE); ppd.colorText = GetSysColor(COLOR_WINDOWTEXT); break; case POPUP_COLOR_POPUP: ppd.colorBack = ppd.colorText = 0; break; } _tcscpy(ppd.lptzContactName, (TCHAR *)CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM)xsc->hContact, GSMDF_TCHAR)); if (opt.ShowGroup) //add group name to popup title { if (!DBGetContactSettingTString(xsc->hContact, "CList", "Group", &dbv)) { _tcscat(ppd.lptzContactName, _T(" (")); _tcscat(ppd.lptzContactName, dbv.ptszVal); _tcscat(ppd.lptzContactName, _T(")")); DBFreeVariant(&dbv); } } // cut message if needed if (opt.PTruncateMsg && (opt.PMsgLen > 0) && xsc->stzText && (_tcslen(xsc->stzText) > opt.PMsgLen)) { TCHAR buff[MAX_TEXT_LEN + 3]; _tcsncpy(buff, xsc->stzText, opt.PMsgLen); buff[opt.PMsgLen] = 0; _tcscat(buff, _T("...")); mir_free(xsc->stzText); xsc->stzText = mir_tstrdup(buff); } TCHAR *Template; switch (xsc->action) { case NOTIFY_NEW_XSTATUS: Template = templates.PopupNewXstatus; break; case NOTIFY_NEW_MESSAGE: Template = templates.PopupNewMsg; break; case NOTIFY_REMOVE: Template = templates.PopupRemove; break; } TCHAR stzPopupText[2*MAX_TEXT_LEN]; ReplaceVars(xsc, Template, templates.PopupDelimiter, stzPopupText); _tcsncpy(ppd.lptzText, stzPopupText, SIZEOF(ppd.lptzText)); ppd.lptzText[SIZEOF(ppd.lptzText) - 1] = 0; ppd.PluginWindowProc = (WNDPROC)PopupDlgProc; ppd.iSeconds = opt.PopupTimeout; PUAddPopUpT(&ppd); }