From 03dab2efa522cb0fc82051d4a8ba65f509f6b930 Mon Sep 17 00:00:00 2001 From: sje Date: Tue, 10 Jul 2007 06:05:33 +0000 Subject: added API and UI for classes git-svn-id: https://server.scottellis.com.au/svn/mim_plugs@263 4f64403b-2f21-0410-a795-97e2b3489a10 --- yapp/services.cpp | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 80 insertions(+), 1 deletion(-) (limited to 'yapp/services.cpp') diff --git a/yapp/services.cpp b/yapp/services.cpp index 046a104..3708a35 100644 --- a/yapp/services.cpp +++ b/yapp/services.cpp @@ -7,7 +7,7 @@ #include #include "str_utils.h" -#define NUM_SERVICES 13 +#define NUM_SERVICES 16 HANDLE hService[NUM_SERVICES]; HANDLE hMenuShowHistory, hMenuToggleOnOff; @@ -322,6 +322,76 @@ int PopUp_ShowHistory(WPARAM wParam, LPARAM lParam) return 0; } +int num_classes = 0; +POPUPCLASS *classes = 0; + +int RegisterPopupClass(WPARAM wParam, LPARAM lParam) { + POPUPCLASS *pc = (POPUPCLASS *)lParam; + pc->pszName = strdup(pc->pszName); + if(pc->flags & PCF_UNICODE) + pc->pwszDescription = wcsdup(pc->pwszDescription); + else + pc->pszDescription = strdup(pc->pszDescription); + + char setting[256]; + mir_snprintf(setting, 256, "%s/Timeout", pc->pszName); + pc->iSeconds = DBGetContactSettingWord(0, MODULE, setting, pc->iSeconds); + if(pc->iSeconds == (WORD)-1) pc->iSeconds = -1; + mir_snprintf(setting, 256, "%s/TextCol", pc->pszName); + pc->colorText = (COLORREF)DBGetContactSettingDword(0, MODULE, setting, (DWORD)pc->colorText); + mir_snprintf(setting, 256, "%s/BgCol", pc->pszName); + pc->colorBack = (COLORREF)DBGetContactSettingDword(0, MODULE, setting, (DWORD)pc->colorBack); + + classes = (POPUPCLASS *)realloc(classes, sizeof(POPUPCLASS) * (num_classes + 1)); + memcpy(classes + num_classes, pc, sizeof(POPUPCLASS)); + num_classes++; + return 0; +} + +int CreateClassPopup(WPARAM wParam, LPARAM lParam) { + POPUPDATACLASS *pdc = (POPUPDATACLASS *)lParam; + POPUPCLASS *pc = 0; + if(wParam) pc = (POPUPCLASS *)wParam; + else { + for(int i = 0; i < num_classes; i++) { + if(strcmp(classes[i].pszName, pdc->pszClassName) == 0) { + pc = &classes[i]; + break; + } + } + } + if(pc) { + if(pc->flags & PCF_UNICODE) { + POPUPDATAW pdw = {0}; + pdw.colorBack = pc->colorBack; + pdw.colorText = pc->colorText; + pdw.lchIcon = pc->hIcon; + pdw.iSeconds = pc->iSeconds; + pdw.PluginWindowProc = pc->PluginWindowProc; + + pdw.PluginData = pdc->PluginData; + wcsncpy(pdw.lpwzContactName, pdc->pwszTitle, MAX_CONTACTNAME); + wcsncpy(pdw.lpwzText, pdc->pwszText, MAX_SECONDLINE); + + CallService(MS_POPUP_ADDPOPUPW, (WPARAM)&pdw, 0); + } else { + POPUPDATAEX pd = {0}; + pd.colorBack = pc->colorBack; + pd.colorText = pc->colorText; + pd.lchIcon = pc->hIcon; + pd.iSeconds = pc->iSeconds; + pd.PluginWindowProc = pc->PluginWindowProc; + + pd.PluginData = pdc->PluginData; + strncpy(pd.lpzContactName, pdc->pszTitle, MAX_CONTACTNAME); + strncpy(pd.lpzText, pdc->pszText, MAX_SECONDLINE); + + CallService(MS_POPUP_ADDPOPUP, (WPARAM)&pd, 0); + } + } + return 0; +} + int PrebuildMenu(WPARAM wParam, LPARAM lParam) { return 0; } @@ -347,6 +417,9 @@ void InitServices() { hService[i++] = CreateServiceFunction(MS_POPUP_SHOWHISTORY, PopUp_ShowHistory); hService[i++] = CreateServiceFunction("PopUp/ToggleEnabled", TogglePopups); + hService[i++] = CreateServiceFunction(MS_POPUP_REGISTERCLASS, RegisterPopupClass); + hService[i++] = CreateServiceFunction(MS_POPUP_ADDPOPUPCLASS, CreateClassPopup); + CLISTMENUITEM menu = {0}; menu.cbSize=sizeof(menu); @@ -374,6 +447,12 @@ void InitServices() { } void DeinitServices() { + for(int i = 0; i < num_classes; i++) { + free(classes[i].pszName); + free(classes[i].pszDescription); + } + free(classes); num_classes = 0; + UnhookEvent(hEventBuildMenu); for(int i = 0; i < NUM_SERVICES; i++) -- cgit v1.2.3