summaryrefslogtreecommitdiff
path: root/plugins/AuthState/src
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/AuthState/src')
-rw-r--r--plugins/AuthState/src/commonheaders.h67
-rw-r--r--plugins/AuthState/src/main.cpp362
-rw-r--r--plugins/AuthState/src/options.cpp151
-rw-r--r--plugins/AuthState/src/resource.h25
-rw-r--r--plugins/AuthState/src/version.h20
5 files changed, 625 insertions, 0 deletions
diff --git a/plugins/AuthState/src/commonheaders.h b/plugins/AuthState/src/commonheaders.h
new file mode 100644
index 0000000000..beead07b56
--- /dev/null
+++ b/plugins/AuthState/src/commonheaders.h
@@ -0,0 +1,67 @@
+/*
+ Authorization State plugin for Miranda-IM (www.miranda-im.org)
+ (c) 2006-2009 by Thief
+
+ 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
+
+ File name : $URL: http://svn.miranda.im/mainrepo/authstate/trunk/commonheaders.h $
+ Revision : $Rev: 1686 $
+ Last change on : $Date: 2010-10-06 08:26:58 +0200 (Ср, 06 окт 2010) $
+ Last change by : $Author: ghazan $
+
+*/
+
+#ifndef COMMHEADERS_H
+#define COMMHEADERS_H
+
+#define MIRANDA_VER 0x0A00
+
+#include <windows.h>
+#include <stdio.h> // needed by m_utils.h
+#include <stddef.h> // needed by m_icolib.h > r9256
+#include <commctrl.h>
+
+// Miranda API headers
+#include <newpluginapi.h>
+#include <m_database.h>
+#include <m_system.h>
+#include <m_protocols.h>
+#include <m_utils.h>
+#include <m_clist.h>
+#include <m_options.h>
+#include <m_langpack.h>
+#include <m_icolib.h>
+#include <m_cluiframes.h>
+#include "resource.h"
+#include "Version.h"
+
+// Third party SDK headers
+#include "m_updater.h"
+#include "m_extraicons.h"
+
+static const int DefaultSlot = EXTRA_ICON_ADV2;
+#define MODULENAME "AuthState"
+
+extern int onOptInitialise(WPARAM wParam, LPARAM lParam);
+extern int onExtraImageApplying(WPARAM wParam, LPARAM lParam);
+extern int onExtraImageListRebuild(WPARAM wParam, LPARAM lParam);
+
+extern HINSTANCE g_hInst;
+extern IconExtraColumn g_IECAuth, g_IECGrant, g_IECAuthGrant, g_IECClear;
+extern INT clistIcon;
+extern byte bUseAuthIcon, bUseGrantIcon, bContactMenuItem, bIconsForRecentContacts;
+extern HANDLE hExtraIcon;
+
+#endif //COMMHEADERS_H
diff --git a/plugins/AuthState/src/main.cpp b/plugins/AuthState/src/main.cpp
new file mode 100644
index 0000000000..0f168c0fe1
--- /dev/null
+++ b/plugins/AuthState/src/main.cpp
@@ -0,0 +1,362 @@
+/*
+ Authorization State plugin for Miranda-IM (www.miranda-im.org)
+ (c) 2006-2010 by Thief
+
+ 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
+
+ File name : $URL: http://svn.miranda.im/mainrepo/authstate/trunk/main.cpp $
+ Revision : $Rev: 1686 $
+ Last change on : $Date: 2010-10-06 08:26:58 +0200 (Ср, 06 окт 2010) $
+ Last change by : $Author: ghazan $
+
+*/
+
+#include "commonheaders.h"
+
+HINSTANCE g_hInst;
+static HANDLE hHookModulesLoaded = NULL, hSystemOKToExit = NULL, hOptInitialise = NULL, hIcoLibIconsChanged = NULL;
+static HANDLE hHookExtraIconsRebuild = NULL, hHookExtraIconsApply = NULL, hContactSettingChanged = NULL, hContactAdded = NULL;
+static HANDLE hPrebuildContactMenu = NULL, hAuthMenuSelected = NULL;
+static HANDLE hUserMenu = NULL;
+HANDLE hExtraIcon = NULL;
+int hLangpack;
+
+IconExtraColumn g_IECAuth = {0};
+IconExtraColumn g_IECGrant = {0};
+IconExtraColumn g_IECAuthGrant = {0};
+IconExtraColumn g_IECClear = {0};
+INT clistIcon = 0; //Icon slot to use
+BYTE bUseAuthIcon = 0, bUseGrantIcon = 0, bContactMenuItem = 0, bIconsForRecentContacts = 0, bUseAuthGroup = 0;
+
+enum {
+icon_none,
+icon_auth,
+icon_grant,
+icon_both
+};
+
+PLUGININFOEX pluginInfo={
+ sizeof(PLUGININFOEX),
+ __PLUGIN_NAME,
+ PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM),
+ __DESCRIPTION,
+ __AUTHOR,
+ __AUTHOREMAIL,
+ __COPYRIGHT,
+ __AUTHORWEB,
+ UNICODE_AWARE, //doesn't replace anything built-in
+ {0xdace7d41, 0xdfa9, 0x4772, {0x89, 0xae, 0xa5, 0x9a, 0x61, 0x53, 0xe6, 0xb2}}
+/* DACE7D41-DFA9-4772-89AE-A59A6153E6B2 */
+};
+
+extern "C" BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
+{
+ g_hInst = hinstDLL;
+ return TRUE;
+}
+
+/* 236CBB9A-57D2-419D-B5CB-0DF5926E921C */
+#define MIID_AUTHSTATE {0x236cbb9a, 0x57d2, 0x419d, {0xb5, 0xcb, 0x0d, 0xf5, 0x92, 0x6e, 0x92, 0x1c}}
+
+extern "C" __declspec(dllexport) const MUUID* MirandaPluginInterfaces(void)
+{
+ static const MUUID interfaces[] = {MIID_AUTHSTATE, MIID_LAST};
+ return interfaces;
+}
+
+extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion)
+{
+ return &pluginInfo;
+}
+
+INT_PTR getIconToUse(HANDLE hContact, LPARAM lParam)
+{
+ char *proto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);
+// if (lParam == 1) return icon_none;
+ if (!DBGetContactSettingByte(hContact,"AuthState","ShowIcons",!bIconsForRecentContacts)) return icon_none;
+
+ if (DBGetContactSettingByte(0,"ICQ","UseServerCList",0))
+ if (DBGetContactSettingWord(hContact,proto,"ServerId",1) == 0)
+ return icon_both;
+
+ if (bUseAuthIcon & bUseGrantIcon)
+ if (DBGetContactSettingByte(hContact,proto,"Auth",0) && DBGetContactSettingByte(hContact,proto,"Grant",0))
+ return icon_both;
+
+ if (bUseAuthIcon)
+ if (DBGetContactSettingByte(hContact,proto,"Auth",0))
+ return icon_auth;
+
+ if (bUseGrantIcon)
+ if (DBGetContactSettingByte(hContact,proto,"Grant",0))
+ return icon_grant;
+ return icon_none;
+}
+
+int onExtraImageApplying(WPARAM wParam, LPARAM lParam)
+{
+ if (wParam == NULL)
+ return 0;
+
+ int usedIcon;
+ usedIcon = getIconToUse((HANDLE) wParam, lParam);
+
+ if (hExtraIcon != NULL)
+ {
+ const char *icon;
+ switch (usedIcon)
+ {
+ case icon_both: icon = "authgrant_icon"; break;
+ case icon_grant: icon = "grant_icon"; break;
+ case icon_auth: icon = "auth_icon"; break;
+ default: icon = NULL; break;
+ }
+ ExtraIcon_SetIcon(hExtraIcon, (HANDLE)wParam, icon);
+ }
+ else
+ {
+ switch (usedIcon)
+ {
+ case icon_both: CallService(MS_CLIST_EXTRA_SET_ICON, wParam, (LPARAM) &g_IECAuthGrant); break;
+ case icon_grant: CallService(MS_CLIST_EXTRA_SET_ICON, wParam, (LPARAM) &g_IECGrant); break;
+ case icon_auth: CallService(MS_CLIST_EXTRA_SET_ICON, wParam, (LPARAM) &g_IECAuth); break;
+ default: CallService(MS_CLIST_EXTRA_SET_ICON, wParam, (LPARAM) &g_IECClear); break;
+ }
+ }
+
+ return 0;
+}
+
+int onExtraImageListRebuild(WPARAM wParam, LPARAM lParam)
+{
+ g_IECAuth.cbSize = sizeof(IconExtraColumn);
+ g_IECAuth.ColumnType = clistIcon;
+ g_IECGrant.cbSize = sizeof(IconExtraColumn);
+ g_IECGrant.ColumnType = clistIcon;
+ g_IECAuthGrant.cbSize = sizeof(IconExtraColumn);
+ g_IECAuthGrant.ColumnType = clistIcon;
+
+ if (ServiceExists(MS_CLIST_EXTRA_ADD_ICON)) {
+ g_IECAuth.hImage = (HANDLE)CallService(MS_CLIST_EXTRA_ADD_ICON, (WPARAM)(HICON) CallService(MS_SKIN2_GETICON, 0, (LPARAM)"auth_icon"), (LPARAM)0);
+ g_IECGrant.hImage = (HANDLE)CallService(MS_CLIST_EXTRA_ADD_ICON, (WPARAM)(HICON) CallService(MS_SKIN2_GETICON, 0, (LPARAM)"grant_icon"), (LPARAM)0);
+ g_IECAuthGrant.hImage = (HANDLE)CallService(MS_CLIST_EXTRA_ADD_ICON, (WPARAM)(HICON) CallService(MS_SKIN2_GETICON, 0, (LPARAM)"authgrant_icon"), (LPARAM)0);
+ }
+
+ return 0;
+}
+
+int onContactSettingChanged(WPARAM wParam,LPARAM lParam)
+{
+ DBCONTACTWRITESETTING *cws=(DBCONTACTWRITESETTING*)lParam;
+ char *proto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO, wParam, 0);
+ if (!proto) return 0;
+
+ if (!lstrcmpA(cws->szModule,proto))
+ if (!lstrcmpA(cws->szSetting,"Auth") || !lstrcmpA(cws->szSetting,"Grant") || !lstrcmpA(cws->szSetting,"ServerId"))
+ onExtraImageApplying(wParam, 1);
+
+ return 0;
+}
+
+int onDBContactAdded(WPARAM wParam, LPARAM lParam)
+{
+ // A new contact added, mark it as recent
+ DBWriteContactSettingByte((HANDLE)wParam, MODULENAME, "ShowIcons", 1);
+ onExtraImageApplying(wParam, 0);
+
+ return 0;
+}
+
+INT_PTR onAuthMenuSelected(WPARAM wParam, LPARAM lParam)
+{
+ byte enabled = DBGetContactSettingByte((HANDLE)wParam,"AuthState","ShowIcons",1);
+ DBWriteContactSettingByte((HANDLE)wParam, MODULENAME, "ShowIcons", !enabled);
+
+ if (enabled)
+ CallService(MS_CLIST_EXTRA_SET_ICON, (WPARAM) wParam, (LPARAM) &g_IECClear);
+ else
+ onExtraImageApplying(wParam, 0);
+
+ return 0;
+}
+
+int onPrebuildContactMenu(WPARAM wParam, LPARAM lParam)
+{
+ char *proto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO, wParam, 0);
+ if (!proto) return 0;
+
+ CLISTMENUITEM mi = {0};
+ mi.cbSize = sizeof(CLISTMENUITEM);
+
+ if (!DBGetContactSettingByte((HANDLE)wParam,proto,"Auth",0) && !DBGetContactSettingByte((HANDLE)wParam,proto,"Grant",0) && DBGetContactSettingWord((HANDLE)wParam,proto,"ServerId",0))
+ mi.flags = CMIF_TCHAR | CMIM_FLAGS | CMIF_HIDDEN;
+ else
+ mi.flags = CMIF_TCHAR | CMIM_FLAGS;
+
+ if (DBGetContactSettingByte((HANDLE)wParam,"AuthState","ShowIcons",1))
+ {
+ mi.flags |= CMIF_TCHAR | CMIM_NAME;
+ mi.ptszName = _T("Disable AuthState icons");
+ }
+ else
+ {
+ mi.flags |= CMIF_TCHAR | CMIM_NAME;
+ mi.ptszName = _T("Enable AuthState icons");
+ }
+
+ CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hUserMenu, (LPARAM)&mi);
+
+ return 0;
+}
+
+int onModulesLoaded(WPARAM wParam,LPARAM lParam)
+{
+ // IcoLib support
+ SKINICONDESC sid = {0};
+ ZeroMemory(&sid, sizeof(sid));
+ TCHAR szFile[MAX_PATH];
+ sid.cbSize = sizeof(sid);
+ sid.flags = SIDF_ALL_TCHAR;
+
+ sid.ptszSection = _T("Auth State");
+ GetModuleFileName(g_hInst, szFile, MAX_PATH);
+ sid.ptszDefaultFile = szFile;
+
+ sid.ptszDescription = _T("Auth");
+ sid.pszName = "auth_icon";
+ sid.iDefaultIndex = -IDI_AUTH;
+ Skin_AddIcon(&sid);
+
+ sid.ptszDescription = _T("Grant");
+ sid.pszName = "grant_icon";
+ sid.iDefaultIndex = -IDI_GRANT;
+ Skin_AddIcon(&sid);
+
+ sid.ptszDescription = _T("Auth & Grant");
+ sid.pszName = "authgrant_icon";
+ sid.iDefaultIndex = -IDI_AUTHGRANT;
+ Skin_AddIcon(&sid);
+
+ // extra icons
+ hExtraIcon = ExtraIcon_Register("authstate", "Auth State", "authgrant_icon");
+ 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, 1);
+ 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);
+ }
+ hOptInitialise = HookEvent(ME_OPT_INITIALISE, onOptInitialise);
+ if (bContactMenuItem) hPrebuildContactMenu = HookEvent(ME_CLIST_PREBUILDCONTACTMENU, onPrebuildContactMenu);
+
+ // Updater support
+ if (ServiceExists(MS_UPDATE_REGISTER)) {
+ Update update = {0};
+ char szVersion[16];
+
+ update.cbSize = sizeof(Update);
+
+ update.szComponentName = pluginInfo.shortName;
+ update.pbVersion = (BYTE *)CreateVersionString(pluginInfo.version, szVersion);
+ update.cpbVersion = lstrlenA((char *)update.pbVersion);
+
+ update.szUpdateURL = UPDATER_AUTOREGISTER;
+
+ // these are the three lines that matter - the archive, the page containing the version string, and the text (or data)
+ // before the version that we use to locate it on the page
+ // (note that if the update URL and the version URL point to standard file listing entries, the backend xml
+ // data will be used to check for updates rather than the actual web page - this is not true for beta urls)
+ update.szBetaUpdateURL = "http://thief.miranda.im/authstate.zip";
+ update.szBetaVersionURL = "http://thief.miranda.im/updater/authstate_version.txt";
+ update.szBetaChangelogURL = "http://thief.miranda.im";
+ update.pbBetaVersionPrefix = (BYTE *)"AuthState ";
+
+ update.cpbBetaVersionPrefix = lstrlenA((char *)update.pbBetaVersionPrefix);
+
+ CallService(MS_UPDATE_REGISTER, 0, (WPARAM)&update);
+ }
+
+ return 0;
+}
+
+int onSystemOKToExit(WPARAM wParam,LPARAM lParam)
+{
+ UnhookEvent(hHookModulesLoaded);
+ UnhookEvent(hHookExtraIconsRebuild);
+ UnhookEvent(hHookExtraIconsApply);
+ UnhookEvent(hOptInitialise);
+ UnhookEvent(hSystemOKToExit);
+ UnhookEvent(hContactSettingChanged);
+ if (hIcoLibIconsChanged) UnhookEvent(hIcoLibIconsChanged);
+ if (hContactAdded) UnhookEvent(hContactAdded);
+ if (hPrebuildContactMenu)
+ {
+ UnhookEvent(hPrebuildContactMenu);
+ UnhookEvent(hUserMenu);
+ }
+ DestroyServiceFunction(hAuthMenuSelected);
+
+ 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);
+ bUseAuthIcon = DBGetContactSettingByte(NULL, MODULENAME, "EnableAuthIcon", 1);
+ bUseGrantIcon = DBGetContactSettingByte(NULL, MODULENAME, "EnableGrantIcon", 1);
+ bContactMenuItem = DBGetContactSettingByte(NULL, MODULENAME, "MenuItem", 0);
+ bIconsForRecentContacts = DBGetContactSettingByte(NULL, MODULENAME, "EnableOnlyForRecent", 0);
+
+ hContactAdded = HookEvent(ME_DB_CONTACT_ADDED, onDBContactAdded);
+
+ if (bContactMenuItem)
+ {
+ hAuthMenuSelected = CreateServiceFunction("AuthState/MenuItem", onAuthMenuSelected);
+
+ CLISTMENUITEM mi = {0};
+ mi.cbSize = sizeof(CLISTMENUITEM);
+ mi.position = -1999901005;
+ mi.flags = CMIF_TCHAR;
+ mi.ptszName = _T("Enable AuthState icons");
+ mi.pszService = "AuthState/MenuItem";
+ hUserMenu = Menu_AddContactMenuItem(&mi);
+ }
+
+ 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/AuthState/src/options.cpp b/plugins/AuthState/src/options.cpp
new file mode 100644
index 0000000000..d2248d9e44
--- /dev/null
+++ b/plugins/AuthState/src/options.cpp
@@ -0,0 +1,151 @@
+/*
+ Authorization State plugin for Miranda-IM (www.miranda-im.org)
+ (c) 2006-2010 by Thief
+
+ 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
+
+ File name : $URL: http://svn.miranda.im/mainrepo/authstate/trunk/options.cpp $
+ Revision : $Rev: 1686 $
+ Last change on : $Date: 2010-10-06 08:26:58 +0200 (Ср, 06 окт 2010) $
+ Last change by : $Author: ghazan $
+
+*/
+
+#include "commonheaders.h"
+
+const TCHAR* szAdvancedIcons[] = {_T("Email"), _T("Protocol"), _T("SMS"), _T("Advanced 1"), _T("Advanced 2"), _T("Web"), _T("Client"), _T("Advanced 3"), _T("Advanced 4"), _T("Advanced 5")};
+const INT cAdvancedIcons = sizeof(szAdvancedIcons) / sizeof(szAdvancedIcons[0]);
+
+INT_PTR CALLBACK DlgProcOptions(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ static int bInitializing = 0;
+ switch (msg)
+ {
+ case WM_INITDIALOG:
+ {
+ TranslateDialogDefault(hwndDlg);
+ bInitializing = 1;
+ if (hExtraIcon==NULL)
+ {
+ for (int i = 0; i < cAdvancedIcons; i++)
+ {
+ SendMessage(GetDlgItem(hwndDlg, IDC_ADVICON), CB_ADDSTRING, 0, (LPARAM) TranslateTS(szAdvancedIcons[i]));
+ }
+ SendMessage(GetDlgItem(hwndDlg, IDC_ADVICON), CB_SETCURSEL, clistIcon-1, 0);
+ }
+ 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);
+ }
+
+ CheckDlgButton(hwndDlg, IDC_AUTHICON, bUseAuthIcon ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_GRANTICON, bUseGrantIcon ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_ENABLEMENUITEM, bContactMenuItem ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_ICONSFORRECENT, bIconsForRecentContacts ? BST_CHECKED : BST_UNCHECKED);
+
+ bInitializing = 0;
+ return TRUE;
+ }
+
+ case WM_COMMAND:
+ {
+ switch (LOWORD(wParam))
+ {
+ case IDC_AUTHICON:
+ case IDC_GRANTICON:
+ case IDC_ENABLEMENUITEM:
+ case IDC_ICONSFORRECENT:
+ {
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ }
+ case IDC_ADVICON:
+ {
+ if ((HIWORD(wParam) == EN_CHANGE) && (!bInitializing) || (HIWORD(wParam) == CBN_SELENDOK))
+ {
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ }
+ break;
+ }
+ }
+ break;
+ }
+
+ case WM_NOTIFY:
+ {
+ if (((LPNMHDR)lParam)->idFrom == 0)
+ switch (((LPNMHDR)lParam)->code)
+ {
+ case PSN_APPLY:
+ {
+ bUseAuthIcon = IsDlgButtonChecked(hwndDlg, IDC_AUTHICON);
+ bUseGrantIcon = IsDlgButtonChecked(hwndDlg, IDC_GRANTICON);
+ bContactMenuItem = IsDlgButtonChecked(hwndDlg, IDC_ENABLEMENUITEM);
+ bIconsForRecentContacts = IsDlgButtonChecked(hwndDlg, IDC_ICONSFORRECENT);
+
+ clistIcon = SendMessage(GetDlgItem(hwndDlg, IDC_ADVICON), CB_GETCURSEL, 0, 0);
+ 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;
+ 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);
+ }
+
+ //Store options values to DB
+ DBWriteContactSettingByte(NULL, MODULENAME, "AdvancedIcon", clistIcon);
+ DBWriteContactSettingByte(NULL, MODULENAME, "EnableAuthIcon", bUseAuthIcon);
+ DBWriteContactSettingByte(NULL, MODULENAME, "EnableGrantIcon", bUseGrantIcon);
+ DBWriteContactSettingByte(NULL, MODULENAME, "MenuItem", bContactMenuItem);
+ DBWriteContactSettingByte(NULL, MODULENAME, "EnableOnlyForRecent", bIconsForRecentContacts);
+ }
+ return TRUE;
+ }
+ }
+
+ case WM_DESTROY:
+ break;
+
+ }
+ return FALSE;
+}
+
+int onOptInitialise(WPARAM wParam, LPARAM lParam)
+{
+ OPTIONSDIALOGPAGE odp = { 0 };
+ odp.cbSize = sizeof(odp);
+ odp.hInstance = g_hInst;
+ odp.pszGroup = LPGEN("Contact List");
+ odp.pszTemplate = MAKEINTRESOURCEA(IDD_AUTHSTATE_OPT);
+ odp.pszTitle = LPGEN("Auth State");
+ odp.pfnDlgProc = DlgProcOptions;
+ odp.flags = ODPF_BOLDGROUPS;
+ Options_AddPage(wParam, &odp);
+
+ return 0;
+}
diff --git a/plugins/AuthState/src/resource.h b/plugins/AuthState/src/resource.h
new file mode 100644
index 0000000000..49c8f2fb6a
--- /dev/null
+++ b/plugins/AuthState/src/resource.h
@@ -0,0 +1,25 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by authstate.rc
+//
+#define IDI_AUTH 101
+#define IDI_GRANT 102
+#define IDI_AUTHGRANT 103
+#define IDD_AUTHSTATE_OPT 103
+#define IDC_ADVICON 1001
+#define IDC_AUTHICON 1002
+#define IDC_GRANTICON 1003
+#define IDC_ENABLEMENUITEM 1005
+#define IDC_ICONSFORRECENT 1006
+#define IDC_NOTICE 1009
+
+// 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 1010
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/plugins/AuthState/src/version.h b/plugins/AuthState/src/version.h
new file mode 100644
index 0000000000..3c39613d72
--- /dev/null
+++ b/plugins/AuthState/src/version.h
@@ -0,0 +1,20 @@
+#define __MAJOR_VERSION 0
+#define __MINOR_VERSION 0
+#define __RELEASE_NUM 2
+#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 "Authorization State"
+#define __INTERNAL_NAME "AuthState"
+#define __FILENAME "AuthState.dll"
+#define __DESCRIPTION "If contact didn't authorized you this plugin puts an icon in front of contacts name."
+#define __AUTHOR "Thief, idea by snwbrdr"
+#define __AUTHOREMAIL "thief@miranda.im"
+#define __AUTHORWEB "http://thief.miranda.im/"
+#define __COPYRIGHT "© 2006-2010 Alexander Turyak"