/* Copyright (C) 2012-23 Miranda NG team (https://miranda-ng.org) 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 version 2 of the License. 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, see . */ #include "stdafx.h" CMPlugin g_plugin; HANDLE hTTBButton; bool g_bVarsInstalled, g_bTipperInstalled, g_bFingerInstalled; int OnOptInit(WPARAM, LPARAM); ///////////////////////////////////////////////////////////////////////////////////////// PLUGININFOEX pluginInfoEx = { sizeof(PLUGININFOEX), __PLUGIN_NAME, PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM), __DESCRIPTION, __AUTHOR, __COPYRIGHT, __AUTHORWEB, UNICODE_AWARE, // {49BD9F2A-3111-4EB9-87E3-71E69CD97F7C} {0x49bd9f2a, 0x3111, 0x4eb9, {0x87, 0xe3, 0x71, 0xe6, 0x9c, 0xd9, 0x7f, 0x7c}} }; CMPlugin::CMPlugin() : PLUGIN(MODULENAME, pluginInfoEx), m_columns(1) { } ///////////////////////////////////////////////////////////////////////////////////////// static int OnTTBLoaded(WPARAM, LPARAM) { TTBButton ttb = {}; ttb.dwFlags = TTBBF_VISIBLE; ttb.pszService = QS_SHOWSERVICE; ttb.hIconHandleDn = ttb.hIconHandleUp = g_plugin.getIconHandle(IDI_QS); ttb.name = MODULENAME; ttb.pszTooltipUp = ttb.pszTooltipDn = LPGEN("Quick Search"); hTTBButton = g_plugin.addTTB(&ttb); return 0; } static INT_PTR OpenSearchWindow(WPARAM wParam, LPARAM) { OpenSrWindow((wchar_t *)wParam); return 0; } static int OnCheckPlugins(WPARAM, LPARAM) { g_bVarsInstalled = ServiceExists(MS_VARS_FORMATSTRING); g_bTipperInstalled = ServiceExists(MS_TIPPER_SHOWTIPW); g_bFingerInstalled = ServiceExists(MS_FP_GETCLIENTICONW); return 0; } static int OnModulesLoaded(WPARAM, LPARAM) { HookEvent(ME_TTB_MODULELOADED, OnTTBLoaded); CreateServiceFunction(QS_SHOWSERVICE, OpenSearchWindow); // add menu item CMenuItem mi(&g_plugin); SET_UID(mi, 0x98C2A92A, 0xD93D, 0x43E8, 0x91, 0xC3, 0x3B, 0xB6, 0xBE, 0x43, 0x44, 0xF0); mi.name.a = LPGEN("Quick Search"); mi.position = 500050000; mi.pszService = QS_SHOWSERVICE; mi.hIcolibItem = g_plugin.getIconHandle(IDI_QS); Menu_AddMainMenuItem(&mi); // register hotkey HOTKEYDESC hkd = {}; hkd.pszName = "QS_Global"; hkd.szDescription.a = LPGEN("Open Quick Search window"); hkd.szSection.a = LPGEN("Quick Search"); hkd.pszService = QS_SHOWSERVICE; hkd.DefHotKey = HOTKEYCODE(HOTKEYF_ALT, VK_F3); g_plugin.addHotkey(&hkd); return 0; } ///////////////////////////////////////////////////////////////////////////////////////// static IconItem iconList[] = { { LPGEN("Quick Search"), "QS", IDI_QS }, { LPGEN("New Column"), "New", IDI_NEW }, { LPGEN("Column Up"), "Up", IDI_UP }, { LPGEN("Column Down"), "Down", IDI_DOWN }, { LPGEN("Delete Column"), "Delete", IDI_DELETE }, { LPGEN("Default"), "Default", IDI_DEFAULT}, { LPGEN("Reload"), "Reload", IDI_RELOAD }, { LPGEN("Male"), "Male", IDI_MALE }, { LPGEN("Female"), "Female", IDI_FEMALE }, }; struct { COLORREF defValue; const char *szSetting, *szDescr; } static sttColors[color_max] = { { 0x00FFFFFF, "back_norm", LPGEN("Normal background") }, { 0x00000000, "fore_norm", LPGEN("Normal foreground") }, { 0x00EBE6DE, "back_odd" , LPGEN("Odd background") }, { 0x00000000, "fore_odd" , LPGEN("Odd foreground") }, { 0x008080FF, "back_dis" , LPGEN("Disabled account background") }, { 0x00000000, "fore_dis" , LPGEN("Disabled account foreground") }, { 0x008000FF, "back_del" , LPGEN("Deleted account background") }, { 0x00000000, "fore_del" , LPGEN("Deleted account foreground") }, { 0x0080FFFF, "back_hid" , LPGEN("Hidden contact background") }, { 0x00000000, "fore_hid" , LPGEN("Hidden contact foreground") }, { 0x00BAE699, "back_meta", LPGEN("Metacontact background") }, { 0x00000000, "fore_meta", LPGEN("Metacontact foreground") }, { 0x00B3CCC1, "back_sub" , LPGEN("Subcontact background") }, { 0x00000000, "fore_sub" , LPGEN("Subcontact foreground") }, }; static int OnColorReload(WPARAM, LPARAM) { for (int i = 0; i < color_max; i++) g_plugin.m_colors[i] = Colour_Get(MODULENAME, sttColors[i].szDescr); return 0; } int CMPlugin::Load() { g_plugin.registerIcon(MODULENAME, iconList); ColourID colourid = {}; strncpy_s(colourid.group, MODULENAME, _TRUNCATE); strncpy_s(colourid.dbSettingsGroup, MODULENAME, _TRUNCATE); for (auto &it : sttColors) { strncpy_s(colourid.name, it.szDescr, _TRUNCATE); strncpy_s(colourid.setting, it.szSetting, _TRUNCATE); colourid.defcolour = it.defValue; colourid.order = int(&it - sttColors); g_plugin.addColor(&colourid); } OnColorReload(0, 0); OnCheckPlugins(0, 0); HookEvent(ME_COLOUR_RELOAD, OnColorReload); HookEvent(ME_OPT_INITIALISE, OnOptInit); HookEvent(ME_SYSTEM_MODULESLOADED, OnModulesLoaded); HookEvent(ME_SYSTEM_MODULELOAD, OnCheckPlugins); HookEvent(ME_SYSTEM_MODULEUNLOAD, OnCheckPlugins); if (!LoadColumns(m_columns)) LoadDefaultColumns(m_columns); return 0; } ///////////////////////////////////////////////////////////////////////////////////////// int CMPlugin::Unload() { if (hTTBButton) { CallService(MS_TTB_REMOVEBUTTON, (WPARAM)hTTBButton, 0); hTTBButton = 0; } CloseSrWindow(); return 0; }