diff options
author | Vadim Dashevskiy <watcherhd@gmail.com> | 2012-07-20 09:19:04 +0000 |
---|---|---|
committer | Vadim Dashevskiy <watcherhd@gmail.com> | 2012-07-20 09:19:04 +0000 |
commit | da9f6e8a856fc87172fb0d5997c607b4a930c102 (patch) | |
tree | a3f086c9e36a19b717a1cb1026a2eb751cfca078 /plugins/IgnoreState/src | |
parent | aa4076ff72097fd65a6c8a2369749afee6adf034 (diff) |
IEView, IgnoreState: changed folder structure
git-svn-id: http://svn.miranda-ng.org/main/trunk@1070 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
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
|