From 7fd9fe181150f166a098eaf4e006f878c28cb770 Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Mon, 15 Feb 2010 05:51:01 +0300 Subject: sort --- extraimg.c | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 extraimg.c (limited to 'extraimg.c') diff --git a/extraimg.c b/extraimg.c new file mode 100644 index 0000000..59cd79e --- /dev/null +++ b/extraimg.c @@ -0,0 +1,118 @@ +/* + +"Spam Filter"-Plugin for Miranda IM + +Copyright 2003-2006 Heiko Herkenrath + +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 ("SpamFilter-License.txt"); if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + + +// -- Includes +#include "common.h" + +// -- Variables: Events/Services +HANDLE hHookExtraListRebuild = NULL; +HANDLE hHookExtraImageApply = NULL; +HANDLE hHookDbSettingChanged = NULL; + +// -- Variables +HANDLE hSpammerImage; + + +// ----------------------------------------- + + +void SetSpammerIcon(HANDLE hContact, BOOL bShow) +{ + IconExtraColumn iec; + + ZeroMemory(&iec, sizeof(iec)); + iec.cbSize = sizeof(iec); + iec.ColumnType = EXTRA_ICON_ADV2; + iec.hImage = bShow?hSpammerImage:INVALID_HANDLE_VALUE; + + CallService(MS_CLIST_EXTRA_SET_ICON, (WPARAM)hContact, (LPARAM)&iec); +} + + +static int ExtraImageApply(WPARAM wParam, LPARAM lParam) +{ + // Assign extra icon to contact + if (DBGetContactSettingByte((HANDLE)wParam, DB_MODULE_NAME, DB_SETTING_ISSPAMMER, (BYTE)FALSE)) + SetSpammerIcon((HANDLE)wParam, TRUE); + + return 0; +} + + +static int ExtraImageListRebuild(WPARAM wParam, LPARAM lParam) +{ + HANDLE hContact; + + // Add spam icon to image list of clist extra images + hSpammerImage = (HANDLE)CallService(MS_CLIST_EXTRA_ADD_ICON, (WPARAM)SkinGetIcon(DB_ICON_ISSPAMMER_SETTING, IDI_DEFAULT, FALSE), 0); + + // Update spammer icons for all contacts in list + for (hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDFIRST, 0, 0); hContact; hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM)hContact, 0)) + ExtraImageApply(wParam, lParam); + + return 0; +} + + +static int DbSettingChanged(WPARAM wParam, LPARAM lParam) +{ + DBCONTACTWRITESETTING* pdcws = (DBCONTACTWRITESETTING*)lParam; + + // Watch DB_SETTING_ISSPAMMER to be in sync with spammer icon + if (StrCmpA(pdcws->szModule, DB_MODULE_NAME) == 0) + if (StrCmpA(pdcws->szSetting, DB_SETTING_ISSPAMMER) == 0) + { + BOOL bIsSpammer = (pdcws->value.type==DBVT_DELETED) ? FALSE : (pdcws->value.bVal?TRUE:FALSE); + SetSpammerIcon((HANDLE)wParam, bIsSpammer); + NotifySpammerStateChanged((HANDLE)wParam, bIsSpammer); + + if (IsWindow(hwndSpammersInfo)) + PostMessage(hwndSpammersInfo, SFM_REFRESH_SPAMMERS, 0, 0); + } + + return 0; +} + + +// ------------------------------------ + + +void InitExtraImg(void) +{ + // Enable CList extra image support (in clist clones) + if (ServiceExists(MS_CLIST_EXTRA_SET_ICON) && ServiceExists(MS_CLIST_EXTRA_ADD_ICON)) + { + SkinAddNewIcon(DB_ICON_ISSPAMMER_SETTING, TranslateT("Spam Filter"), TranslateT("Spammer Indicator"), IDI_DEFAULT, FALSE); + + hHookExtraListRebuild = HookEvent(ME_CLIST_EXTRA_LIST_REBUILD, ExtraImageListRebuild); + hHookExtraImageApply = HookEvent(ME_CLIST_EXTRA_IMAGE_APPLY, ExtraImageApply); + hHookDbSettingChanged = HookEvent(ME_DB_CONTACT_SETTINGCHANGED, DbSettingChanged); + } +} + + +void UninitExtraImg(void) +{ + if (hHookExtraListRebuild) UnhookEvent(hHookExtraListRebuild); + if (hHookExtraImageApply) UnhookEvent(hHookExtraImageApply); + if (hHookDbSettingChanged) UnhookEvent(hHookDbSettingChanged); +} \ No newline at end of file -- cgit v1.2.3