#include "Mra.h" #include "MraIcons.h" void AddIcoLibItems(LPWSTR lpwszRootSectionName,LPWSTR lpwszSubSectionName,const GUI_DISPLAY_ITEM *pgdiItems,SIZE_T dwCount,HANDLE *hResult) { char szBuff[MAX_PATH]; WCHAR wszSection[MAX_PATH],wszPath[MAX_FILEPATH]; SKINICONDESC sid={0}; sid.cbSize = sizeof(sid); sid.pwszSection = wszSection; sid.pwszDefaultFile = wszPath; sid.cx = sid.cy = 16; sid.flags = SIDF_ALL_UNICODE; if (lpwszSubSectionName==NULL) lpwszSubSectionName=L""; GetModuleFileName(masMraSettings.hInstance,wszPath,SIZEOF(wszPath)); mir_sntprintf(wszSection,SIZEOF(wszSection),L"%s%s%s",lpwszRootSectionName,PROTOCOL_NAMEW,lpwszSubSectionName); for (SIZE_T i=0;i<dwCount;i++) { mir_snprintf(szBuff,SIZEOF(szBuff),"%s_%s",PROTOCOL_NAMEA,pgdiItems[i].lpszName); sid.pszName=szBuff; sid.pwszDescription=pgdiItems[i].lpwszDescr; sid.iDefaultIndex=-pgdiItems[i].defIcon; sid.hDefaultIcon=(HICON)LoadImage(masMraSettings.hInstance,MAKEINTRESOURCE(pgdiItems[i].defIcon),IMAGE_ICON,0,0,LR_SHARED); if (sid.hDefaultIcon==NULL) sid.hDefaultIcon=(HICON)LoadImage(NULL,MAKEINTRESOURCE(pgdiItems[i].defIcon),IMAGE_ICON,0,0,LR_SHARED); hResult[i] = Skin_AddIcon(&sid); } } void RemoveIcoLibItems(const GUI_DISPLAY_ITEM *pgdiItems,SIZE_T dwCount) { char szBuff[MAX_PATH]; for (SIZE_T i=0;i<dwCount;i++) { mir_snprintf(szBuff,SIZEOF(szBuff),"%s_%s",PROTOCOL_NAMEA,pgdiItems[i].lpszName); //***deb until 08 release //CallService(MS_SKIN2_REMOVEICON,0,(LPARAM)szBuff); } } HICON IconLibGetIcon(HANDLE hIcon) { return(IconLibGetIconEx(hIcon,LR_SHARED)); } HICON IconLibGetIconEx(HANDLE hIcon,DWORD dwFlags) { HICON hiIcon=NULL; if (hIcon) { hiIcon=(HICON)CallService(MS_SKIN2_GETICONBYHANDLE,0,(LPARAM)hIcon); if ((dwFlags&LR_SHARED)==0) { hiIcon=CopyIcon(hiIcon); } } return(hiIcon); } ////////////////////////////////////////////////////////////////////////////////////// void IconsLoad() { AddIcoLibItems(L"Protocols/",L"/MainMenu",gdiMenuItems,SIZEOF(gdiMenuItems),masMraSettings.hMainMenuIcons); AddIcoLibItems(L"Protocols/",L"/ContactMenu",gdiContactMenuItems,SIZEOF(gdiContactMenuItems),masMraSettings.hContactMenuIcons); // Advanced Status Icons initialization AddIcoLibItems(L"Protocols/",L"/Extra status",gdiExtraStatusIconsItems,SIZEOF(gdiExtraStatusIconsItems),masMraSettings.hAdvancedStatusIcons); } void IconsUnLoad() { RemoveIcoLibItems(gdiMenuItems,SIZEOF(gdiMenuItems)); bzero(masMraSettings.hMainMenuIcons,sizeof(masMraSettings.hMainMenuIcons)); RemoveIcoLibItems(gdiContactMenuItems,SIZEOF(gdiContactMenuItems)); bzero(masMraSettings.hContactMenuIcons,sizeof(masMraSettings.hContactMenuIcons)); // Advanced Status Icons initialization RemoveIcoLibItems(gdiExtraStatusIconsItems,SIZEOF(gdiExtraStatusIconsItems)); bzero(masMraSettings.hAdvancedStatusIcons,sizeof(masMraSettings.hAdvancedStatusIcons)); bzero(masMraSettings.hAdvancedStatusItems,sizeof(masMraSettings.hAdvancedStatusItems)); } void InitXStatusIcons() { int iCurIndex; char szBuff[MAX_PATH]; WCHAR wszSection[MAX_PATH],wszPath[MAX_FILEPATH]; SKINICONDESC sid={0}; sid.cbSize = sizeof(sid); sid.pwszSection=wszSection; sid.pwszDefaultFile=wszPath; sid.cx=sid.cy=16; sid.flags=SIDF_ALL_UNICODE; if (masMraSettings.hDLLXStatusIcons) GetModuleFileName(masMraSettings.hDLLXStatusIcons,wszPath,SIZEOF(wszPath)); else bzero(wszPath,sizeof(wszPath)); mir_sntprintf(wszSection,SIZEOF(wszSection),L"Status Icons/%s/Custom Status",PROTOCOL_NAMEW); masMraSettings.hXStatusAdvancedStatusIcons[0]=NULL; for (SIZE_T i=1;i<(MRA_XSTATUS_COUNT+1);i++) { mir_snprintf(szBuff,SIZEOF(szBuff),"%s_xstatus%ld",PROTOCOL_NAMEA,i); iCurIndex=(IDI_XSTATUS1-1+i); sid.pszName=szBuff; sid.pwszDescription=lpcszXStatusNameDef[i]; sid.iDefaultIndex=-iCurIndex; if (masMraSettings.hDLLXStatusIcons) { sid.hDefaultIcon=(HICON)LoadImage(masMraSettings.hDLLXStatusIcons,MAKEINTRESOURCE(iCurIndex),IMAGE_ICON,0,0,LR_SHARED); }else{ sid.hDefaultIcon=NULL; } masMraSettings.hXStatusAdvancedStatusIcons[i] = Skin_AddIcon(&sid); } } void DestroyXStatusIcons() { char szBuff[MAX_PATH]; for (SIZE_T i=1;i<(MRA_XSTATUS_COUNT+1);i++) { mir_snprintf(szBuff,SIZEOF(szBuff),"xstatus%ld",i); //***deb until 08 release //CallService(MS_SKIN2_REMOVEICON,0,(LPARAM)szBuff); } bzero(masMraSettings.hXStatusAdvancedStatusIcons,sizeof(masMraSettings.hXStatusAdvancedStatusIcons)); bzero(masMraSettings.hXStatusAdvancedStatusItems,sizeof(masMraSettings.hXStatusAdvancedStatusItems)); }