diff options
Diffstat (limited to 'plugins/IgnoreState/src')
| -rw-r--r-- | plugins/IgnoreState/src/Version.h | 20 | ||||
| -rw-r--r-- | plugins/IgnoreState/src/commonheaders.h | 114 | ||||
| -rw-r--r-- | plugins/IgnoreState/src/main.cpp | 288 | ||||
| -rw-r--r-- | plugins/IgnoreState/src/options.cpp | 278 | ||||
| -rw-r--r-- | plugins/IgnoreState/src/resource.h | 27 | 
5 files changed, 727 insertions, 0 deletions
diff --git a/plugins/IgnoreState/src/Version.h b/plugins/IgnoreState/src/Version.h new file mode 100644 index 0000000000..bdef9574cd --- /dev/null +++ b/plugins/IgnoreState/src/Version.h @@ -0,0 +1,20 @@ +#define __MAJOR_VERSION				0
 +#define __MINOR_VERSION				0
 +#define __RELEASE_NUM				3
 +#define __BUILD_NUM					0
 +
 +#define __FILEVERSION_STRING		__MAJOR_VERSION,__MINOR_VERSION,__RELEASE_NUM,__BUILD_NUM
 +#define __FILEVERSION_DOTS			__MAJOR_VERSION.__MINOR_VERSION.__RELEASE_NUM.__BUILD_NUM
 +
 +#define __STRINGIFY_IMPL(x)			#x
 +#define __STRINGIFY(x)				__STRINGIFY_IMPL(x)
 +#define __VERSION_STRING			__STRINGIFY(__FILEVERSION_DOTS)
 +
 +#define __PLUGIN_NAME				"IgnoreState"
 +#define __INTERNAL_NAME				"IgnoreState"
 +#define __FILENAME					"IgnoreState.dll"
 +#define __DESCRIPTION 				"Show ignore state of contact in contacts list."
 +#define __AUTHOR					"Kildor"
 +#define __AUTHOREMAIL				"kostia@ngs.ru"
 +#define __AUTHORWEB					"http://kildor.miranda.im/"
 +#define __COPYRIGHT					"© 2009-2010 Kostia Romanov"
 diff --git a/plugins/IgnoreState/src/commonheaders.h b/plugins/IgnoreState/src/commonheaders.h new file mode 100644 index 0000000000..e21e302b69 --- /dev/null +++ b/plugins/IgnoreState/src/commonheaders.h @@ -0,0 +1,114 @@ +/*
 +   IgnoreState plugin for Miranda-IM (www.miranda-im.org)
 +   (c) 2010 by Kildor
 +
 +   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
 +
 +*/
 +
 +#ifndef COMMHEADERS_H
 +#define COMMHEADERS_H
 +
 +#define MIRANDA_VER    0x0A00
 +//#define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers
 +
 +#define _CRT_SECURE_NO_WARNINGS
 +#define _WIN32_WINNT 0x0501
 +
 +#ifndef _WIN32_IE
 +#define _WIN32_IE 0x0501
 +#endif
 +
 +
 +//needed by m_utils.h
 +#include <stdio.h>
 +
 +// needed by m_icolib.h > r9256
 +#include <stddef.h>
 +
 +
 +//Miranda API headers
 +#include <windows.h>
 +#include <win2k.h>
 +#include <commctrl.h>
 +#include <newpluginapi.h>
 +#include <m_database.h>
 +#include <m_system.h>
 +//#include <m_protocols.h>
 +#include <m_utils.h>
 +#include <m_ignore.h>
 +#include <m_clist.h>
 +#include <m_skin.h>
 +#include <m_options.h>
 +#include <m_langpack.h>
 +#include <m_icolib.h>
 +#include "resource.h"
 +#include "Version.h"
 +
 +//external SDK headers
 +#include <m_cluiframes.h>
 +#include <m_extraicons.h>
 +
 +static const int DefaultSlot = EXTRA_ICON_PROTO;
 +#define MODULENAME "IgnoreState"
 +
 +/* 3f6acec5-df0e-4d33-a272-e3630addb6c8 */
 +#define MIID_IGNORESRATE {0x3f6acec5, 0xdf0e, 0x4d33, {0xa2, 0x72, 0xe3, 0x63, 0x0a, 0xdd, 0xb6, 0xc8}}
 +
 +static struct
 +{
 +	TCHAR*  szDescr;
 +	char*  szName;
 +	int    defIconID;
 +	HANDLE hIconLibItem;
 +} iconList[] =
 +{
 +  { LPGENT( "Full Ignore" ),    "ignore_full", IDI_IFULL  },
 +  { LPGENT( "Partial Ignore" ), "ignore_part", IDI_IPART  },
 +  { LPGENT( "Message Ignore" ), "ignore_mess", IDI_IMESS  },
 +};
 +
 +typedef struct {
 +	TCHAR* name;
 +	int   type;
 +	int   icon;
 +	bool  filtered;
 +} IGNOREITEMS;
 +
 +static IGNOREITEMS ii[] = {
 +	{ LPGENT("All"),            IGNOREEVENT_ALL,           SKINICON_OTHER_FILLEDBLOB },
 +	{ LPGENT("Messages"),       IGNOREEVENT_MESSAGE,       SKINICON_EVENT_MESSAGE    },
 +	{ LPGENT("URL"),            IGNOREEVENT_URL,           SKINICON_EVENT_URL        },
 +	{ LPGENT("Files"),          IGNOREEVENT_FILE,          SKINICON_EVENT_FILE       },
 +	{ LPGENT("User Online"),    IGNOREEVENT_USERONLINE,    SKINICON_OTHER_USERONLINE },
 +	{ LPGENT("Authorization"),  IGNOREEVENT_AUTHORIZATION, SKINICON_OTHER_MIRANDA    },
 +	{ LPGENT("You Were Added"), IGNOREEVENT_YOUWEREADDED,  SKINICON_OTHER_ADDCONTACT },
 +	{ LPGENT("Typing Notify"),  IGNOREEVENT_TYPINGNOTIFY,  SKINICON_OTHER_TYPING     }
 +};
 +
 +static int isExtraiconsUsed = 0;
 +static byte bUseMirandaSettings;
 +
 +extern HINSTANCE g_hInst;
 +extern int onExtraImageApplying(WPARAM wParam, LPARAM lParam);
 +extern int onExtraImageListRebuild(WPARAM wParam, LPARAM lParam);
 +extern int onOptInitialise(WPARAM wParam, LPARAM lParam);
 +extern BOOL checkState(int type);
 +extern VOID fill_filter();
 +extern HANDLE hExtraIcon;
 +extern IconExtraColumn g_IECAuth, g_IECGrant, g_IECAuthGrant, g_IECClear;
 +extern INT clistIcon;
 +
 +#endif //COMMHEADERS_H
 diff --git a/plugins/IgnoreState/src/main.cpp b/plugins/IgnoreState/src/main.cpp new file mode 100644 index 0000000000..c68e6f6d2d --- /dev/null +++ b/plugins/IgnoreState/src/main.cpp @@ -0,0 +1,288 @@ +/*
 +   IgnoreState plugin for Miranda-IM (www.miranda-im.org)
 +   (c) 2010 by Kildor
 +
 +   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"
 +
 +HINSTANCE g_hInst;
 +
 +HANDLE hHookModulesLoaded = NULL, hSystemOKToExit = NULL, hOptInitialise = NULL, hIcoLibIconsChanged = NULL;
 +HANDLE hHookExtraIconsRebuild = NULL, hHookExtraIconsApply = NULL, hContactSettingChanged = NULL;
 +HANDLE hPrebuildContactMenu = NULL;
 +HANDLE hExtraIcon = NULL;
 +int hLangpack;
 +
 +INT currentFilter = 0;
 +//static int bUseMirandaSettings = 0;
 +
 +IconExtraColumn g_IECIgnoreFull = {0};
 +IconExtraColumn g_IECIgnorePart = {0};
 +IconExtraColumn g_IECIgnoreMess = {0};
 +IconExtraColumn g_IECClear = {0};
 +
 +
 +
 +
 +INT clistIcon = 0; //Icon slot to use
 +//DWORD dMask = IGNOREEVENT_USERONLINE; // by default hide online notification
 +
 +//DWORD dIgnore = 0x0;
 +
 +PLUGININFOEX pluginInfo={
 +	sizeof(PLUGININFOEX),
 +	__PLUGIN_NAME,
 +	PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM),
 +	__DESCRIPTION,
 +	__AUTHOR,
 +	__AUTHOREMAIL,
 +	__COPYRIGHT,
 +	__AUTHORWEB,
 +	UNICODE_AWARE,
 +	{0xa6872bcd, 0xf2a1, 0x41b8, {0xb2, 0xf1, 0xdd, 0x7c, 0xec, 0x05, 0x57, 0x34}}
 +	// a6872bcd-f2a1-41b8-b2f1-dd7cec055734
 +};
 +
 +extern "C" BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
 +{
 +   g_hInst = hinstDLL;
 +   return TRUE;
 +}
 +
 +// плагининфо
 +extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion)
 +{
 +	return &pluginInfo;
 +}
 +
 +extern "C" __declspec(dllexport) const MUUID MirandaInterfaces[] = {MIID_IGNORESRATE, MIID_LAST};
 +
 +int onSystemOKToExit(WPARAM wParam,LPARAM lParam)
 +{
 +   UnhookEvent(hHookModulesLoaded);
 +   UnhookEvent(hHookExtraIconsRebuild);
 +   UnhookEvent(hHookExtraIconsApply);
 +   UnhookEvent(hOptInitialise);
 +   UnhookEvent(hSystemOKToExit);
 +   if (hIcoLibIconsChanged) UnhookEvent(hIcoLibIconsChanged);
 +	if (hContactSettingChanged)
 +		UnhookEvent(hContactSettingChanged);
 +
 +   return 0;
 +}
 +
 +
 +inline BOOL checkState(int type)
 +{
 +	return ((currentFilter>>(type-1))&1);
 +}
 +
 +
 +INT_PTR isIgnored(HANDLE hContact, int type)
 +{
 +	int i = 0, all = 0, filtered = 0;
 +
 +	if (type == IGNOREEVENT_ALL)
 +	{
 +		int cii = SIZEOF(ii);
 +		for (i = 1; i < cii; i++)
 +		{
 +			if (isIgnored(hContact, ii[i].type))
 +			{
 +//				checkState(ii[i].type) ? filtered++ : all++;
 +				ii[i].filtered ? filtered++ : all++;
 +			}
 +		}
 +		return (all+filtered == cii-1) ? 1 : (all > 0 ? -1 : 0) ;
 +	}
 +	else
 +		return CallService(MS_IGNORE_ISIGNORED, (WPARAM)hContact, (LPARAM)type);
 +}
 +
 +int onExtraImageApplying(WPARAM wParam, LPARAM lParam)
 +{
 +	HANDLE hContact = (HANDLE)wParam;
 +	int ignore = isIgnored(hContact, IGNOREEVENT_ALL);
 +	if (hExtraIcon != NULL)
 +	{
 +		if (ignore == 1)
 +		{
 +		ExtraIcon_SetIcon(hExtraIcon, hContact, "ignore_full");
 +		}
 +  	else if (ignore == 0)
 +	  {
 +		ExtraIcon_SetIcon(hExtraIcon, hContact, "");
 +  	}
 +  	else if (isIgnored((HANDLE)wParam, IGNOREEVENT_MESSAGE))
 +  	{
 +		ExtraIcon_SetIcon(hExtraIcon, hContact, "ignore_mess");
 +	  }
 +  	else
 +	  {
 +		ExtraIcon_SetIcon(hExtraIcon, hContact, "ignore_part");
 +  	}
 +  }
 +  else
 +  {
 +		if (ignore == 1)
 +		{
 +			CallService(MS_CLIST_EXTRA_SET_ICON, (WPARAM) wParam, (LPARAM) &g_IECIgnoreFull);
 +		}
 +		else if (ignore == 0)
 +	  {
 +			CallService(MS_CLIST_EXTRA_SET_ICON, (WPARAM) wParam, (LPARAM) &g_IECClear);
 +	 	}
 +		else if (isIgnored((HANDLE)wParam, IGNOREEVENT_MESSAGE))
 +		{
 +			CallService(MS_CLIST_EXTRA_SET_ICON, (WPARAM) wParam, (LPARAM) &g_IECIgnoreMess);
 +		}
 +		else
 +		{
 +			CallService(MS_CLIST_EXTRA_SET_ICON, (WPARAM) wParam, (LPARAM) &g_IECIgnorePart);
 +		}
 +	}
 +  return 0;
 +}
 +
 +
 +int onExtraImageListRebuild(WPARAM wParam, LPARAM lParam)
 +{
 +  g_IECIgnoreMess.cbSize = sizeof(IconExtraColumn);
 +  g_IECIgnoreMess.ColumnType = clistIcon;
 +  g_IECIgnorePart.cbSize = sizeof(IconExtraColumn);
 +  g_IECIgnorePart.ColumnType = clistIcon;
 +  g_IECIgnoreFull.cbSize = sizeof(IconExtraColumn);
 +  g_IECIgnoreFull.ColumnType = clistIcon;
 +
 +  if (ServiceExists(MS_CLIST_EXTRA_ADD_ICON))
 +  {
 +      g_IECIgnoreMess.hImage = (HANDLE)CallService(MS_CLIST_EXTRA_ADD_ICON, (WPARAM)(HICON) CallService(MS_SKIN2_GETICON, 0, (LPARAM)"ignore_mess"), (LPARAM)0);
 +      g_IECIgnorePart.hImage = (HANDLE)CallService(MS_CLIST_EXTRA_ADD_ICON, (WPARAM)(HICON) CallService(MS_SKIN2_GETICON, 0, (LPARAM)"ignore_part"), (LPARAM)0);
 +      g_IECIgnoreFull.hImage = (HANDLE)CallService(MS_CLIST_EXTRA_ADD_ICON, (WPARAM)(HICON) CallService(MS_SKIN2_GETICON, 0, (LPARAM)"ignore_full"), (LPARAM)0);
 +  }
 +  return 0;
 +}
 +
 +static VOID init_icolib (void)
 +{
 +	SKINICONDESC sid = {0};
 +	ZeroMemory(&sid, sizeof(sid));
 +	TCHAR tszFile[MAX_PATH];
 +	sid.cbSize = sizeof(sid);
 +	sid.flags = SIDF_ALL_TCHAR;
 +	int i = 0;
 +
 +	sid.ptszSection = _T(MODULENAME);
 +	GetModuleFileName(g_hInst, tszFile, MAX_PATH);
 +	sid.ptszDefaultFile = tszFile;
 +
 +	for ( i = 0; i < SIZEOF(iconList); i++ ) {
 +		sid.pszName = iconList[i].szName;
 +		sid.ptszDescription =  iconList[i].szDescr;
 +		sid.iDefaultIndex = -iconList[i].defIconID;
 +		iconList[i].hIconLibItem = Skin_AddIcon(&sid);
 +	}
 +}
 +
 +VOID fill_filter(void)
 +{
 +	bUseMirandaSettings = DBGetContactSettingByte(NULL, MODULENAME, "UseMirandaSettings", 0);
 +
 +	currentFilter = bUseMirandaSettings ? DBGetContactSettingDword(NULL, "Ignore", "Default1", 0) : DBGetContactSettingDword(NULL, MODULENAME, "Filter", 0x8);
 +
 +	int i = 0, cii = SIZEOF(ii);
 +
 +	for (; i< cii; i++)
 +  {
 +	  if (checkState((ii[i].type)))
 +  		ii[i].filtered =  true;
 +  	else
 +  		ii[i].filtered =  false;
 +  }
 +}
 +
 +int onModulesLoaded(WPARAM wParam,LPARAM lParam)
 +{
 +	hOptInitialise = HookEvent(ME_OPT_INITIALISE, onOptInitialise);
 +
 +	//IcoLib support
 +	init_icolib();
 +	fill_filter();
 +
 +	hExtraIcon = ExtraIcon_Register("ignore", "IgnoreState", "ignore_full");
 +
 +	if (hExtraIcon != NULL)
 +	{
 +		// Set initial value for all contacts
 +		HANDLE hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDFIRST, 0, 0);
 +		while (hContact != NULL)
 +		{
 +			onExtraImageApplying((WPARAM)hContact, NULL);
 +			hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM) hContact, 0);
 +		}
 +	}
 +	else
 +	{
 +		hIcoLibIconsChanged = HookEvent(ME_SKIN2_ICONSCHANGED, onExtraImageListRebuild);
 +		hHookExtraIconsRebuild = HookEvent(ME_CLIST_EXTRA_LIST_REBUILD, onExtraImageListRebuild);
 +		hHookExtraIconsApply = HookEvent(ME_CLIST_EXTRA_IMAGE_APPLY, onExtraImageApplying);
 +		onExtraImageListRebuild(0,0);
 +	}
 +
 +	return 0;
 +}
 +
 +
 +int onContactSettingChanged(WPARAM wParam,LPARAM lParam)
 +{
 +	DBCONTACTWRITESETTING *cws=(DBCONTACTWRITESETTING*)lParam;
 +	if (!lstrcmpA(cws->szModule,"Ignore") & !lstrcmpA(cws->szSetting,"Mask1")) {
 +		onExtraImageApplying(wParam, lParam);
 +	}
 +	if ((HANDLE)wParam ==0)
 +		if (!lstrcmpA(cws->szModule,MODULENAME) & !lstrcmpA(cws->szSetting,"Filter") ||
 +			bUseMirandaSettings && (!lstrcmpA(cws->szModule,"Ignore") & !lstrcmpA(cws->szSetting,"Default1"))
 +			) {
 +			fill_filter();
 +		}
 +
 +	return 0;
 +}
 +
 +extern "C" int __declspec(dllexport) Load(void)
 +{
 +
 +	mir_getLP(&pluginInfo);
 +
 +	hHookModulesLoaded = HookEvent(ME_SYSTEM_MODULESLOADED, onModulesLoaded);
 +	hSystemOKToExit = HookEvent(ME_SYSTEM_OKTOEXIT,onSystemOKToExit);
 +	hContactSettingChanged = HookEvent(ME_DB_CONTACT_SETTINGCHANGED, onContactSettingChanged);
 +
 +	clistIcon = DBGetContactSettingByte(NULL, MODULENAME, "AdvancedIcon", DefaultSlot);
 +
 +	g_IECClear.cbSize = sizeof(IconExtraColumn);
 +	g_IECClear.ColumnType = clistIcon;
 +	g_IECClear.hImage = (HANDLE) -1;
 +
 +	return 0;
 +}
 +
 +extern "C" int __declspec(dllexport) Unload(void)
 +{
 +	return 0;
 +}
 diff --git a/plugins/IgnoreState/src/options.cpp b/plugins/IgnoreState/src/options.cpp new file mode 100644 index 0000000000..eda6b6ffea --- /dev/null +++ b/plugins/IgnoreState/src/options.cpp @@ -0,0 +1,278 @@ +/*
 +   IgnoreState plugin for Miranda-IM (www.miranda-im.org)
 +   (c) 2010 by Kildor
 +
 +   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"
 +
 +//extern byte bUseAuthIcon, bUseGrantIcon, bContactMenuItem, bIconsForRecentContacts;
 +
 +//#define  EXTRA_ICON_RES0	0	// only used by nicer
 +//#define  EXTRA_ICON_EMAIL	1
 +//#define  EXTRA_ICON_WEB		2
 +//#define  EXTRA_ICON_SMS		3
 +//#define  EXTRA_ICON_ADV1	4
 +//#define  EXTRA_ICON_ADV2	5
 +//#define  EXTRA_ICON_ADV3	6
 +//#define  EXTRA_ICON_CLIENT	7
 +//#define  EXTRA_ICON_ADV4	8
 +//#define  EXTRA_ICON_RES1	9	// only used by nicer
 +//#define  EXTRA_ICON_PROTO	9	// used by mwclist and modern
 +//#define  EXTRA_ICON_RES2	10	// only used by nicer
 +//#define  EXTRA_ICON_VISMODE	10	// only used by modern
 +
 +#define MS_SKINENG_DRAWICONEXFIX "SkinEngine/DrawIconEx_Fix"
 +
 +enum {
 +	clist_none,
 +	clist_modern,
 +	clist_nicer
 +};
 +
 +TCHAR* szAdvancedIconsModern[] = {
 +	_T("E-mail"),
 +	_T("Web page"),
 +	_T("Phone/SMS"),
 +	_T("Advanced #1"),
 +	_T("Advanced #2"),
 +	_T("Advanced #3"),
 +	_T("Client"),
 +	_T("Advanced #4"),
 +	_T("Protocol"),
 +	_T("Visibility/Chat activity")
 +};
 +//const int cAdvancedIconsModern = sizeof(szAdvancedIconsModern) / sizeof(szAdvancedIconsModern[0]);
 +
 +TCHAR* szAdvancedIconsNicer[] = {
 +	_T("Reserved"),
 +	_T("E-mail"),
 +	_T("Homepage"),
 +	_T("Telephone"),
 +	_T("Advanced #1"),
 +	_T("Advanced #2"),
 +	_T("Client"),
 +	_T("Advanced #3"),
 +	_T("Advanced #4"),
 +	_T("Reserved #1"),
 +	_T("Reserved #2")
 +	};
 +//const int cAdvancedIconsNicer = sizeof(szAdvancedIconsNicer) / sizeof(szAdvancedIconsNicer[0]);
 +
 +INT_PTR CALLBACK DlgProcOptions(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
 +{
 +	HIMAGELIST himlButtonIcons=NULL;
 +	INT bInitializing = 0;
 +	INT usedClist = clist_none;
 +	INT cAdvancedIcons;
 +	isExtraiconsUsed = ServiceExists(MS_EXTRAICON_REGISTER);
 +//	const char **szAdvancedIcons;
 +	HWND hTree=GetDlgItem(hwndDlg,IDC_FILTER);
 +
 +	switch (msg)
 +	{
 +		case WM_INITDIALOG:
 +		{
 +			TranslateDialogDefault(hwndDlg);
 +			bInitializing = 1;
 +			fill_filter();
 +			if (ServiceExists(MS_CLIST_EXTRA_ADD_ICON))
 +			{
 +				if (hExtraIcon == NULL)
 +				{
 +					if (ServiceExists(MS_SKINENG_DRAWICONEXFIX))
 +					{ // modern?
 +						cAdvancedIcons  = SIZEOF(szAdvancedIconsModern);
 +						usedClist = clist_modern;
 +					}
 +					else
 +					{
 +						if (ServiceExists("CLN/About"))
 +						{
 +							usedClist = clist_nicer;
 +							cAdvancedIcons = SIZEOF(szAdvancedIconsNicer);
 +						}
 +						else
 +						{
 +							usedClist = clist_modern;
 +							cAdvancedIcons  = SIZEOF(szAdvancedIconsModern) - 1; // mw doesn`t have last modern extraicon
 +						}
 +					}
 +				}
 +				else
 +				{
 +				SendDlgItemMessage(hwndDlg,IDC_NOTICE, WM_SETTEXT,0,(LPARAM)TranslateT("Extraicons plugin is used, use Contact list > Extraicons for customize."));
 +				ShowWindow(GetDlgItem(hwndDlg, IDC_NOTICE), SW_SHOW);
 +				EnableWindow(GetDlgItem(hwndDlg, IDC_ADVICON), 0);
 +				}
 +			}
 +			else
 +			{
 +				cAdvancedIcons = 0;
 +//				SendDlgItemMessage(hwndDlg,IDC_USED_CLIST, WM_SETTEXT,0,(LPARAM)_T("Your clist: classic"));
 +				SendDlgItemMessage(hwndDlg,IDC_NOTICE, WM_SETTEXT,0,(LPARAM)TranslateT("Warning: classic contact list plugin doesn`t have ability to use extraicons"));
 +				ShowWindow(GetDlgItem(hwndDlg, IDC_NOTICE), SW_SHOW);
 +				EnableWindow(GetDlgItem(hwndDlg, IDC_ADVICON), 0);
 +			}
 +			if (usedClist != clist_none) {
 +				for (int i = 0; i < cAdvancedIcons; i++)
 +				{
 +					SendMessage(GetDlgItem(hwndDlg, IDC_ADVICON), CB_ADDSTRING, 0, (LPARAM) TranslateTS( usedClist==clist_modern ? szAdvancedIconsModern[i] : szAdvancedIconsNicer[i]));
 +				}
 +
 +				if (usedClist == clist_modern )
 +					SendMessage(GetDlgItem(hwndDlg, IDC_ADVICON), CB_SETCURSEL, clistIcon-1, 0);
 +				else
 +					SendMessage(GetDlgItem(hwndDlg, IDC_ADVICON), CB_SETCURSEL, clistIcon, 0);
 +			}
 +
 +			SetWindowLongPtr(hTree,GWL_STYLE,GetWindowLongPtr(hTree,GWL_STYLE)|TVS_NOHSCROLL);
 +			{
 +				himlButtonIcons=ImageList_Create(GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON),ILC_COLOR32|ILC_MASK,2,2);
 +				TreeView_SetImageList(hTree,himlButtonIcons,TVSIL_NORMAL);
 +			}
 +			TreeView_DeleteAllItems(hTree);
 +
 +			int i;
 +			int cii = SIZEOF(ii);
 +			for (i=2; i<cii; i++) // we don`t need it IGNORE_ALL and IGNORE_MESSAGE
 +			{
 +				TVINSERTSTRUCT tvis={0};
 +				HTREEITEM hti;
 +                int index=ImageList_AddIcon(himlButtonIcons, LoadSkinnedIcon(ii[i].icon));
 +				tvis.hParent=NULL;
 +				tvis.hInsertAfter=TVI_LAST;
 +				tvis.item.mask=TVIF_PARAM|TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_STATE;
 +				tvis.item.lParam=(LPARAM)(ii[i].type);
 +				tvis.item.pszText=TranslateTS(ii[i].name);
 +				tvis.item.iImage=tvis.item.iSelectedImage=index;
 +				hti=TreeView_InsertItem(hTree,&tvis);
 +				TreeView_SetCheckState(hTree, hti, checkState(ii[i].type));
 +//				TreeView_SetCheckState(hTree, hti, (bool)(ii[i].filtered || ii[0].filtered));
 +			}
 +
 +			CheckDlgButton(hwndDlg, IDC_IGNORE_IGNOREALL, bUseMirandaSettings );
 +			EnableWindow(GetDlgItem(hwndDlg, IDC_FILTER), !bUseMirandaSettings);
 +			bInitializing = 0;
 +			return TRUE;
 +		}
 +		case WM_COMMAND:
 +		{
 +			switch (LOWORD(wParam)) {
 +				case IDC_ADVICON:
 +				{
 +					if ((HIWORD(wParam) == EN_CHANGE) && (!bInitializing) || (HIWORD(wParam) == CBN_SELENDOK))
 +					{
 +						SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
 +					}
 +					break;
 +				}
 +				case IDC_IGNORE_IGNOREALL:
 +				{
 +					EnableWindow(GetDlgItem(hwndDlg, IDC_FILTER),  !IsDlgButtonChecked(hwndDlg,IDC_IGNORE_IGNOREALL));
 +					SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
 +					break;
 +				}
 +			}
 +			break;
 +		}
 +		case WM_NOTIFY:
 +		{
 +			switch (((LPNMHDR)lParam)->idFrom)
 +			{
 +			case 0:
 +				{
 +					switch (((LPNMHDR)lParam)->code)
 +					{
 +						case PSN_APPLY:
 +						{
 +							if (usedClist==clist_none && hExtraIcon == NULL )
 +								return TRUE;
 +///////////
 +							DWORD flags=0;
 +							TVITEM tvi;
 +							tvi.mask=TVIF_HANDLE|TBIF_LPARAM;
 +							HWND hTree=GetDlgItem(hwndDlg,IDC_FILTER);
 +							tvi.hItem=TreeView_GetRoot(hTree); //check ignore all
 +							while(tvi.hItem)
 +							{
 +								TreeView_GetItem(hTree,&tvi);
 +								if(TreeView_GetCheckState(hTree,tvi.hItem)) flags|=1<<(tvi.lParam-1);
 +								tvi.hItem=TreeView_GetNextSibling(hTree,tvi.hItem);
 +							}
 +							DBWriteContactSettingDword(NULL, MODULENAME, "Filter", flags);
 +
 +							bUseMirandaSettings = IsDlgButtonChecked(hwndDlg,IDC_IGNORE_IGNOREALL) ? 1 : 0;
 +							DBWriteContactSettingByte(NULL, MODULENAME, "UseMirandaSettings", bUseMirandaSettings);
 +
 +							fill_filter();
 +//////////
 +							if (hExtraIcon == NULL)
 +							{
 +								clistIcon = SendMessage(GetDlgItem(hwndDlg, IDC_ADVICON), CB_GETCURSEL, 0, 0);
 +								if (usedClist == clist_modern )
 +									clistIcon++;
 +
 +								//Store options values to DB
 +								DBWriteContactSettingByte(NULL, MODULENAME, "AdvancedIcon", clistIcon);
 +
 +								HANDLE hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDFIRST, 0, 0);
 +									while (hContact)
 +								{
 +									CallService(MS_CLIST_EXTRA_SET_ICON, (WPARAM)hContact, (LPARAM)&g_IECClear);
 +									hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM)hContact, 0);
 +								}
 +								g_IECClear.ColumnType = clistIcon;
 +								if (hExtraIcon == NULL)
 +									onExtraImageListRebuild(0,0);
 +								hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDFIRST, 0, 0);
 +								while (hContact)
 +								{
 +									onExtraImageApplying((WPARAM)hContact,0);
 +									hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM)hContact, 0);
 +								}
 +							}
 +						}
 +					}
 +				}
 +			case IDC_FILTER:
 +				if (((LPNMHDR)lParam)->code == NM_CLICK)
 +				{
 +					SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
 +				}
 +			}
 +		}
 +		case WM_DESTROY:
 +			break;
 +	}
 +	return FALSE;
 +}
 +
 +int onOptInitialise(WPARAM wParam, LPARAM lParam)
 +{
 +	OPTIONSDIALOGPAGE odp = { 0 };
 +	odp.cbSize = sizeof(odp);
 +	odp.hInstance = g_hInst;
 +	odp.flags = ODPF_BOLDGROUPS;
 +	odp.pszGroup = LPGEN("Contact List");
 +	odp.pszTemplate = MAKEINTRESOURCEA(IDD_RATE_OPT);
 +	odp.pszTitle = MODULENAME;
 +	odp.pfnDlgProc = DlgProcOptions;
 +	Options_AddPage(wParam, &odp);
 +
 +	return 0;
 +}
 diff --git a/plugins/IgnoreState/src/resource.h b/plugins/IgnoreState/src/resource.h new file mode 100644 index 0000000000..810522778e --- /dev/null +++ b/plugins/IgnoreState/src/resource.h @@ -0,0 +1,27 @@ +//{{NO_DEPENDENCIES}}
 +// Microsoft Visual C++ generated include file.
 +// Used by ignore.rc
 +//
 +#define IDD_RATE_OPT                    9
 +#define IDI_IFULL                       101
 +#define IDI_IPART                       102
 +#define IDI_IMESS                       103
 +#define IDC_ADVICON                     1001
 +#define IDC_NOTMODERN_WARNING           1010
 +#define IDC_NOTICE                      1010
 +#define IDC_USED_CLIST                  1011
 +#define IDC_FILTER                      1012
 +#define IDC_TREE1                       1016
 +#define IDC_CHECK1                      1019
 +#define IDC_IGNORE_IGNOREALL            1019
 +
 +// Next default values for new objects
 +// 
 +#ifdef APSTUDIO_INVOKED
 +#ifndef APSTUDIO_READONLY_SYMBOLS
 +#define _APS_NEXT_RESOURCE_VALUE        104
 +#define _APS_NEXT_COMMAND_VALUE         40001
 +#define _APS_NEXT_CONTROL_VALUE         1020
 +#define _APS_NEXT_SYMED_VALUE           101
 +#endif
 +#endif
  | 
