From f04d64869f3b1de54fb343f28f955584780001b8 Mon Sep 17 00:00:00 2001 From: mataes2007 Date: Sat, 26 Nov 2011 15:41:10 +0000 Subject: Project folders rename part 3 git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@215 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb --- Rate/main.cpp | 289 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 289 insertions(+) create mode 100644 Rate/main.cpp (limited to 'Rate/main.cpp') diff --git a/Rate/main.cpp b/Rate/main.cpp new file mode 100644 index 0000000..41c7efa --- /dev/null +++ b/Rate/main.cpp @@ -0,0 +1,289 @@ +/*==========================================================================*/ +/* + FILE DESCRIPTION: Rate main + + AUTHOR: Kildor + GROUP: The NULL workgroup + PROJECT: Contact`s rate + PART: Main + VERSION: 1.0 + CREATED: 20.12.2006 23:11:41 + + EMAIL: kostia@ngs.ru + WWW: http://kildor.miranda.im + + COPYRIGHT: (C) 2006 The NULL workgroup. All Rights Reserved. +*/ +/*--------------------------------------------------------------------------*/ +/* + Copyright (C) 2006 The NULL workgroup + + 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 ID: $Id$ + + CHANGE LOG: + + $Log$ +*/ +#include "commonheaders.h" + +HINSTANCE g_hInst; +PLUGINLINK *pluginLink; +static HANDLE hHookModulesLoaded = NULL, hSystemOKToExit = NULL, hOptInitialise = NULL, hIcoLibIconsChanged = NULL; +static HANDLE hHookExtraIconsRebuild = NULL, hHookExtraIconsApply = NULL, hContactSettingChanged = NULL; +static HANDLE hPrebuildContactMenu = NULL; +static HANDLE hExtraIcon = NULL; +IconExtraColumn g_IECRateHigh = {0}; +IconExtraColumn g_IECRateMedium = {0}; +IconExtraColumn g_IECRateLow = {0}; +IconExtraColumn g_IECClear = {0}; +int clistIcon = 0; //Icon slot to use +byte bRate = 0; + +extern int onOptInitialise(WPARAM wParam, LPARAM lParam); + + +PLUGININFOEX pluginInfo={ + sizeof(PLUGININFOEX), + "Contact`s Rate", + PLUGIN_MAKE_VERSION(0,0,2,1), + "Show rating of contact in contact list (if presents).", + "Kildor, Thief", + "kostia@ngs.ru", + "© 2006-2009 Kostia Romanov, based on AuthState by Alexander Turyak", + "http://kildor.miranda.im/", + 0, // is not unicode + 0, //doesn't replace anything built-in + {0x45230488, 0x977b, 0x405b, {0x85, 0x6d, 0xea, 0x27, 0x6d, 0x70, 0x83, 0xb7}} +/* 45230488-977b-405b-856d-ea276d7083b7 */ + +}; + +extern "C" BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) +{ + g_hInst = hinstDLL; + return TRUE; +} + +// плагининфо +extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion) +{ + if (mirandaVersion < PLUGIN_MAKE_VERSION(0, 8, 0, 29)) + { + MessageBox( NULL, TranslateT("The plugin requires Miranda IM 0.8.0.29 or later for correct applying its preferences."), TranslateT("Contact` Rate"), + MB_OK|MB_ICONWARNING|MB_SETFOREGROUND|MB_TOPMOST ); + } + + return &pluginInfo; +} + +extern "C" __declspec(dllexport) const MUUID* MirandaPluginInterfaces(void) +{ + static const MUUID interfaces[] = {MIID_CONTACTSRATE, MIID_LAST}; + return interfaces; +} + +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; +} + +void setExtaIcon(HANDLE hContact, int bRate = -1, BOOL clear = TRUE) +{ + if (hContact == NULL) + return; + + if (bRate < 0) + bRate = DBGetContactSettingByte(hContact, "CList", "Rate", 0); + + if (hExtraIcon != NULL) + { + const char *icon; + switch(bRate) + { + case 3: icon = "rate_high"; break; + case 2: icon = "rate_medium"; break; + case 1: icon = "rate_low"; break; + default: icon = NULL; break; + } + + if (icon == NULL && !clear) + return; + + ExtraIcon_SetIcon(hExtraIcon, hContact, icon); + } + else + { + switch(bRate) + { + case 3: CallService(MS_CLIST_EXTRA_SET_ICON, (WPARAM) hContact, (LPARAM) &g_IECRateHigh); break; + case 2: CallService(MS_CLIST_EXTRA_SET_ICON, (WPARAM) hContact, (LPARAM) &g_IECRateMedium); break; + case 1: CallService(MS_CLIST_EXTRA_SET_ICON, (WPARAM) hContact, (LPARAM) &g_IECRateLow); break; + default: CallService(MS_CLIST_EXTRA_SET_ICON, (WPARAM) hContact, (LPARAM) &g_IECClear); break; + } + } +} + + +int onExtraImageApplying(WPARAM wParam, LPARAM lParam) +{ + setExtaIcon((HANDLE) wParam); + return 0; +} + + +int onExtraImageListRebuild(WPARAM wParam, LPARAM lParam) +{ + g_IECRateHigh.cbSize = sizeof(IconExtraColumn); + g_IECRateHigh.ColumnType = clistIcon; + g_IECRateMedium.cbSize = sizeof(IconExtraColumn); + g_IECRateMedium.ColumnType = clistIcon; + g_IECRateLow.cbSize = sizeof(IconExtraColumn); + g_IECRateLow.ColumnType = clistIcon; + + if (ServiceExists(MS_CLIST_EXTRA_ADD_ICON)) + { + g_IECRateHigh.hImage = (HANDLE)CallService(MS_CLIST_EXTRA_ADD_ICON, (WPARAM)(HICON) CallService(MS_SKIN2_GETICON, 0, (LPARAM)"rate_high"), (LPARAM)0); + g_IECRateMedium.hImage = (HANDLE)CallService(MS_CLIST_EXTRA_ADD_ICON, (WPARAM)(HICON) CallService(MS_SKIN2_GETICON, 0, (LPARAM)"rate_medium"), (LPARAM)0); + g_IECRateLow.hImage = (HANDLE)CallService(MS_CLIST_EXTRA_ADD_ICON, (WPARAM)(HICON) CallService(MS_SKIN2_GETICON, 0, (LPARAM)"rate_low"), (LPARAM)0); + } + return 0; +} + + +static void init_icolib (void) +{ + SKINICONDESC sid = {0}; + char szFile[MAX_PATH]; + sid.cbSize = SKINICONDESC_SIZE_V1; + int i = 0; + + sid.pszSection = Translate("Contact Rate"); + GetModuleFileNameA(g_hInst, szFile, MAX_PATH); + sid.pszDefaultFile = szFile; + + 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 = (HANDLE) CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid); + } +} + + +int onModulesLoaded(WPARAM wParam,LPARAM lParam) +{ + //IcoLib support + init_icolib(); + + + // Updater support + // switch off + 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 = strlen((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://kildor.miranda.im/miranda/rate.zip"; + update.szBetaVersionURL = "http://kildor.miranda.im/miranda/rate.txt"; + update.szBetaChangelogURL = "http://kildor.miranda.im/miranda/rate_changes.txt"; + update.pbBetaVersionPrefix = (BYTE *)"Rate "; + update.cpbBetaVersionPrefix = strlen((char *)update.pbBetaVersionPrefix); + + CallService(MS_UPDATE_REGISTER, 0, (WPARAM)&update); + } + + // Extra icon support + hExtraIcon = ExtraIcon_Register("contact_rate", "Contact rate", "rate_high"); + + if (hExtraIcon != NULL) + { + // Set initial value for all contacts + HANDLE hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDFIRST, 0, 0); + while (hContact != NULL) + { + setExtaIcon(hContact, -1, FALSE); + hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM) hContact, 0); + } + } + else + { + hOptInitialise = HookEvent(ME_OPT_INITIALISE, onOptInitialise); + 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 (wParam != NULL && !lstrcmp(cws->szModule,"CList") && !lstrcmp(cws->szSetting,"Rate")) + setExtaIcon((HANDLE)wParam, cws->value.type == DBVT_DELETED ? 0 : cws->value.bVal); + + return 0; +} + + +extern "C" int __declspec(dllexport) Load(PLUGINLINK *link) +{ + pluginLink=link; + + 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; +} -- cgit v1.2.3