// Copyright © 2010 SecureIM developers (baloo and others), sss // // 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. #include "commonheaders.h" HANDLE IconLibDefine(TCHAR* desc, TCHAR* section, char* ident, HICON icon, char* def_file, int def_idx, int size) { SKINICONDESC sid = {0}; HANDLE hIcon; if(!size) size = 16; sid.cbSize = SKINICONDESC_SIZE; sid.ptszSection = section; sid.ptszDescription = desc; sid.flags = SIDF_TCHAR; sid.pszName = ident; sid.pszDefaultFile = def_file; sid.iDefaultIndex = def_idx; sid.hDefaultIcon = icon; sid.cx = sid.cy = size; hIcon = (HANDLE)CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid); return hIcon; } void InitIconLib() { extern HINSTANCE hInst; char lib[MAX_PATH]; GetModuleFileNameA(hInst, lib, MAX_PATH); TCHAR *module = mir_a2t(szGPGModuleName); IconLibDefine(_T("Secured"), module, "secured", NULL, lib, -IDI_SECURED,0); IconLibDefine(_T("Unsecured"), module, "unsecured", NULL, lib, -IDI_UNSECURED,0); mir_free(module); } HICON IconLibGetIcon(const char* ident) { return (HICON)CallService(MS_SKIN2_GETICON, 0, (LPARAM)ident); } void IconLibReleaseIcon(const char* ident) { CallService(MS_SKIN2_RELEASEICON, 0, (LPARAM)ident); } HANDLE IconLibHookIconsChanged(MIRANDAHOOK hook) { return HookEvent(ME_SKIN2_ICONSCHANGED, hook); } // обновляет иконки в clist и в messagew void ShowStatusIcon(HANDLE hContact,bool enabled) { extern HANDLE g_hCLIcon; extern IconExtraColumn g_IEC; HANDLE getMetaContact(HANDLE hContact); HANDLE hMC = getMetaContact(hContact); HICON icon = NULL; //need to get icon here if(g_hCLIcon) { // обновить иконки в clist // IconExtraColumn iec=g_IEC.hImage = (HANDLE) CallService(MS_CLIST_EXTRA_ADD_ICON, (WPARAM)icon, (LPARAM)0);; // if(g_hCLIcon) { // ExtraIcon_SetIcon(g_hCLIcon, hContact, iec.hImage); // if(hMC) // ExtraIcon_SetIcon(g_hCLIcon, hMC, iec.hImage); } } if(ServiceExists(MS_MSG_MODIFYICON)) { // обновить иконки в srmm // StatusIconData sid; // memset(&sid,0,sizeof(sid)); // sid.cbSize = sizeof(sid); // sid.szModule = (char*)szGPGModuleName; // sid.flags |= MBF_HIDDEN; // отключаем все ненужные иконки // CallService(MS_MSG_MODIFYICON, (WPARAM)hContact, (LPARAM)&sid); // if( hMC ) // CallService(MS_MSG_MODIFYICON, (WPARAM)hMC, (LPARAM)&sid); } } void ShowStatusIcon(HANDLE hContact) { ShowStatusIcon(hContact,isContactSecured(hContact)); } void ShowStatusIconNotify(HANDLE hContact) { bool enabled = isContactSecured(hContact); // NotifyEventHooks(g_hEvent[(mode&SECURED)!=0], (WPARAM)hContact, 0); ShowStatusIcon(hContact,enabled); } void RefreshContactListIcons(void) { HANDLE hContact; extern HANDLE g_hCLIcon; // CallService(MS_CLUI_LISTBEGINREBUILD,0,0); if( !g_hCLIcon ) { hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDFIRST, 0, 0); while (hContact) { // сначала все выключаем ShowStatusIcon(hContact,0); hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM)hContact, 0); } } hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDFIRST, 0, 0); while (hContact) { // и снова зажигаем иконку ShowStatusIcon(hContact); hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM)hContact, 0); } // CallService(MS_CLUI_LISTENDREBUILD,0,0); }