diff options
Diffstat (limited to 'plugins/QuickSearch/src/main.cpp')
-rw-r--r-- | plugins/QuickSearch/src/main.cpp | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/plugins/QuickSearch/src/main.cpp b/plugins/QuickSearch/src/main.cpp new file mode 100644 index 0000000000..fef90535c5 --- /dev/null +++ b/plugins/QuickSearch/src/main.cpp @@ -0,0 +1,190 @@ +/* +Copyright (C) 2012-21 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 <http://www.gnu.org/licenses/>. +*/ + +#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<CMPlugin>(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 = "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 = "QuickSearch window hotkey"; + hkd.szSection.a = "QuickSearch"; + hkd.pszService = QS_SHOWSERVICE; + hkd.DefHotKey = HOTKEYCODE(HOTKEYF_ALT, VK_F3); + g_plugin.addHotkey(&hkd); + + CreateFrame(0); + return 0; +} + +///////////////////////////////////////////////////////////////////////////////////////// + +static IconItem iconList[] = +{ + { "Quick Search", "QS", IDI_QS }, + { "New Column", "New", IDI_NEW }, + { "Column Up", "Up", IDI_UP }, + { "Column Down", "Down", IDI_DOWN }, + { "Delete Column", "Delete", IDI_DELETE }, + { "Default", "Default", IDI_DEFAULT}, + { "Reload", "Reload", IDI_RELOAD }, + { "Male", "Male", IDI_MALE }, + { "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].szSetting); + 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); + + LoadColumns(m_columns); + return 0; +} + +///////////////////////////////////////////////////////////////////////////////////////// + +int CMPlugin::Unload() +{ + if (hTTBButton) { + CallService(MS_TTB_REMOVEBUTTON, (WPARAM)hTTBButton, 0); + hTTBButton = 0; + } + + DestroyFrame(); + CloseSrWindow(); + return 0; +} |